From sabre at nondot.org Mon Jan 5 01:46:05 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 07:46:05 -0000 Subject: [llvm-commits] [llvm] r61675 - /llvm/trunk/lib/AsmParser/LLParser.cpp Message-ID: <200901050746.n057k599030526@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 01:46:05 2009 New Revision: 61675 URL: http://llvm.org/viewvc/llvm-project?rev=61675&view=rev Log: PR3281:crash00.ll: produce this diagnostic instead of crashing: @t = global i8 0, align 3 ^ Modified: llvm/trunk/lib/AsmParser/LLParser.cpp Modified: llvm/trunk/lib/AsmParser/LLParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61675&r1=61674&r2=61675&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.cpp (original) +++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jan 5 01:46:05 2009 @@ -793,7 +793,11 @@ Alignment = 0; if (!EatIfPresent(lltok::kw_align)) return false; - return ParseUInt32(Alignment); + LocTy AlignLoc = Lex.getLoc(); + if (ParseUInt32(Alignment)) return true; + if (!isPowerOf2_32(Alignment)) + return Error(AlignLoc, "alignment is not a power of two"); + return false; } /// ParseOptionalCommaAlignment From sabre at nondot.org Mon Jan 5 01:52:51 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 07:52:51 -0000 Subject: [llvm-commits] [llvm] r61676 - /llvm/trunk/lib/AsmParser/LLParser.cpp Message-ID: <200901050752.n057qp63030714@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 01:52:51 2009 New Revision: 61676 URL: http://llvm.org/viewvc/llvm-project?rev=61676&view=rev Log: fix PR3281:accepted0[02].ll: represent empty arrays distinctly, and diagnose attempts to initialize non-empty arrays with them. This produces: llvm-as: accepted02.ll:1:28: invalid empty array initializer @"o" = global [5 x double] [] ^ llvm-as: accepted00.ll:1:32: invalid empty array initializer @"za" = thread_local global {} [] ^ [ Modified: llvm/trunk/lib/AsmParser/LLParser.cpp Modified: llvm/trunk/lib/AsmParser/LLParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61676&r1=61675&r2=61676&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.cpp (original) +++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jan 5 01:52:51 2009 @@ -36,6 +36,7 @@ t_LocalName, t_GlobalName, // Name in StrVal. t_APSInt, t_APFloat, // Value in APSIntVal/APFloatVal. t_Null, t_Undef, t_Zero, // No value. + t_EmptyArray, // No value: [] t_Constant, // Value in ConstantVal. t_InlineAsm // Value in StrVal/StrVal2/UIntVal. } Kind; @@ -1578,7 +1579,7 @@ if (Elts.empty()) { // Use undef instead of an array because it's inconvenient to determine // the element type at this point, there being no elements to examine. - ID.Kind = ValID::t_Undef; + ID.Kind = ValID::t_EmptyArray; return false; } @@ -1904,6 +1905,11 @@ case ValID::t_Undef: V = UndefValue::get(Ty); return false; + case ValID::t_EmptyArray: + if (!isa(Ty) || cast(Ty)->getNumElements() != 0) + return Error(ID.Loc, "invalid empty array initializer"); + V = UndefValue::get(Ty); + return false; case ValID::t_Zero: if (!Ty->isFirstClassType()) return Error(ID.Loc, "invalid type for null constant"); From sabre at nondot.org Mon Jan 5 01:58:59 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 07:58:59 -0000 Subject: [llvm-commits] [llvm] r61677 - /llvm/trunk/lib/VMCore/Function.cpp Message-ID: <200901050758.n057wxba030947@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 01:58:59 2009 New Revision: 61677 URL: http://llvm.org/viewvc/llvm-project?rev=61677&view=rev Log: tighten up return type check Modified: llvm/trunk/lib/VMCore/Function.cpp Modified: llvm/trunk/lib/VMCore/Function.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Function.cpp?rev=61677&r1=61676&r2=61677&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Function.cpp (original) +++ llvm/trunk/lib/VMCore/Function.cpp Mon Jan 5 01:58:59 2009 @@ -161,12 +161,10 @@ const std::string &name, Module *ParentModule) : GlobalValue(PointerType::getUnqual(Ty), Value::FunctionVal, 0, 0, Linkage, name) { + assert(FunctionType::isValidReturnType(getReturnType()) && + !isa(getReturnType()) && "invalid return type"); SymTab = new ValueSymbolTable(); - assert((getReturnType()->isFirstClassType() ||getReturnType() == Type::VoidTy - || isa(getReturnType())) - && "LLVM functions cannot return aggregate values!"); - // If the function has arguments, mark them as lazily built. if (Ty->getNumParams()) SubclassData = 1; // Set the "has lazy arguments" bit. From sabre at nondot.org Mon Jan 5 02:00:30 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 08:00:30 -0000 Subject: [llvm-commits] [llvm] r61678 - /llvm/trunk/lib/AsmParser/LLParser.cpp Message-ID: <200901050800.n0580UfX031005@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 02:00:30 2009 New Revision: 61678 URL: http://llvm.org/viewvc/llvm-project?rev=61678&view=rev Log: reject PR3281:crash01.ll with: llvm-as: crash01.ll:1:9: invalid function return type declare opaque @t() ^ Modified: llvm/trunk/lib/AsmParser/LLParser.cpp Modified: llvm/trunk/lib/AsmParser/LLParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61678&r1=61677&r2=61678&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.cpp (original) +++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jan 5 02:00:30 2009 @@ -2035,7 +2035,8 @@ return Error(LinkageLoc, "invalid function linkage type"); } - if (!FunctionType::isValidReturnType(RetType)) + if (!FunctionType::isValidReturnType(RetType) || + isa(RetType)) return Error(RetTypeLoc, "invalid function return type"); if (Lex.getKind() != lltok::GlobalVar) From sabre at nondot.org Mon Jan 5 02:04:34 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 08:04:34 -0000 Subject: [llvm-commits] [llvm] r61679 - /llvm/trunk/lib/AsmParser/LLParser.cpp Message-ID: <200901050804.n0584YeM031172@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 02:04:33 2009 New Revision: 61679 URL: http://llvm.org/viewvc/llvm-project?rev=61679&view=rev Log: diagnose PR3281:crash02.ll with: llvm-as: crash02.ll:1:62: invalid function return type declare { <{ <{}>, void ([1898 x { void ()* }], opaque, ...) (), fp128 * }>, opaque } @t () ^ Modified: llvm/trunk/lib/AsmParser/LLParser.cpp Modified: llvm/trunk/lib/AsmParser/LLParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61679&r1=61678&r2=61679&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.cpp (original) +++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jan 5 02:04:33 2009 @@ -1136,6 +1136,9 @@ bool LLParser::ParseFunctionType(PATypeHolder &Result) { assert(Lex.getKind() == lltok::lparen); + if (!FunctionType::isValidReturnType(Result)) + return TokError("invalid function return type"); + std::vector ArgList; bool isVarArg; unsigned Attrs; From sabre at nondot.org Mon Jan 5 02:09:48 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 08:09:48 -0000 Subject: [llvm-commits] [llvm] r61680 - /llvm/trunk/lib/AsmParser/LLParser.cpp Message-ID: <200901050809.n0589mUu031366@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 02:09:48 2009 New Revision: 61680 URL: http://llvm.org/viewvc/llvm-project?rev=61680&view=rev Log: add checking intentionally elided for vfcmp/vicmp since they should really just be removed. However, this fixes PR3281:crash04.ll, diagnosing it with: lvm-as: crash04.ll:2:13: vfcmp requires vector floating point operands vfcmp uno double* undef, undef ^ Modified: llvm/trunk/lib/AsmParser/LLParser.cpp Modified: llvm/trunk/lib/AsmParser/LLParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61680&r1=61679&r2=61680&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.cpp (original) +++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jan 5 02:09:48 2009 @@ -2677,8 +2677,12 @@ return Error(Loc, "icmp requires integer operands"); Inst = new ICmpInst(CmpInst::Predicate(Pred), LHS, RHS); } else if (Opc == Instruction::VFCmp) { + if (!LHS->getType()->isFPOrFPVector() || !isa(LHS->getType())) + return Error(Loc, "vfcmp requires vector floating point operands"); Inst = new VFCmpInst(CmpInst::Predicate(Pred), LHS, RHS); } else if (Opc == Instruction::VICmp) { + if (!LHS->getType()->isIntOrIntVector() || !isa(LHS->getType())) + return Error(Loc, "vicmp requires vector floating point operands"); Inst = new VICmpInst(CmpInst::Predicate(Pred), LHS, RHS); } return false; From sabre at nondot.org Mon Jan 5 02:13:38 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 08:13:38 -0000 Subject: [llvm-commits] [llvm] r61681 - /llvm/trunk/lib/AsmParser/LLParser.cpp Message-ID: <200901050813.n058DcWM031473@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 02:13:38 2009 New Revision: 61681 URL: http://llvm.org/viewvc/llvm-project?rev=61681&view=rev Log: reject undef/zero labels. This fixes PR3281:crash0[56].ll with these diagnostics: llvm-as: crash05.ll:1:14: invalid type for null constant global label zeroinitializer addrspace (75), section "c" ^ llvm-as: crash06.ll:2:14: invalid type for null constant udiv label zeroinitializer, @0 ^ Modified: llvm/trunk/lib/AsmParser/LLParser.cpp Modified: llvm/trunk/lib/AsmParser/LLParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61681&r1=61680&r2=61681&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.cpp (original) +++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jan 5 02:13:38 2009 @@ -1906,6 +1906,9 @@ V = ConstantPointerNull::get(cast(Ty)); return false; case ValID::t_Undef: + // FIXME: LabelTy should not be a first-class type. + if (!Ty->isFirstClassType() || Ty == Type::LabelTy) + return Error(ID.Loc, "invalid type for undef constant"); V = UndefValue::get(Ty); return false; case ValID::t_EmptyArray: @@ -1914,7 +1917,8 @@ V = UndefValue::get(Ty); return false; case ValID::t_Zero: - if (!Ty->isFirstClassType()) + // FIXME: LabelTy should not be a first-class type. + if (!Ty->isFirstClassType() || Ty == Type::LabelTy) return Error(ID.Loc, "invalid type for null constant"); V = Constant::getNullValue(Ty); return false; From edwintorok at gmail.com Mon Jan 5 02:14:00 2009 From: edwintorok at gmail.com (=?ISO-8859-1?Q?T=F6r=F6k_Edwin?=) Date: Mon, 05 Jan 2009 10:14:00 +0200 Subject: [llvm-commits] [PATCH] Teach IRBuilder about simplifying BinOp(Value, Constant) In-Reply-To: <608B031F-57E5-4FF4-9CFC-A7A07F1D73C5@apple.com> References: <4957DC66.1010406@gmail.com> <518486B1-E8A2-47A7-938A-D5F7BDE60313@apple.com> <49590C30.2060900@gmail.com> <495A4772.3090109@gmail.com> <91BFA91F-0E58-4987-A0CD-2CFE1291C79A@apple.com> <495FD902.1090003@gmail.com> <58154023-DA2F-4FD6-A9E9-0A1BCC759865@apple.com> <49609594.1040405@gmail.com> <264FC7CF-5D46-4DA8-8CE3-007E4F6D6591@apple.com> <49612701.1020300@gmail.com> <608B031F-57E5-4FF4-9CFC-A7A07F1D73C5@apple.com> Message-ID: <4961C148.1020408@gmail.com> On 2009-01-05 02:41, Dan Gohman wrote: > On Jan 4, 2009, at 1:15 PM, T?r?k Edwin wrote: > > >> On 2009-01-04 21:35, Dan Gohman wrote: >> >>> On Jan 4, 2009, at 2:55 AM, T?r?k Edwin wrote: >>> >>> How about having it act as if reuseOps is false when InsertPt is not >>> equal to BB->end()? Would that still be permissive enough for your >>> needs? >>> >> Yes, that is OK. I added a private function getReuse() that will >> either >> return a BB (if reuseOps is true, and InsertPt == BB->end()), or 0 >> otherwise. >> > > Cool. This patch looks good to me. I just noticed a few comments that > are out of date with the code; the comment for SimplifyInstruction still > mentions that it might try to find an existing instruction, and the > comment in findBinOp still says "There should be less uses than > instructions in a BB ..." which is no longer relevant. > I updated the comments. > Thanks for your patience, and thanks for working on this! > Thanks to all who reviewed my patch! Can I commit the patch? Best regards, --Edwin -------------- next part -------------- A non-text attachment was scrubbed... Name: simplifier6.patch Type: text/x-diff Size: 27534 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090105/536410e0/attachment.bin -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: interdiff.txt Url: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090105/536410e0/attachment.txt From sabre at nondot.org Mon Jan 5 02:14:36 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 08:14:36 -0000 Subject: [llvm-commits] [llvm] r61682 - /llvm/trunk/test/Integer/alignment_bt.ll Message-ID: <200901050814.n058Ea8X031512@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 02:14:35 2009 New Revision: 61682 URL: http://llvm.org/viewvc/llvm-project?rev=61682&view=rev Log: alignment of 0 is not valid. Modified: llvm/trunk/test/Integer/alignment_bt.ll Modified: llvm/trunk/test/Integer/alignment_bt.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Integer/alignment_bt.ll?rev=61682&r1=61681&r2=61682&view=diff ============================================================================== --- llvm/trunk/test/Integer/alignment_bt.ll (original) +++ llvm/trunk/test/Integer/alignment_bt.ll Mon Jan 5 02:14:35 2009 @@ -7,14 +7,14 @@ define i19 *@test() align 32 { %X = alloca i19, align 4 %Y = alloca i51, i32 42, align 16 - %Z = alloca i32, align 0 + %Z = alloca i32, align 1 ret i19 *%X } define i19 *@test2() { %X = malloc i19, align 4 %Y = malloc i51, i32 42, align 16 - %Z = malloc i32, align 0 + %Z = malloc i32, align 1 ret i19 *%X } From sabre at nondot.org Mon Jan 5 02:18:44 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 08:18:44 -0000 Subject: [llvm-commits] [llvm] r61683 - in /llvm/trunk/lib/AsmParser: LLParser.cpp LLParser.h Message-ID: <200901050818.n058IiRD031635@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 02:18:44 2009 New Revision: 61683 URL: http://llvm.org/viewvc/llvm-project?rev=61683&view=rev Log: reject PR3281:crash07.ll with: llvm-as: crash07.ll:2:32: va_arg requires operand with first class type %y = va_arg [52 x <{}>] %43, double (...) sspreq ^ Modified: llvm/trunk/lib/AsmParser/LLParser.cpp llvm/trunk/lib/AsmParser/LLParser.h Modified: llvm/trunk/lib/AsmParser/LLParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61683&r1=61682&r2=61683&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.cpp (original) +++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jan 5 02:18:44 2009 @@ -2311,7 +2311,7 @@ case lltok::kw_ptrtoint: return ParseCast(Inst, PFS, Lex.getUIntVal()); // Other. case lltok::kw_select: return ParseSelect(Inst, PFS); - case lltok::kw_va_arg: return ParseVAArg(Inst, PFS); + case lltok::kw_va_arg: return ParseVA_Arg(Inst, PFS); case lltok::kw_extractelement: return ParseExtractElement(Inst, PFS); case lltok::kw_insertelement: return ParseInsertElement(Inst, PFS); case lltok::kw_shufflevector: return ParseShuffleVector(Inst, PFS); @@ -2735,15 +2735,19 @@ return false; } -/// ParseVAArg -/// ::= 'vaarg' TypeAndValue ',' Type -bool LLParser::ParseVAArg(Instruction *&Inst, PerFunctionState &PFS) { +/// ParseVA_Arg +/// ::= 'va_arg' TypeAndValue ',' Type +bool LLParser::ParseVA_Arg(Instruction *&Inst, PerFunctionState &PFS) { Value *Op; PATypeHolder EltTy(Type::VoidTy); + LocTy TypeLoc; if (ParseTypeAndValue(Op, PFS) || ParseToken(lltok::comma, "expected ',' after vaarg operand") || - ParseType(EltTy)) + ParseType(EltTy, TypeLoc)) return true; + + if (!EltTy->isFirstClassType()) + return Error(TypeLoc, "va_arg requires operand with first class type"); Inst = new VAArgInst(Op, EltTy); return false; Modified: llvm/trunk/lib/AsmParser/LLParser.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.h?rev=61683&r1=61682&r2=61683&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.h (original) +++ llvm/trunk/lib/AsmParser/LLParser.h Mon Jan 5 02:18:44 2009 @@ -252,7 +252,7 @@ bool ParseCompare(Instruction *&I, PerFunctionState &PFS, unsigned Opc); bool ParseCast(Instruction *&I, PerFunctionState &PFS, unsigned Opc); bool ParseSelect(Instruction *&I, PerFunctionState &PFS); - bool ParseVAArg(Instruction *&I, PerFunctionState &PFS); + bool ParseVA_Arg(Instruction *&I, PerFunctionState &PFS); bool ParseExtractElement(Instruction *&I, PerFunctionState &PFS); bool ParseInsertElement(Instruction *&I, PerFunctionState &PFS); bool ParseShuffleVector(Instruction *&I, PerFunctionState &PFS); From sabre at nondot.org Mon Jan 5 02:24:46 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 08:24:46 -0000 Subject: [llvm-commits] [llvm] r61684 - in /llvm/trunk/lib/AsmParser: LLParser.cpp LLParser.h Message-ID: <200901050824.n058Okou031832@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 02:24:46 2009 New Revision: 61684 URL: http://llvm.org/viewvc/llvm-project?rev=61684&view=rev Log: Fix PR3281:crash08.ll with this diagnostic: llvm-as: crash08.ll:3:15: invalid operand type for instruction "qp" = sdiv fp128 0x1, %30 ^ Modified: llvm/trunk/lib/AsmParser/LLParser.cpp llvm/trunk/lib/AsmParser/LLParser.h Modified: llvm/trunk/lib/AsmParser/LLParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61684&r1=61683&r2=61684&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.cpp (original) +++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jan 5 02:24:46 2009 @@ -2279,13 +2279,14 @@ // Binary Operators. case lltok::kw_add: case lltok::kw_sub: - case lltok::kw_mul: + case lltok::kw_mul: return ParseArithmetic(Inst, PFS, Lex.getUIntVal(), 0); + case lltok::kw_udiv: case lltok::kw_sdiv: - case lltok::kw_fdiv: case lltok::kw_urem: - case lltok::kw_srem: - case lltok::kw_frem: return ParseArithmetic(Inst, PFS, Lex.getUIntVal()); + case lltok::kw_srem: return ParseArithmetic(Inst, PFS, Lex.getUIntVal(), 1); + case lltok::kw_fdiv: + case lltok::kw_frem: return ParseArithmetic(Inst, PFS, Lex.getUIntVal(), 2); case lltok::kw_shl: case lltok::kw_lshr: case lltok::kw_ashr: @@ -2619,18 +2620,31 @@ //===----------------------------------------------------------------------===// /// ParseArithmetic -/// ::= ArithmeticOps TypeAndValue ',' Value { +/// ::= ArithmeticOps TypeAndValue ',' Value +/// +/// If OperandType is 0, then any FP or integer operand is allowed. If it is 1, +/// then any integer operand is allowed, if it is 2, any fp operand is allowed. bool LLParser::ParseArithmetic(Instruction *&Inst, PerFunctionState &PFS, - unsigned Opc) { + unsigned Opc, unsigned OperandType) { LocTy Loc; Value *LHS, *RHS; if (ParseTypeAndValue(LHS, Loc, PFS) || ParseToken(lltok::comma, "expected ',' in arithmetic operation") || ParseValue(LHS->getType(), RHS, PFS)) return true; - if (!isa(LHS->getType()) && !LHS->getType()->isFloatingPoint() && - !isa(LHS->getType())) - return Error(Loc, "instruction requires integer, fp, or vector operands"); + bool Valid; + switch (OperandType) { + default: assert(0 && "Unknown operand type!"); + case 0: // int or FP. + Valid = LHS->getType()->isIntOrIntVector() || + LHS->getType()->isFPOrFPVector(); + break; + case 1: Valid = LHS->getType()->isIntOrIntVector(); break; + case 2: Valid = LHS->getType()->isFPOrFPVector(); break; + } + + if (!Valid) + return Error(Loc, "invalid operand type for instruction"); Inst = BinaryOperator::Create((Instruction::BinaryOps)Opc, LHS, RHS); return false; Modified: llvm/trunk/lib/AsmParser/LLParser.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.h?rev=61684&r1=61683&r2=61684&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.h (original) +++ llvm/trunk/lib/AsmParser/LLParser.h Mon Jan 5 02:24:46 2009 @@ -247,7 +247,8 @@ bool ParseSwitch(Instruction *&Inst, PerFunctionState &PFS); bool ParseInvoke(Instruction *&Inst, PerFunctionState &PFS); - bool ParseArithmetic(Instruction *&I, PerFunctionState &PFS, unsigned Opc); + bool ParseArithmetic(Instruction *&I, PerFunctionState &PFS, unsigned Opc, + unsigned OperandType); bool ParseLogical(Instruction *&I, PerFunctionState &PFS, unsigned Opc); bool ParseCompare(Instruction *&I, PerFunctionState &PFS, unsigned Opc); bool ParseCast(Instruction *&I, PerFunctionState &PFS, unsigned Opc); From sabre at nondot.org Mon Jan 5 02:26:05 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 08:26:05 -0000 Subject: [llvm-commits] [llvm] r61685 - /llvm/trunk/lib/AsmParser/LLParser.cpp Message-ID: <200901050826.n058Q6Wd031883@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 02:26:05 2009 New Revision: 61685 URL: http://llvm.org/viewvc/llvm-project?rev=61685&view=rev Log: produce the same diagnostics for vicmp constant exprs as vicmp instructions. Modified: llvm/trunk/lib/AsmParser/LLParser.cpp Modified: llvm/trunk/lib/AsmParser/LLParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61685&r1=61684&r2=61685&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.cpp (original) +++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jan 5 02:26:05 2009 @@ -1728,9 +1728,15 @@ ID.ConstantVal = ConstantExpr::getICmp(Pred, Val0, Val1); } else if (Opc == Instruction::VFCmp) { // FIXME: REMOVE VFCMP Support + if (!Val0->getType()->isFPOrFPVector() || + !isa(Val0->getType())) + return Error(ID.Loc, "vfcmp requires vector floating point operands"); ID.ConstantVal = ConstantExpr::getVFCmp(Pred, Val0, Val1); } else if (Opc == Instruction::VICmp) { - // FIXME: REMOVE VFCMP Support + // FIXME: REMOVE VICMP Support + if (!Val0->getType()->isIntOrIntVector() || + !isa(Val0->getType())) + return Error(ID.Loc, "vicmp requires vector floating point operands"); ID.ConstantVal = ConstantExpr::getVICmp(Pred, Val0, Val1); } ID.Kind = ValID::t_Constant; From Axel.Naumann at cern.ch Mon Jan 5 02:32:44 2009 From: Axel.Naumann at cern.ch (Axel Naumann) Date: Mon, 5 Jan 2009 09:32:44 +0100 Subject: [llvm-commits] [PATCH] llvm-ld EmitShellScript and -L In-Reply-To: <399F6527-D045-4257-BEB7-4A599A12943A@apple.com> References: <49491B52.40606@cern.ch> <399F6527-D045-4257-BEB7-4A599A12943A@apple.com> Message-ID: <4961C5AC.5060206@cern.ch> Hi Chris, On 2009-01-04 21:21, Chris Lattner wrote: > On Dec 17, 2008, at 7:31 AM, Axel Naumann wrote: >> I wanted to load /usr/lib64/libreadline.so into lli (aka "link against >> it" in >> llvm-ld). Impossible with llvm-ld, because it uses >> sys::Path::FindLibrary() >> which only checks the system lib paths, so it always picked up >> /usr/lib/libreadline.so. Even copying it into ./mylib, and specifying >> -L mylib >> doesn't work - again because sys::Path::FindLibrary() doesn't know about >> directories specified by -L. >> >> Attached patch lets EmitShellScript iterate over LibPaths before asking >> sys::Path::FindLibrary(), which fixes both of these issues for me: I can >> specify shlib directories for lli with -L, and I can override libs >> found in the >> system paths. >> >> My first patch to LLVM so don't be too brutal, please ;-) > I don't personally use llvm-ld, so I don't have a strong opinion about > the patch. However, please send it as an out-of-line attachment. > Without that, it is very difficult to apply, thanks! Weird - my Sent folder shows it as outlined. Here's a gz of the diff; thunderbird: inline _that_! Thanks for considering the patch! Cheers, Axel. -------------- next part -------------- A non-text attachment was scrubbed... Name: llvm-ld_EmitShellScript_libpath.diff.gz Type: application/x-gzip Size: 690 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090105/cc25d57b/attachment.gz From evan.cheng at apple.com Mon Jan 5 02:45:04 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Mon, 05 Jan 2009 08:45:04 -0000 Subject: [llvm-commits] [llvm] r61686 - /llvm/trunk/lib/Target/X86/X86Subtarget.cpp Message-ID: <200901050845.n058j4BJ002636@zion.cs.uiuc.edu> Author: evancheng Date: Mon Jan 5 02:45:01 2009 New Revision: 61686 URL: http://llvm.org/viewvc/llvm-project?rev=61686&view=rev Log: Atom and Core i7 do not have same model number after all. Modified: llvm/trunk/lib/Target/X86/X86Subtarget.cpp Modified: llvm/trunk/lib/Target/X86/X86Subtarget.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.cpp?rev=61686&r1=61685&r2=61686&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86Subtarget.cpp (original) +++ llvm/trunk/lib/Target/X86/X86Subtarget.cpp Mon Jan 5 02:45:01 2009 @@ -204,7 +204,6 @@ unsigned Family = 0; unsigned Model = 0; DetectFamilyModel(EAX, Family, Model); - bool HasSSE42 = (ECX >> 19) & 0x1; X86::GetCpuIDAndInfo(0x80000001, &EAX, &EBX, &ECX, &EDX); bool Em64T = (EDX >> 29) & 0x1; @@ -252,10 +251,10 @@ case 4: case 6: // same as 4, but 65nm return (Em64T) ? "nocona" : "prescott"; + case 26: + return "corei7"; case 28: - // Intel Atom, and Core i7 both have this model. - // Atom has SSSE3, Core i7 has SSE4.2 - return (HasSSE42) ? "corei7" : "atom"; + return "atom"; default: return (Em64T) ? "x86-64" : "pentium4"; } From evan.cheng at apple.com Mon Jan 5 02:53:12 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Mon, 05 Jan 2009 08:53:12 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r61687 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Message-ID: <200901050853.n058rCxV005873@zion.cs.uiuc.edu> Author: evancheng Date: Mon Jan 5 02:53:12 2009 New Revision: 61687 URL: http://llvm.org/viewvc/llvm-project?rev=61687&view=rev Log: Extended holiday => inverted logic. This fixes pr3279. 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=61687&r1=61686&r2=61687&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Mon Jan 5 02:53:12 2009 @@ -4203,7 +4203,7 @@ // is big endian. if (ISDIGIT(Constraint[0])) { unsigned Match = atoi(Constraint); - const Type *OTy = (Match > CallResultTypes.size()) + const Type *OTy = (Match < CallResultTypes.size()) ? CallResultTypes[Match] : 0; if (OTy && OTy != OpTy) { if (!(isa(OTy) || isa(OTy)) || From edwintorok at gmail.com Mon Jan 5 03:25:07 2009 From: edwintorok at gmail.com (=?ISO-8859-1?Q?T=F6r=F6k_Edwin?=) Date: Mon, 05 Jan 2009 11:25:07 +0200 Subject: [llvm-commits] [PATCH] Teach IRBuilder about simplifying BinOp(Value, Constant) In-Reply-To: <4961C148.1020408@gmail.com> References: <4957DC66.1010406@gmail.com> <518486B1-E8A2-47A7-938A-D5F7BDE60313@apple.com> <49590C30.2060900@gmail.com> <495A4772.3090109@gmail.com> <91BFA91F-0E58-4987-A0CD-2CFE1291C79A@apple.com> <495FD902.1090003@gmail.com> <58154023-DA2F-4FD6-A9E9-0A1BCC759865@apple.com> <49609594.1040405@gmail.com> <264FC7CF-5D46-4DA8-8CE3-007E4F6D6591@apple.com> <49612701.1020300@gmail.com> <608B031F-57E5-4FF4-9CFC-A7A07F1D73C5@apple.com> <4961C148.1020408@gmail.com> Message-ID: <4961D1F3.7080009@gmail.com> On 2009-01-05 10:14, T?r?k Edwin wrote: > On 2009-01-05 02:41, Dan Gohman wrote: > >> On Jan 4, 2009, at 1:15 PM, T?r?k Edwin wrote: >> >> >> >>> On 2009-01-04 21:35, Dan Gohman wrote: >>> >>> >>>> On Jan 4, 2009, at 2:55 AM, T?r?k Edwin wrote: >>>> >>>> How about having it act as if reuseOps is false when InsertPt is not >>>> equal to BB->end()? Would that still be permissive enough for your >>>> needs? >>>> >>>> >>> Yes, that is OK. I added a private function getReuse() that will >>> either >>> return a BB (if reuseOps is true, and InsertPt == BB->end()), or 0 >>> otherwise. >>> >>> >> Cool. This patch looks good to me. I just noticed a few comments that >> are out of date with the code; the comment for SimplifyInstruction still >> mentions that it might try to find an existing instruction, and the >> comment in findBinOp still says "There should be less uses than >> instructions in a BB ..." which is no longer relevant. >> >> > > I updated the comments. > > >> Thanks for your patience, and thanks for working on this! >> >> > > Thanks to all who reviewed my patch! > > Can I commit the patch? > I added back the Constant* functions in ConstantFolder/TargetFolder, since llvm-gcc is using them (called with constant* params, expecting constant* return). Best regards, --Edwin -------------- next part -------------- A non-text attachment was scrubbed... Name: simplifier7.patch Type: text/x-diff Size: 23867 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090105/24b60fec/attachment.bin -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: interdiff.txt Url: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090105/24b60fec/attachment.txt From edwintorok at gmail.com Mon Jan 5 03:30:48 2009 From: edwintorok at gmail.com (Torok Edwin) Date: Mon, 05 Jan 2009 09:30:48 -0000 Subject: [llvm-commits] [llvm] r61688 - /llvm/trunk/test/DebugInfo/printdbginfo.ll Message-ID: <200901050930.n059UmmJ011617@zion.cs.uiuc.edu> Author: edwin Date: Mon Jan 5 03:30:47 2009 New Revision: 61688 URL: http://llvm.org/viewvc/llvm-project?rev=61688&view=rev Log: This test passes again, unXFAIL. Modified: llvm/trunk/test/DebugInfo/printdbginfo.ll Modified: llvm/trunk/test/DebugInfo/printdbginfo.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/printdbginfo.ll?rev=61688&r1=61687&r2=61688&view=diff ============================================================================== --- llvm/trunk/test/DebugInfo/printdbginfo.ll (original) +++ llvm/trunk/test/DebugInfo/printdbginfo.ll Mon Jan 5 03:30:47 2009 @@ -2,7 +2,6 @@ ; RUN: %prcontext {function name: Bar::bar return type: int at line 12} 1 < %t1 | grep {(tst.cpp:14)} ; RUN: %prcontext {%%tmp1} 1 < %t1 | grep -E {variable tmp.+at line 23} ; RUN: %prcontext {; tst.cpp:24} 2 < %t1 | grep {%%6} -; XFAIL: alpha|ia64|arm|linux %llvm.dbg.anchor.type = type { i32, i32 } %llvm.dbg.basictype.type = type { i32, { }*, i8*, { }*, i32, i64, i64, i64, i32, i32 } %llvm.dbg.compile_unit.type = type { i32, { }*, i32, i8*, i8*, i8* } From baldrick at free.fr Mon Jan 5 04:08:06 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 5 Jan 2009 11:08:06 +0100 Subject: [llvm-commits] [PATCH] Teach IRBuilder about simplifying BinOp(Value, Constant) In-Reply-To: <4961D1F3.7080009@gmail.com> References: <4957DC66.1010406@gmail.com> <4961C148.1020408@gmail.com> <4961D1F3.7080009@gmail.com> Message-ID: <200901051108.06703.baldrick@free.fr> Hi Edwin, > I added back the Constant* functions in ConstantFolder/TargetFolder, > since llvm-gcc is using them (called with constant* params, expecting > constant* return). I haven't been following the discussion, so I'm not entirely sure what you are referring to here, but perhaps you mean that llvm-gcc uses the folder directly and not just via the builder? Ciao, Duncan. From edwintorok at gmail.com Mon Jan 5 04:33:01 2009 From: edwintorok at gmail.com (=?ISO-8859-6?Q?To=22ro=22k_Edwin?=) Date: Mon, 05 Jan 2009 12:33:01 +0200 Subject: [llvm-commits] [PATCH] Teach IRBuilder about simplifying BinOp(Value, Constant) In-Reply-To: <200901051108.06703.baldrick@free.fr> References: <4957DC66.1010406@gmail.com> <4961C148.1020408@gmail.com> <4961D1F3.7080009@gmail.com> <200901051108.06703.baldrick@free.fr> Message-ID: <4961E1DD.1020201@gmail.com> On 2009-01-05 12:08, Duncan Sands wrote: > Hi Edwin, > > >> I added back the Constant* functions in ConstantFolder/TargetFolder, >> since llvm-gcc is using them (called with constant* params, expecting >> constant* return). >> > > I haven't been following the discussion, so I'm not entirely sure what > you are referring to here, but perhaps you mean that llvm-gcc uses the > folder directly and not just via the builder? Yes, llvm-gcc uses TargetFolder directly, so I can't remove methods from there. Best regards, --Edwin From baldrick at free.fr Mon Jan 5 04:34:57 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 5 Jan 2009 11:34:57 +0100 Subject: [llvm-commits] [llvm] r61645 - in /llvm/trunk: include/llvm/Module.h lib/VMCore/Module.cpp In-Reply-To: <200901042254.n04MseJj013617@zion.cs.uiuc.edu> References: <200901042254.n04MseJj013617@zion.cs.uiuc.edu> Message-ID: <200901051134.58782.baldrick@free.fr> Hi Nick, > + if (!New->isIntrinsic()) // Intrinsics get attrs set on construction > + New->setAttributes(AttributeList); how about asserting that the AttributeList is 0 if New is an intrinsic. Ciao, Duncan. From baldrick at free.fr Mon Jan 5 04:52:49 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 05 Jan 2009 10:52:49 -0000 Subject: [llvm-commits] [llvm] r61690 - /llvm/trunk/test/Assembler/2005-05-05-OpaqueUndefValues.ll Message-ID: <200901051052.n05AqrxB014667@zion.cs.uiuc.edu> Author: baldrick Date: Mon Jan 5 04:52:29 2009 New Revision: 61690 URL: http://llvm.org/viewvc/llvm-project?rev=61690&view=rev Log: Don't spew bitcode to standard out if this test fails, like it is right now. Modified: llvm/trunk/test/Assembler/2005-05-05-OpaqueUndefValues.ll Modified: llvm/trunk/test/Assembler/2005-05-05-OpaqueUndefValues.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/2005-05-05-OpaqueUndefValues.ll?rev=61690&r1=61689&r2=61690&view=diff ============================================================================== --- llvm/trunk/test/Assembler/2005-05-05-OpaqueUndefValues.ll (original) +++ llvm/trunk/test/Assembler/2005-05-05-OpaqueUndefValues.ll Mon Jan 5 04:52:29 2009 @@ -1,4 +1,4 @@ -; RUN: llvm-as < %s | llvm-dis | llvm-as +; RUN: llvm-as < %s | llvm-dis | llvm-as > /dev/null %t = type opaque @x = global %t undef From gordonhenriksen at me.com Mon Jan 5 08:31:19 2009 From: gordonhenriksen at me.com (Gordon Henriksen) Date: Mon, 05 Jan 2009 09:31:19 -0500 Subject: [llvm-commits] [PATCH] llvm-ld EmitShellScript and -L In-Reply-To: <4961C5AC.5060206@cern.ch> References: <49491B52.40606@cern.ch> <399F6527-D045-4257-BEB7-4A599A12943A@apple.com> <4961C5AC.5060206@cern.ch> Message-ID: <9F36E195-4F18-4AE4-9240-FC40536A91EA@me.com> On 2009-01-05, at 03:32, Axel Naumann wrote: > On 2009-01-04 21:21, Chris Lattner wrote: > >> However, please send it as an out-of-line attachment. Without that, >> it is very difficult to apply, thanks! > > Weird - my Sent folder shows it as outlined. Here's the problem and the solution: http://lists.cs.uiuc.edu/pipermail/llvmdev/2008-January/011992.html ? Gordon From ggreif at gmail.com Mon Jan 5 10:05:36 2009 From: ggreif at gmail.com (Gabor Greif) Date: Mon, 05 Jan 2009 16:05:36 -0000 Subject: [llvm-commits] [llvm] r61694 - in /llvm/trunk: docs/ProgrammersManual.html include/llvm/Use.h lib/VMCore/Use.cpp Message-ID: <200901051605.n05G5bKd025500@zion.cs.uiuc.edu> Author: ggreif Date: Mon Jan 5 10:05:32 2009 New Revision: 61694 URL: http://llvm.org/viewvc/llvm-project?rev=61694&view=rev Log: Get rid of the tagging functions and use PointerIntPair. This means that we have to include an additional header. This patch should be functionally equivalent. I cannot outrule any performance degradation, though I do not expect any. Modified: llvm/trunk/docs/ProgrammersManual.html llvm/trunk/include/llvm/Use.h llvm/trunk/lib/VMCore/Use.cpp Modified: llvm/trunk/docs/ProgrammersManual.html URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/ProgrammersManual.html?rev=61694&r1=61693&r2=61694&view=diff ============================================================================== --- llvm/trunk/docs/ProgrammersManual.html (original) +++ llvm/trunk/docs/ProgrammersManual.html Mon Jan 5 10:05:32 2009 @@ -2234,7 +2234,7 @@

The -User class provides a base for expressing the ownership of User +User class provides a basis for expressing the ownership of User towards other Values. The Use helper class is employed to do the bookkeeping and to facilitate O(1) @@ -2242,7 +2242,7 @@

@@ -2303,7 +2303,7 @@
@@ -2344,7 +2344,7 @@
@@ -2434,7 +2434,7 @@

@@ -2446,7 +2446,8 @@ For layout b) instead of the User we find a pointer (User* with LSBit set). Following this pointer brings us to the User. A portable trick ensures that the first bytes of User (if interpreted as a pointer) never has -the LSBit set.

+the LSBit set. (Portability is relying on the fact that all known compilers place the +vptr in the first word of the instances.)

@@ -2491,7 +2492,7 @@
@@ -2513,7 +2514,7 @@
Modified: llvm/trunk/include/llvm/Use.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Use.h?rev=61694&r1=61693&r2=61694&view=diff ============================================================================== --- llvm/trunk/include/llvm/Use.h (original) +++ llvm/trunk/include/llvm/Use.h Mon Jan 5 10:05:32 2009 @@ -18,6 +18,7 @@ #include "llvm/Support/Casting.h" #include "llvm/ADT/iterator.h" +#include "llvm/ADT/PointerIntPair.h" namespace llvm { @@ -25,46 +26,9 @@ class User; -//===----------------------------------------------------------------------===// -// Generic Tagging Functions -//===----------------------------------------------------------------------===// - -// We adhere to the following convention: The type of a tagged pointer -// to T is T volatile*. This means that functions that superpose a tag -// on a pointer will be supplied a T* (or T const*) and will return a -// tagged one: T volatile*. Untagging functions do it the other way -// 'round. While this scheme does not prevent dereferencing of tagged -// pointers, proper type annotations do catch most inappropriate uses. - /// Tag - generic tag type for (at least 32 bit) pointers enum Tag { noTag, tagOne, tagTwo, tagThree }; -/// addTag - insert tag bits into an (untagged) pointer -template -inline volatile T *addTag(const T *P, TAG Tag) { - return reinterpret_cast(ptrdiff_t(P) | Tag); -} - -/// stripTag - remove tag bits from a pointer, -/// making it dereferencable -template -inline T *stripTag(const volatile T *P) { - return reinterpret_cast(ptrdiff_t(P) & ~MASK); -} - -/// extractTag - extract tag bits from a pointer -template -inline TAG extractTag(const volatile T *P) { - return TAG(ptrdiff_t(P) & MASK); -} - -/// transferTag - transfer tag bits from a pointer, -/// to an untagged pointer -template -inline volatile T *transferTag(const volatile T *From, const T *To) { - return reinterpret_cast((ptrdiff_t(From) & MASK) | ptrdiff_t(To)); -} - //===----------------------------------------------------------------------===// // Use Class @@ -133,10 +97,11 @@ static Use *initTags(Use *Start, Use *Stop, ptrdiff_t Done = 0); Value *Val; - Use *Next, *volatile*Prev; + Use *Next; + PointerIntPair Prev; void setPrev(Use **NewPrev) { - Prev = transferTag(Prev, NewPrev); + Prev.setPointer(NewPrev); } void addToList(Use **List) { Next = *List; @@ -145,7 +110,7 @@ *List = this; } void removeFromList() { - Use **StrippedPrev = stripTag(Prev); + Use **StrippedPrev = Prev.getPointer(); *StrippedPrev = Next; if (Next) Next->setPrev(StrippedPrev); } Modified: llvm/trunk/lib/VMCore/Use.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Use.cpp?rev=61694&r1=61693&r2=61694&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Use.cpp (original) +++ llvm/trunk/lib/VMCore/Use.cpp Mon Jan 5 10:05:32 2009 @@ -52,7 +52,7 @@ const Use *Current = this; while (true) { - unsigned Tag = extractTag((Current++)->Prev); + unsigned Tag = (Current++)->Prev.getInt(); switch (Tag) { case zeroDigitTag: case oneDigitTag: @@ -62,7 +62,7 @@ ++Current; ptrdiff_t Offset = 1; while (true) { - unsigned Tag = extractTag(Current->Prev); + unsigned Tag = Current->Prev.getInt(); switch (Tag) { case zeroDigitTag: case oneDigitTag: @@ -91,11 +91,11 @@ --Stop; Stop->Val = 0; if (!Count) { - Stop->Prev = reinterpret_cast(Done == 0 ? fullStopTag : stopTag); + Stop->Prev.setFromOpaqueValue(reinterpret_cast(Done == 0 ? fullStopTag : stopTag)); ++Done; Count = Done; } else { - Stop->Prev = reinterpret_cast(Count & 1); + Stop->Prev.setFromOpaqueValue(reinterpret_cast(Count & 1)); Count >>= 1; ++Done; } @@ -127,7 +127,7 @@ //===----------------------------------------------------------------------===// struct AugmentedUse : Use { - volatile User *ref; + PointerIntPair ref; AugmentedUse(); // not implemented }; @@ -138,10 +138,11 @@ User *Use::getUser() const { const Use *End = getImpliedUser(); - volatile User *She = static_cast(End - 1)->ref; - return extractTag(She) - ? llvm::stripTag(She) - : reinterpret_cast(const_cast(End)); + PointerIntPair& ref(static_cast(End - 1)->ref); + User *She = ref.getPointer(); + return ref.getInt() + ? She + : (User*)End; } //===----------------------------------------------------------------------===// @@ -153,7 +154,9 @@ + sizeof(AugmentedUse) - sizeof(Use))); Use *End = Begin + N; - static_cast(End[-1]).ref = addTag(this, tagOne); + PointerIntPair& ref(static_cast(End[-1]).ref); + ref.setPointer(const_cast(this)); + ref.setInt(tagOne); return Use::initTags(Begin, End); } From criswell at cs.uiuc.edu Mon Jan 5 10:06:55 2009 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon, 5 Jan 2009 10:06:55 -0600 Subject: [llvm-commits] [llvm] r61540 - in /llvm/trunk/utils/unittest/googletest: Makefile README.LLVM gtest-all.cc gtest-death-test.cc gtest-internal-inl.h gtest-test-part.cc gtest.cc gtest_main.cc include/gtest/internal/gtest-internal-inl.h In-Reply-To: <200901010205.n0125isk030712@zion.cs.uiuc.edu> References: <200901010205.n0125isk030712@zion.cs.uiuc.edu> Message-ID: <4962301F.2010600@cs.uiuc.edu> Dear Misha, 1) Can you move the copyright/license information to a LICENSE.TXT file and add an entry in llvm/LICENSE.TXT? This is the established convention for third party licenses and makes it easier to find what code has additional licenses. 2) The code doesn't compile on my Linux machine. I get the following errors with g++ 4.1.2.: /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-port.h:327:21: warning: tr1/tuple: No such file or directory /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-param-util-generated.h:2670: error: ?tr1? is not a member of ?std? /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-param-util-generated.h:2670: error: ?tr1? is not a member of ?std? /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-param-util-generated.h:2670: error: template argument 1 is invalid Do you know what the problem might be? -- John T. Misha Brukman wrote: > Author: brukman > Date: Wed Dec 31 20:05:43 2008 > New Revision: 61540 > > URL: http://llvm.org/viewvc/llvm-project?rev=61540&view=rev > Log: > * Removed gtest-all.cc; .cc files including other .cc files is weird > * Removed gtest_main.cc: we have our own main() elsewhere > * Simplified the Makefile as we don't need SOURCES > > * Moved the internal header to gtest/internal/ > * Simplified the Makefile to remove -I param to CPP.Flags > > * Updated README.LLVM with all the steps I took to massage GTest to > work in LLVM so far > > Added: > llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-internal-inl.h > Removed: > llvm/trunk/utils/unittest/googletest/gtest-all.cc > llvm/trunk/utils/unittest/googletest/gtest-internal-inl.h > llvm/trunk/utils/unittest/googletest/gtest_main.cc > Modified: > llvm/trunk/utils/unittest/googletest/Makefile > llvm/trunk/utils/unittest/googletest/README.LLVM > llvm/trunk/utils/unittest/googletest/gtest-death-test.cc > llvm/trunk/utils/unittest/googletest/gtest-test-part.cc > llvm/trunk/utils/unittest/googletest/gtest.cc > > Modified: llvm/trunk/utils/unittest/googletest/Makefile > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/unittest/googletest/Makefile?rev=61540&r1=61539&r2=61540&view=diff > > From ggreif at gmail.com Mon Jan 5 10:28:15 2009 From: ggreif at gmail.com (Gabor Greif) Date: Mon, 05 Jan 2009 16:28:15 -0000 Subject: [llvm-commits] [llvm] r61695 - in /llvm/trunk: include/llvm/Use.h lib/VMCore/Use.cpp Message-ID: <200901051628.n05GSFNk026333@zion.cs.uiuc.edu> Author: ggreif Date: Mon Jan 5 10:28:14 2009 New Revision: 61695 URL: http://llvm.org/viewvc/llvm-project?rev=61695&view=rev Log: eliminate tabs from my previous commit Modified: llvm/trunk/include/llvm/Use.h llvm/trunk/lib/VMCore/Use.cpp Modified: llvm/trunk/include/llvm/Use.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Use.h?rev=61695&r1=61694&r2=61695&view=diff ============================================================================== --- llvm/trunk/include/llvm/Use.h (original) +++ llvm/trunk/include/llvm/Use.h Mon Jan 5 10:28:14 2009 @@ -98,7 +98,7 @@ Value *Val; Use *Next; - PointerIntPair Prev; + PointerIntPair Prev; void setPrev(Use **NewPrev) { Prev.setPointer(NewPrev); Modified: llvm/trunk/lib/VMCore/Use.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Use.cpp?rev=61695&r1=61694&r2=61695&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Use.cpp (original) +++ llvm/trunk/lib/VMCore/Use.cpp Mon Jan 5 10:28:14 2009 @@ -138,11 +138,11 @@ User *Use::getUser() const { const Use *End = getImpliedUser(); - PointerIntPair& ref(static_cast(End - 1)->ref); + PointerIntPair& ref(static_cast(End - 1)->ref); User *She = ref.getPointer(); return ref.getInt() - ? She - : (User*)End; + ? She + : (User*)End; } //===----------------------------------------------------------------------===// @@ -154,7 +154,7 @@ + sizeof(AugmentedUse) - sizeof(Use))); Use *End = Begin + N; - PointerIntPair& ref(static_cast(End[-1]).ref); + PointerIntPair& ref(static_cast(End[-1]).ref); ref.setPointer(const_cast(this)); ref.setInt(tagOne); return Use::initTags(Begin, End); From evan.cheng at apple.com Mon Jan 5 11:17:04 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Mon, 05 Jan 2009 17:17:04 -0000 Subject: [llvm-commits] [llvm] r61699 - /llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp Message-ID: <200901051717.n05HH4Rf028664@zion.cs.uiuc.edu> Author: evancheng Date: Mon Jan 5 11:17:04 2009 New Revision: 61699 URL: http://llvm.org/viewvc/llvm-project?rev=61699&view=rev Log: Fix misplaced right parentheses. Modified: llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp Modified: llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp?rev=61699&r1=61698&r2=61699&view=diff ============================================================================== --- llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp (original) +++ llvm/trunk/lib/ExecutionEngine/JIT/Intercept.cpp Mon Jan 5 11:17:04 2009 @@ -123,9 +123,9 @@ // First try turning $LDBLStub into $LDBL128. If that fails, strip it off. // This mirrors logic in libSystemStubs.a. std::string Prefix = std::string(Name.begin(), Name.end()-9); - if (void *Ptr = getPointerToNamedFunction(Prefix+"$LDBL128"), false) + if (void *Ptr = getPointerToNamedFunction(Prefix+"$LDBL128", false)) return Ptr; - if (void *Ptr = getPointerToNamedFunction(Prefix), false) + if (void *Ptr = getPointerToNamedFunction(Prefix, false)) return Ptr; } #endif From ggreif at gmail.com Mon Jan 5 11:19:25 2009 From: ggreif at gmail.com (Gabor Greif) Date: Mon, 05 Jan 2009 17:19:25 -0000 Subject: [llvm-commits] [llvm] r61701 - /llvm/trunk/lib/VMCore/Use.cpp Message-ID: <200901051719.n05HJPnm028815@zion.cs.uiuc.edu> Author: ggreif Date: Mon Jan 5 11:19:25 2009 New Revision: 61701 URL: http://llvm.org/viewvc/llvm-project?rev=61701&view=rev Log: another fix to my previous commit: * some picky compilers get insulted by const-incorrectness * respect 80-char limit Modified: llvm/trunk/lib/VMCore/Use.cpp Modified: llvm/trunk/lib/VMCore/Use.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Use.cpp?rev=61701&r1=61700&r2=61701&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Use.cpp (original) +++ llvm/trunk/lib/VMCore/Use.cpp Mon Jan 5 11:19:25 2009 @@ -91,7 +91,9 @@ --Stop; Stop->Val = 0; if (!Count) { - Stop->Prev.setFromOpaqueValue(reinterpret_cast(Done == 0 ? fullStopTag : stopTag)); + Stop->Prev.setFromOpaqueValue(reinterpret_cast(Done == 0 + ? fullStopTag + : stopTag)); ++Done; Count = Done; } else { @@ -138,7 +140,8 @@ User *Use::getUser() const { const Use *End = getImpliedUser(); - PointerIntPair& ref(static_cast(End - 1)->ref); + const PointerIntPair& ref( + static_cast(End - 1)->ref); User *She = ref.getPointer(); return ref.getInt() ? She From bob.wilson at apple.com Mon Jan 5 11:23:09 2009 From: bob.wilson at apple.com (Bob Wilson) Date: Mon, 05 Jan 2009 17:23:09 -0000 Subject: [llvm-commits] [llvm] r61702 - in /llvm/trunk/utils/TableGen: CodeGenDAGPatterns.cpp CodeGenDAGPatterns.h Message-ID: <200901051723.n05HN9n1028975@zion.cs.uiuc.edu> Author: bwilson Date: Mon Jan 5 11:23:09 2009 New Revision: 61702 URL: http://llvm.org/viewvc/llvm-project?rev=61702&view=rev Log: Fix spelling in some comments. Modified: llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h Modified: llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp?rev=61702&r1=61701&r2=61702&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp (original) +++ llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp Mon Jan 5 11:23:09 2009 @@ -807,7 +807,7 @@ } -/// ApplyTypeConstraints - Apply all of the type constraints relevent to +/// ApplyTypeConstraints - Apply all of the type constraints relevant to /// this node and its children in the tree. This returns true if it makes a /// change, false otherwise. If a type contradiction is found, throw an /// exception. Modified: llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h?rev=61702&r1=61701&r2=61702&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h (original) +++ llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h Mon Jan 5 11:23:09 2009 @@ -265,7 +265,7 @@ /// PatFrag references. TreePatternNode *InlinePatternFragments(TreePattern &TP); - /// ApplyTypeConstraints - Apply all of the type constraints relevent to + /// ApplyTypeConstraints - Apply all of the type constraints relevant to /// this node and its children in the tree. This returns true if it makes a /// change, false otherwise. If a type contradiction is found, throw an /// exception. From ggreif at gmail.com Mon Jan 5 11:27:39 2009 From: ggreif at gmail.com (Gabor Greif) Date: Mon, 05 Jan 2009 17:27:39 -0000 Subject: [llvm-commits] [llvm] r61703 - /llvm/trunk/utils/unittest/googletest/ Message-ID: <200901051727.n05HRdM9029117@zion.cs.uiuc.edu> Author: ggreif Date: Mon Jan 5 11:27:39 2009 New Revision: 61703 URL: http://llvm.org/viewvc/llvm-project?rev=61703&view=rev Log: set standard ignores Modified: llvm/trunk/utils/unittest/googletest/ (props changed) Propchange: llvm/trunk/utils/unittest/googletest/ ------------------------------------------------------------------------------ --- svn:ignore (added) +++ svn:ignore Mon Jan 5 11:27:39 2009 @@ -0,0 +1,3 @@ +Debug +Release +Release-Asserts From gohman at apple.com Mon Jan 5 11:29:42 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 05 Jan 2009 17:29:42 -0000 Subject: [llvm-commits] [llvm] r61706 - /llvm/trunk/utils/llvm.grm Message-ID: <200901051729.n05HThIx029208@zion.cs.uiuc.edu> Author: djg Date: Mon Jan 5 11:29:42 2009 New Revision: 61706 URL: http://llvm.org/viewvc/llvm-project?rev=61706&view=rev Log: A few more polygen grammar updates. - After GlobalAssign, emit addrspace before global/constant, to follow the new syntax. - Eliminate "type void", which is now invalid. - Fix invalid liblists like [, "foo"]. - Tweak whitespace in a few places. Modified: llvm/trunk/utils/llvm.grm Modified: llvm/trunk/utils/llvm.grm URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/llvm.grm?rev=61706&r1=61705&r2=61706&view=diff ============================================================================== --- llvm/trunk/utils/llvm.grm (original) +++ llvm/trunk/utils/llvm.grm Mon Jan 5 11:29:42 2009 @@ -69,7 +69,7 @@ LocalName ::= LOCALVAR | STRINGCONSTANT | PCTSTRINGCONSTANT ; OptLocalName ::= LocalName | _ ; -OptAddrSpace ::= - addrspace "(" ^ EUINT64VAL ^ ")" | _ ; +OptAddrSpace ::= - addrspace ^ "(" ^ EUINT64VAL ^ ")" | _ ; OptLocalAssign ::= LocalName "=" | _ ; @@ -261,13 +261,12 @@ | declare FunctionProto | - module asm AsmBlock | OptLocalAssign type Types - | OptLocalAssign type void - | OptGlobalAssign GVVisibilityStyle ThreadLocal GlobalType ConstVal - OptAddrSpace GlobalVarAttributes - | OptGlobalAssign GVInternalLinkage GVVisibilityStyle ThreadLocal GlobalType - ConstVal OptAddrSpace GlobalVarAttributes - | OptGlobalAssign GVExternalLinkage GVVisibilityStyle ThreadLocal GlobalType - Types OptAddrSpace GlobalVarAttributes + | OptGlobalAssign GVVisibilityStyle ThreadLocal OptAddrSpace OptAddrSpace + ConstVal GlobalVarAttributes + | OptGlobalAssign GVInternalLinkage GVVisibilityStyle ThreadLocal OptAddrSpace + GlobalType ConstVal GlobalVarAttributes + | OptGlobalAssign GVExternalLinkage GVVisibilityStyle ThreadLocal OptAddrSpace + GlobalType Types GlobalVarAttributes | OptGlobalAssign GVVisibilityStyle alias AliasLinkage AliaseeRef | target TargetDefinition | deplibs "=" LibrariesDefinition @@ -278,9 +277,9 @@ TargetDefinition ::= triple "=" STRINGCONSTANT | datalayout "=" STRINGCONSTANT ; -LibrariesDefinition ::= "[" LibList "]"; +LibrariesDefinition ::= "[" ( LibList | _ ) "]"; -LibList ::= LibList ^ "," STRINGCONSTANT | STRINGCONSTANT | _ ; +LibList ::= LibList ^ "," STRINGCONSTANT | STRINGCONSTANT ; ArgListH ::= ArgListH ^ "," Types OptParamAttrs OptLocalName | Types OptParamAttrs OptLocalName ; @@ -288,7 +287,7 @@ ArgList ::= ArgListH | ArgListH ^ "," "..." | "..." | _ ; FunctionHeaderH ::= OptCallingConv OptRetAttrs ResultTypes - GlobalName "(" ^ ArgList ^ ")" + GlobalName ^ "(" ^ ArgList ^ ")" OptFuncAttrs OptSection OptAlign OptGC ; BEGIN ::= ( begin | "{" ) ^ "\n"; From dpatel at apple.com Mon Jan 5 11:31:23 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 05 Jan 2009 17:31:23 -0000 Subject: [llvm-commits] [llvm] r61707 - in /llvm/trunk/lib: CodeGen/SelectionDAG/SelectionDAGBuild.cpp CodeGen/SimpleRegisterCoalescing.cpp Target/DarwinTargetAsmInfo.cpp Target/ELFTargetAsmInfo.cpp Target/TargetAsmInfo.cpp Target/X86/X86ISelLowering.cpp Target/X86/X86TargetAsmInfo.cpp Message-ID: <200901051731.n05HVN4k029286@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jan 5 11:31:22 2009 New Revision: 61707 URL: http://llvm.org/viewvc/llvm-project?rev=61707&view=rev Log: squash warnings. Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp llvm/trunk/lib/Target/ELFTargetAsmInfo.cpp llvm/trunk/lib/Target/TargetAsmInfo.cpp llvm/trunk/lib/Target/X86/X86ISelLowering.cpp llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp?rev=61707&r1=61706&r2=61707&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp Mon Jan 5 11:31:22 2009 @@ -2019,6 +2019,7 @@ size_t numCmps = Clusterify(Cases, SI); DEBUG(errs() << "Clusterify finished. Total clusters: " << Cases.size() << ". Total compares: " << numCmps << '\n'); + numCmps = 0; // Get the Value to be switched on and default basic blocks, which will be // inserted into CaseBlock records, representing basic blocks in the binary Modified: llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp?rev=61707&r1=61706&r2=61707&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp (original) +++ llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp Mon Jan 5 11:31:22 2009 @@ -1662,7 +1662,7 @@ // optimize for it: if there is more than one value, we merge them all into // the lowest numbered one, then handle the interval as if we were merging // with one value number. - VNInfo *LHSValNo; + VNInfo *LHSValNo = NULL; if (EliminatedLHSVals.size() > 1) { // Loop through all the equal value numbers merging them into the smallest // one. Modified: llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp?rev=61707&r1=61706&r2=61707&view=diff ============================================================================== --- llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp (original) +++ llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp Mon Jan 5 11:31:22 2009 @@ -108,6 +108,7 @@ } // FIXME: Do we have any extra special weird cases? + return NULL; } const Section* Modified: llvm/trunk/lib/Target/ELFTargetAsmInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ELFTargetAsmInfo.cpp?rev=61707&r1=61706&r2=61707&view=diff ============================================================================== --- llvm/trunk/lib/Target/ELFTargetAsmInfo.cpp (original) +++ llvm/trunk/lib/Target/ELFTargetAsmInfo.cpp Mon Jan 5 11:31:22 2009 @@ -86,6 +86,8 @@ } } else assert(0 && "Unsupported global"); + + return NULL; } const Section* Modified: llvm/trunk/lib/Target/TargetAsmInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetAsmInfo.cpp?rev=61707&r1=61706&r2=61707&view=diff ============================================================================== --- llvm/trunk/lib/Target/TargetAsmInfo.cpp (original) +++ llvm/trunk/lib/Target/TargetAsmInfo.cpp Mon Jan 5 11:31:22 2009 @@ -342,6 +342,7 @@ default: assert(0 && "Unknown section kind"); } + return NULL; } const Section* Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=61707&r1=61706&r2=61707&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original) +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Mon Jan 5 11:31:22 2009 @@ -1255,7 +1255,7 @@ if (VA.isRegLoc()) { MVT RegVT = VA.getLocVT(); - TargetRegisterClass *RC; + TargetRegisterClass *RC = NULL; if (RegVT == MVT::i32) RC = X86::GR32RegisterClass; else if (Is64Bit && RegVT == MVT::i64) Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp?rev=61707&r1=61706&r2=61707&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Mon Jan 5 11:31:22 2009 @@ -319,6 +319,7 @@ default: assert(0 && "Unknown section kind"); } + return NULL; } std::string X86COFFTargetAsmInfo::printSectionFlags(unsigned flags) const { From brukman+llvm at gmail.com Mon Jan 5 11:42:15 2009 From: brukman+llvm at gmail.com (Misha Brukman) Date: Mon, 05 Jan 2009 17:42:15 -0000 Subject: [llvm-commits] [llvm] r61708 - in /llvm/trunk: LICENSE.TXT utils/unittest/googletest/COPYING utils/unittest/googletest/LICENSE.TXT utils/unittest/googletest/README.LLVM Message-ID: <200901051742.n05HgFN9029784@zion.cs.uiuc.edu> Author: brukman Date: Mon Jan 5 11:42:15 2009 New Revision: 61708 URL: http://llvm.org/viewvc/llvm-project?rev=61708&view=rev Log: Renamed Google Test license file from COPYING to LICENSE.TXT to match LLVM conventions, per John Criswell. Added: llvm/trunk/utils/unittest/googletest/LICENSE.TXT - copied unchanged from r61593, llvm/trunk/utils/unittest/googletest/COPYING Removed: llvm/trunk/utils/unittest/googletest/COPYING Modified: llvm/trunk/LICENSE.TXT llvm/trunk/utils/unittest/googletest/README.LLVM Modified: llvm/trunk/LICENSE.TXT URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/LICENSE.TXT?rev=61708&r1=61707&r2=61708&view=diff ============================================================================== --- llvm/trunk/LICENSE.TXT (original) +++ llvm/trunk/LICENSE.TXT Mon Jan 5 11:42:15 2009 @@ -66,4 +66,4 @@ llvm/projects/ModuleMaker/autoconf llvm/projects/sample/autoconf CellSPU backend llvm/lib/Target/CellSPU/README.txt -Google Test llvm/utils/unittest/googletest/COPYING +Google Test llvm/utils/unittest/googletest Removed: llvm/trunk/utils/unittest/googletest/COPYING URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/unittest/googletest/COPYING?rev=61707&view=auto ============================================================================== --- llvm/trunk/utils/unittest/googletest/COPYING (original) +++ llvm/trunk/utils/unittest/googletest/COPYING (removed) @@ -1,28 +0,0 @@ -Copyright 2008, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Modified: llvm/trunk/utils/unittest/googletest/README.LLVM URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/unittest/googletest/README.LLVM?rev=61708&r1=61707&r2=61708&view=diff ============================================================================== --- llvm/trunk/utils/unittest/googletest/README.LLVM (original) +++ llvm/trunk/utils/unittest/googletest/README.LLVM Mon Jan 5 11:42:15 2009 @@ -23,4 +23,4 @@ $ rm -f gtest-all.cc gtest_main.cc -For the license, see the file COPYING in this directory. +$ mv COPYING LICENSE.TXT From dpatel at apple.com Mon Jan 5 11:44:11 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 05 Jan 2009 17:44:11 -0000 Subject: [llvm-commits] [llvm] r61709 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901051744.n05HiBEX029855@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jan 5 11:44:11 2009 New Revision: 61709 URL: http://llvm.org/viewvc/llvm-project?rev=61709&view=rev Log: subsume ConstructBasicType(). Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61709&r1=61708&r2=61709&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Jan 5 11:44:11 2009 @@ -1437,20 +1437,13 @@ void AddBasicType(DIE *Entity, CompileUnit *Unit, const std::string &Name, unsigned Encoding, unsigned Size) { - DIE *Die = ConstructBasicType(Unit, Name, Encoding, Size); - AddDIEntry(Entity, DW_AT_type, DW_FORM_ref4, Die); - } - /// ConstructBasicType - Construct a new basic type. - /// - DIE *ConstructBasicType(CompileUnit *Unit, - const std::string &Name, - unsigned Encoding, unsigned Size) { DIE Buffer(DW_TAG_base_type); AddUInt(&Buffer, DW_AT_byte_size, 0, Size); AddUInt(&Buffer, DW_AT_encoding, DW_FORM_data1, Encoding); if (!Name.empty()) AddString(&Buffer, DW_AT_name, DW_FORM_string, Name); - return Unit->AddDie(Buffer); + DIE *BasicTypeDie = Unit->AddDie(Buffer); + AddDIEntry(Entity, DW_AT_type, DW_FORM_ref4, BasicTypeDie); } /// AddPointerType - Add a new pointer type attribute to the specified entity. @@ -1555,8 +1548,10 @@ Size = 0; // Construct an anonymous type for index type. - DIE *IndexTy = ConstructBasicType(Unit, "", DW_ATE_signed, - sizeof(int32_t)); + DIE Buffer(DW_TAG_base_type); + AddUInt(&Buffer, DW_AT_byte_size, 0, sizeof(int32_t)); + AddUInt(&Buffer, DW_AT_encoding, DW_FORM_data1, DW_ATE_signed); + DIE *IndexTy = Unit->AddDie(Buffer); // Add subranges to array type. for (unsigned i = 0, N = Elements.size(); i < N; ++i) { From gohman at apple.com Mon Jan 5 11:44:11 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 05 Jan 2009 17:44:11 -0000 Subject: [llvm-commits] [llvm] r61710 - /llvm/trunk/utils/vim/llvm.vim Message-ID: <200901051744.n05HiBsO029858@zion.cs.uiuc.edu> Author: djg Date: Mon Jan 5 11:44:11 2009 New Revision: 61710 URL: http://llvm.org/viewvc/llvm-project?rev=61710&view=rev Log: Add the keyword 'default'. Modified: llvm/trunk/utils/vim/llvm.vim Modified: llvm/trunk/utils/vim/llvm.vim URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/vim/llvm.vim?rev=61710&r1=61709&r2=61710&view=diff ============================================================================== --- llvm/trunk/utils/vim/llvm.vim (original) +++ llvm/trunk/utils/vim/llvm.vim Mon Jan 5 11:44:11 2009 @@ -42,7 +42,7 @@ syn keyword llvmKeyword internal external syn keyword llvmKeyword linkonce weak appending common extern_weak syn keyword llvmKeyword thread_local dllimport dllexport -syn keyword llvmKeyword hidden protected +syn keyword llvmKeyword hidden protected default syn keyword llvmKeyword except deplibs syn keyword llvmKeyword volatile fastcc coldcc cc ccc syn keyword llvmKeyword x86_stdcallcc x86_fastcallcc From dpatel at apple.com Mon Jan 5 11:46:00 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 05 Jan 2009 17:46:00 -0000 Subject: [llvm-commits] [llvm] r61711 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901051746.n05Hk0Rb029919@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jan 5 11:45:59 2009 New Revision: 61711 URL: http://llvm.org/viewvc/llvm-project?rev=61711&view=rev Log: subsume ConstructPointerType() Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61711&r1=61710&r2=61711&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Jan 5 11:45:59 2009 @@ -1449,17 +1449,11 @@ /// AddPointerType - Add a new pointer type attribute to the specified entity. /// void AddPointerType(DIE *Entity, CompileUnit *Unit, const std::string &Name) { - DIE *Die = ConstructPointerType(Unit, Name); - AddDIEntry(Entity, DW_AT_type, DW_FORM_ref4, Die); - } - - /// ConstructPointerType - Construct a new pointer type. - /// - DIE *ConstructPointerType(CompileUnit *Unit, const std::string &Name) { DIE Buffer(DW_TAG_pointer_type); AddUInt(&Buffer, DW_AT_byte_size, 0, TD->getPointerSize()); if (!Name.empty()) AddString(&Buffer, DW_AT_name, DW_FORM_string, Name); - return Unit->AddDie(Buffer); + DIE *PointerTypeDie = Unit->AddDie(Buffer); + AddDIEntry(Entity, DW_AT_type, DW_FORM_ref4, PointerTypeDie); } /// AddType - Add a new type attribute to the specified entity. From bob.wilson at apple.com Mon Jan 5 11:52:54 2009 From: bob.wilson at apple.com (Bob Wilson) Date: Mon, 05 Jan 2009 17:52:54 -0000 Subject: [llvm-commits] [llvm] r61713 - /llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp Message-ID: <200901051752.n05HqsSc030144@zion.cs.uiuc.edu> Author: bwilson Date: Mon Jan 5 11:52:54 2009 New Revision: 61713 URL: http://llvm.org/viewvc/llvm-project?rev=61713&view=rev Log: Handle iAny and fAny types in TreePatternNode::UpdateNodeType. Modified: llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp Modified: llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp?rev=61713&r1=61712&r2=61713&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp (original) +++ llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp Mon Jan 5 11:52:54 2009 @@ -482,8 +482,9 @@ } } } - - if (ExtVTs[0] == EMVT::isInt && EMVT::isExtIntegerInVTs(getExtTypes())) { + + if ((ExtVTs[0] == EMVT::isInt || ExtVTs[0] == MVT::iAny) && + EMVT::isExtIntegerInVTs(getExtTypes())) { assert(hasTypeSet() && "should be handled above!"); std::vector FVTs = FilterEVTs(getExtTypes(), isInteger); if (getExtTypes() == FVTs) @@ -502,7 +503,8 @@ return true; } } - if (ExtVTs[0] == EMVT::isFP && EMVT::isExtFloatingPointInVTs(getExtTypes())) { + if ((ExtVTs[0] == EMVT::isFP || ExtVTs[0] == MVT::fAny) && + EMVT::isExtFloatingPointInVTs(getExtTypes())) { assert(hasTypeSet() && "should be handled above!"); std::vector FVTs = FilterEVTs(getExtTypes(), isFloatingPoint); @@ -517,9 +519,9 @@ // // Similarly, we should probably set the type here to the intersection of // {isInt|isFP} and ExtVTs - if ((getExtTypeNum(0) == EMVT::isInt && + if (((getExtTypeNum(0) == EMVT::isInt || getExtTypeNum(0) == MVT::iAny) && EMVT::isExtIntegerInVTs(ExtVTs)) || - (getExtTypeNum(0) == EMVT::isFP && + ((getExtTypeNum(0) == EMVT::isFP || getExtTypeNum(0) == MVT::fAny) && EMVT::isExtFloatingPointInVTs(ExtVTs))) { setTypes(ExtVTs); return true; From dpatel at apple.com Mon Jan 5 11:57:47 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 05 Jan 2009 17:57:47 -0000 Subject: [llvm-commits] [llvm] r61714 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901051757.n05Hvlnq030294@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jan 5 11:57:47 2009 New Revision: 61714 URL: http://llvm.org/viewvc/llvm-project?rev=61714&view=rev Log: Construct basic and derived type DIEs using DebugInfo. Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61714&r1=61713&r2=61714&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Jan 5 11:57:47 2009 @@ -23,6 +23,7 @@ #include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineLocation.h" +#include "llvm/Analysis/DebugInfo.h" #include "llvm/Support/Debug.h" #include "llvm/Support/Dwarf.h" #include "llvm/Support/CommandLine.h" @@ -1496,6 +1497,49 @@ } } + /// ConstructType - Construct basic type die from DIBasicType. + void ConstructType(CompileUnit *DW_Unit, DIE &Buffer, + DIBasicType *BTy) { + + // Get core information. + const std::string &Name = BTy->getName(); + Buffer.setTag(DW_TAG_base_type); + AddUInt(&Buffer, DW_AT_encoding, DW_FORM_data1, BTy->getEncoding()); + // Add name if not anonymous or intermediate type. + if (!Name.empty()) + AddString(&Buffer, DW_AT_name, DW_FORM_string, Name); + uint64_t Size = BTy->getSizeInBits() >> 3; + AddUInt(&Buffer, DW_AT_byte_size, 0, Size); + } + + void ConstructType(CompileUnit *DW_Unit, DIE &Buffer, + DIDerivedType *DTy) { + + // Get core information. + const std::string &Name = DTy->getName(); + uint64_t Size = DTy->getSizeInBits() >> 3; + unsigned Tag = DTy->getTag(); + // FIXME - Workaround for templates. + if (Tag == DW_TAG_inheritance) Tag = DW_TAG_reference_type; + + Buffer.setTag(Tag); + // Map to main type, void will not have a type. + DIType FromTy = DTy->getTypeDerivedFrom(); + // FIXME - Enable this. AddType(&Buffer, FromTy, DW_Unit); + + // Add name if not anonymous or intermediate type. + if (!Name.empty()) AddString(&Buffer, DW_AT_name, DW_FORM_string, Name); + + // Add size if non-zero (derived types might be zero-sized.) + if (Size) + AddUInt(&Buffer, DW_AT_byte_size, 0, Size); + + // Add source line info if available and TyDesc is not a forward + // declaration. + // FIXME - Enable this. if (!DTy->isForwardDecl()) + // FIXME - Enable this. AddSourceLine(&Buffer, *DTy); + } + /// ConstructType - Adds all the required attributes to the type. /// void ConstructType(DIE &Buffer, TypeDesc *TyDesc, CompileUnit *Unit) { From gohman at apple.com Mon Jan 5 11:59:03 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 05 Jan 2009 17:59:03 -0000 Subject: [llvm-commits] [llvm] r61715 - in /llvm/trunk: include/llvm/ include/llvm/ADT/ include/llvm/Analysis/ include/llvm/CodeGen/ include/llvm/CompilerDriver/ include/llvm/Config/ include/llvm/Debugger/ include/llvm/ExecutionEngine/ include/llvm/Support/ include/llvm/Target/ include/llvm/Transforms/Utils/ lib/Analysis/ lib/Archive/ lib/AsmParser/ lib/CodeGen/ lib/CodeGen/SelectionDAG/ lib/Debugger/ lib/ExecutionEngine/Interpreter/ lib/Target/ARM/ lib/Target/Alpha/ lib/Target/CellSPU/ lib/Target/IA64/ lib/Target/MSIL/ lib/Tar... Message-ID: <200901051759.n05Hx687030437@zion.cs.uiuc.edu> Author: djg Date: Mon Jan 5 11:59:02 2009 New Revision: 61715 URL: http://llvm.org/viewvc/llvm-project?rev=61715&view=rev Log: Tidy up #includes, deleting a bunch of unnecessary #includes. Modified: llvm/trunk/include/llvm/ADT/FoldingSet.h llvm/trunk/include/llvm/ADT/STLExtras.h llvm/trunk/include/llvm/ADT/SparseBitVector.h llvm/trunk/include/llvm/ADT/ilist.h llvm/trunk/include/llvm/Analysis/ConstantsScanner.h llvm/trunk/include/llvm/Analysis/DominatorInternals.h llvm/trunk/include/llvm/Analysis/Dominators.h llvm/trunk/include/llvm/Analysis/EscapeAnalysis.h llvm/trunk/include/llvm/Analysis/FindUsedTypes.h llvm/trunk/include/llvm/Analysis/LoopInfo.h llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h llvm/trunk/include/llvm/Analysis/SparsePropagation.h llvm/trunk/include/llvm/Analysis/ValueTracking.h llvm/trunk/include/llvm/AutoUpgrade.h llvm/trunk/include/llvm/CodeGen/AsmPrinter.h llvm/trunk/include/llvm/CodeGen/BreakCriticalMachineEdge.h llvm/trunk/include/llvm/CodeGen/DwarfWriter.h llvm/trunk/include/llvm/CodeGen/ELFRelocation.h llvm/trunk/include/llvm/CodeGen/FastISel.h llvm/trunk/include/llvm/CodeGen/FileWriters.h llvm/trunk/include/llvm/CodeGen/GCMetadataPrinter.h llvm/trunk/include/llvm/CodeGen/GCStrategy.h llvm/trunk/include/llvm/CodeGen/LinkAllAsmWriterComponents.h llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h llvm/trunk/include/llvm/CodeGen/LiveVariables.h llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h llvm/trunk/include/llvm/CodeGen/MachineDominators.h llvm/trunk/include/llvm/CodeGen/MachineInstrBuilder.h llvm/trunk/include/llvm/CodeGen/MachineLoopInfo.h llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h llvm/trunk/include/llvm/CompilerDriver/Tool.h llvm/trunk/include/llvm/Config/alloca.h llvm/trunk/include/llvm/Debugger/InferiorProcess.h llvm/trunk/include/llvm/ExecutionEngine/ExecutionEngine.h llvm/trunk/include/llvm/GlobalAlias.h llvm/trunk/include/llvm/GlobalVariable.h llvm/trunk/include/llvm/Instructions.h llvm/trunk/include/llvm/Pass.h llvm/trunk/include/llvm/PassManagers.h llvm/trunk/include/llvm/Support/Annotation.h llvm/trunk/include/llvm/Support/DataFlow.h llvm/trunk/include/llvm/Support/DebugInfoBuilder.h llvm/trunk/include/llvm/Support/ELF.h llvm/trunk/include/llvm/Support/IRBuilder.h llvm/trunk/include/llvm/Support/InstVisitor.h llvm/trunk/include/llvm/Support/MutexGuard.h llvm/trunk/include/llvm/Support/PassNameParser.h llvm/trunk/include/llvm/Support/PredIteratorCache.h llvm/trunk/include/llvm/Target/DarwinTargetAsmInfo.h llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h llvm/trunk/include/llvm/Target/TargetELFWriterInfo.h llvm/trunk/include/llvm/Target/TargetFrameInfo.h llvm/trunk/include/llvm/Target/TargetInstrDesc.h llvm/trunk/include/llvm/Target/TargetJITInfo.h llvm/trunk/include/llvm/Target/TargetLowering.h llvm/trunk/include/llvm/Target/TargetMachine.h llvm/trunk/include/llvm/Target/TargetRegisterInfo.h llvm/trunk/include/llvm/Transforms/Utils/Local.h llvm/trunk/include/llvm/TypeSymbolTable.h llvm/trunk/lib/Analysis/EscapeAnalysis.cpp llvm/trunk/lib/Analysis/ProfileInfoLoader.cpp llvm/trunk/lib/Archive/ArchiveReader.cpp llvm/trunk/lib/AsmParser/LLLexer.h llvm/trunk/lib/CodeGen/MachineDominators.cpp llvm/trunk/lib/CodeGen/MachineLICM.cpp llvm/trunk/lib/CodeGen/MachineSink.cpp llvm/trunk/lib/CodeGen/PostRASchedulerList.cpp llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp llvm/trunk/lib/CodeGen/RegisterScavenging.cpp llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.h llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp llvm/trunk/lib/CodeGen/VirtRegMap.h llvm/trunk/lib/Debugger/Debugger.cpp llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.h llvm/trunk/lib/Target/ARM/ARM.h llvm/trunk/lib/Target/ARM/ARMConstantPoolValue.h llvm/trunk/lib/Target/Alpha/Alpha.h llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.cpp llvm/trunk/lib/Target/CellSPU/SPU.h llvm/trunk/lib/Target/IA64/IA64.h llvm/trunk/lib/Target/IA64/IA64InstrInfo.cpp llvm/trunk/lib/Target/MSIL/MSILWriter.h llvm/trunk/lib/Target/Mips/Mips.h llvm/trunk/lib/Target/Mips/MipsMachineFunction.h llvm/trunk/lib/Target/PIC16/PIC16.h llvm/trunk/lib/Target/PowerPC/PPC.h llvm/trunk/lib/Target/PowerPC/PPCSubtarget.cpp llvm/trunk/lib/Target/Sparc/Sparc.h llvm/trunk/lib/Target/Sparc/SparcInstrInfo.cpp llvm/trunk/lib/Target/X86/X86.h llvm/trunk/lib/Target/X86/X86InstrInfo.cpp llvm/trunk/lib/Target/X86/X86InstrInfo.h llvm/trunk/lib/Target/X86/X86RegisterInfo.h llvm/trunk/lib/Target/X86/X86Subtarget.h llvm/trunk/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp llvm/trunk/lib/VMCore/Function.cpp Modified: llvm/trunk/include/llvm/ADT/FoldingSet.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/FoldingSet.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/FoldingSet.h (original) +++ llvm/trunk/include/llvm/ADT/FoldingSet.h Mon Jan 5 11:59:02 2009 @@ -457,6 +457,4 @@ } // End of namespace llvm. - #endif - Modified: llvm/trunk/include/llvm/ADT/STLExtras.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/STLExtras.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/STLExtras.h (original) +++ llvm/trunk/include/llvm/ADT/STLExtras.h Mon Jan 5 11:59:02 2009 @@ -19,7 +19,7 @@ #include #include // for std::pair -#include // for std::size_t +#include // for std::size_t #include "llvm/ADT/iterator.h" namespace llvm { Modified: llvm/trunk/include/llvm/ADT/SparseBitVector.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/SparseBitVector.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/SparseBitVector.h (original) +++ llvm/trunk/include/llvm/ADT/SparseBitVector.h Mon Jan 5 11:59:02 2009 @@ -17,11 +17,11 @@ #include #include -#include #include "llvm/Support/DataTypes.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Support/MathExtras.h" #include "llvm/ADT/ilist.h" + namespace llvm { /// SparseBitVector is an implementation of a bitvector that is sparse by only Modified: llvm/trunk/include/llvm/ADT/ilist.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/ilist.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/ilist.h (original) +++ llvm/trunk/include/llvm/ADT/ilist.h Mon Jan 5 11:59:02 2009 @@ -40,7 +40,6 @@ #include "llvm/ADT/iterator.h" #include -#include namespace llvm { @@ -366,7 +365,7 @@ } void swap(iplist &RHS) { - abort(); // Swap does not use list traits callback correctly yet! + assert(0 && "Swap does not use list traits callback correctly yet!"); std::swap(Head, RHS.Head); } Modified: llvm/trunk/include/llvm/Analysis/ConstantsScanner.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ConstantsScanner.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/ConstantsScanner.h (original) +++ llvm/trunk/include/llvm/Analysis/ConstantsScanner.h Mon Jan 5 11:59:02 2009 @@ -17,7 +17,6 @@ #define LLVM_ANALYSIS_CONSTANTSSCANNER_H #include "llvm/Support/InstIterator.h" -#include "llvm/Instruction.h" #include "llvm/ADT/iterator.h" namespace llvm { Modified: llvm/trunk/include/llvm/Analysis/DominatorInternals.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DominatorInternals.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/DominatorInternals.h (original) +++ llvm/trunk/include/llvm/Analysis/DominatorInternals.h Mon Jan 5 11:59:02 2009 @@ -11,8 +11,8 @@ #define LLVM_ANALYSIS_DOMINATOR_INTERNALS_H #include "llvm/Analysis/Dominators.h" -#include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallPtrSet.h" + //===----------------------------------------------------------------------===// // // DominatorTree construction - This pass constructs immediate dominator Modified: llvm/trunk/include/llvm/Analysis/Dominators.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/Dominators.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/Dominators.h (original) +++ llvm/trunk/include/llvm/Analysis/Dominators.h Mon Jan 5 11:59:02 2009 @@ -24,7 +24,6 @@ #include "llvm/Pass.h" #include "llvm/BasicBlock.h" #include "llvm/Function.h" -#include "llvm/Instruction.h" #include "llvm/Instructions.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/GraphTraits.h" Modified: llvm/trunk/include/llvm/Analysis/EscapeAnalysis.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/EscapeAnalysis.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/EscapeAnalysis.h (original) +++ llvm/trunk/include/llvm/Analysis/EscapeAnalysis.h Mon Jan 5 11:59:02 2009 @@ -15,13 +15,13 @@ #define LLVM_ANALYSIS_ESCAPEANALYSIS_H #include "llvm/Pass.h" -#include "llvm/Instructions.h" -#include "llvm/Analysis/AliasAnalysis.h" -#include "llvm/Target/TargetData.h" #include namespace llvm { +class Instruction; +class Value; + /// EscapeAnalysis - This class determines whether an allocation (a MallocInst /// or an AllocaInst) can escape from the current function. It performs some /// precomputation, with the rest of the work happening on-demand. @@ -40,11 +40,7 @@ EscapePoints.clear(); } - void getAnalysisUsage(AnalysisUsage &AU) const { - AU.addRequiredTransitive(); - AU.addRequiredTransitive(); - AU.setPreservesAll(); - } + void getAnalysisUsage(AnalysisUsage &AU) const; //===--------------------------------------------------------------------- // Client API Modified: llvm/trunk/include/llvm/Analysis/FindUsedTypes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/FindUsedTypes.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/FindUsedTypes.h (original) +++ llvm/trunk/include/llvm/Analysis/FindUsedTypes.h Mon Jan 5 11:59:02 2009 @@ -20,6 +20,7 @@ namespace llvm { class Type; +class Value; class FindUsedTypes : public ModulePass { std::set UsedTypes; Modified: llvm/trunk/include/llvm/Analysis/LoopInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopInfo.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/LoopInfo.h (original) +++ llvm/trunk/include/llvm/Analysis/LoopInfo.h Mon Jan 5 11:59:02 2009 @@ -54,8 +54,6 @@ class DominatorTree; class LoopInfo; -class PHINode; -class Instruction; template class LoopInfoBase; template class LoopBase; Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h (original) +++ llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h Mon Jan 5 11:59:02 2009 @@ -14,7 +14,7 @@ #ifndef LLVM_ANALYSIS_SCALAREVOLUTION_EXPANDER_H #define LLVM_ANALYSIS_SCALAREVOLUTION_EXPANDER_H -#include "llvm/Instructions.h" +#include "llvm/Instruction.h" #include "llvm/Type.h" #include "llvm/Analysis/ScalarEvolution.h" #include "llvm/Analysis/ScalarEvolutionExpressions.h" @@ -119,4 +119,3 @@ } #endif - Modified: llvm/trunk/include/llvm/Analysis/SparsePropagation.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/SparsePropagation.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/SparsePropagation.h (original) +++ llvm/trunk/include/llvm/Analysis/SparsePropagation.h Mon Jan 5 11:59:02 2009 @@ -17,7 +17,7 @@ #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallPtrSet.h" -#include "llvm/ADT/SmallVector.h" +#include #include #include @@ -31,6 +31,8 @@ class BasicBlock; class Function; class SparseSolver; + + template class SmallVectorImpl; /// AbstractLatticeFunction - This class is implemented by the dataflow instance /// to specify what the lattice values are and how they handle merges etc. Modified: llvm/trunk/include/llvm/Analysis/ValueTracking.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ValueTracking.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/ValueTracking.h (original) +++ llvm/trunk/include/llvm/Analysis/ValueTracking.h Mon Jan 5 11:59:02 2009 @@ -15,8 +15,8 @@ #ifndef LLVM_ANALYSIS_VALUETRACKING_H #define LLVM_ANALYSIS_VALUETRACKING_H +#include "llvm/Support/DataTypes.h" #include -#include namespace llvm { class Value; Modified: llvm/trunk/include/llvm/AutoUpgrade.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/AutoUpgrade.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/AutoUpgrade.h (original) +++ llvm/trunk/include/llvm/AutoUpgrade.h Mon Jan 5 11:59:02 2009 @@ -17,7 +17,6 @@ namespace llvm { class Function; class CallInst; - class BasicBlock; /// This is a more granular function that simply checks an intrinsic function /// for upgrading, and returns true if it requires upgrading. It may return Modified: llvm/trunk/include/llvm/CodeGen/AsmPrinter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/AsmPrinter.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/AsmPrinter.h (original) +++ llvm/trunk/include/llvm/CodeGen/AsmPrinter.h Mon Jan 5 11:59:02 2009 @@ -30,7 +30,6 @@ class ConstantVector; class GCMetadataPrinter; class GlobalVariable; - class GlobalAlias; class MachineConstantPoolEntry; class MachineConstantPoolValue; class MachineModuleInfo; Modified: llvm/trunk/include/llvm/CodeGen/BreakCriticalMachineEdge.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/BreakCriticalMachineEdge.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/BreakCriticalMachineEdge.h (original) +++ llvm/trunk/include/llvm/CodeGen/BreakCriticalMachineEdge.h Mon Jan 5 11:59:02 2009 @@ -1,4 +1,4 @@ -//===--------- BreakCriticalMachineEdges.h - Break critical edges ---------===// +//===--------- BreakCriticalMachineEdge.h - Break critical edges ---------===// // // The LLVM Compiler Infrastructure // @@ -11,8 +11,8 @@ // //===---------------------------------------------------------------------===// -#ifndef LLVM_CODEGEN_BREAKCRITICALMACHINEEDGES_H -#define LLVM_CODEGEN_BREAKCRITICALMACHINEEDGES_H +#ifndef LLVM_CODEGEN_BREAKCRITICALMACHINEEDGE_H +#define LLVM_CODEGEN_BREAKCRITICALMACHINEEDGE_H #include "llvm/CodeGen/MachineJumpTableInfo.h" #include "llvm/Target/TargetInstrInfo.h" Modified: llvm/trunk/include/llvm/CodeGen/DwarfWriter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/DwarfWriter.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/DwarfWriter.h (original) +++ llvm/trunk/include/llvm/CodeGen/DwarfWriter.h Mon Jan 5 11:59:02 2009 @@ -20,8 +20,6 @@ #ifndef LLVM_CODEGEN_DWARFWRITER_H #define LLVM_CODEGEN_DWARFWRITER_H -#include - namespace llvm { class AsmPrinter; @@ -48,7 +46,6 @@ DwarfException *DE; public: - DwarfWriter(raw_ostream &OS, AsmPrinter *A, const TargetAsmInfo *T); virtual ~DwarfWriter(); Modified: llvm/trunk/include/llvm/CodeGen/ELFRelocation.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/ELFRelocation.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/ELFRelocation.h (original) +++ llvm/trunk/include/llvm/CodeGen/ELFRelocation.h Mon Jan 5 11:59:02 2009 @@ -49,4 +49,3 @@ } // end llvm namespace #endif // LLVM_CODEGEN_ELF_RELOCATION_H - Modified: llvm/trunk/include/llvm/CodeGen/FastISel.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/FastISel.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/FastISel.h (original) +++ llvm/trunk/include/llvm/CodeGen/FastISel.h Mon Jan 5 11:59:02 2009 @@ -14,7 +14,6 @@ #ifndef LLVM_CODEGEN_FASTISEL_H #define LLVM_CODEGEN_FASTISEL_H -#include "llvm/BasicBlock.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallSet.h" #include "llvm/CodeGen/SelectionDAGNodes.h" Modified: llvm/trunk/include/llvm/CodeGen/FileWriters.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/FileWriters.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/FileWriters.h (original) +++ llvm/trunk/include/llvm/CodeGen/FileWriters.h Mon Jan 5 11:59:02 2009 @@ -14,8 +14,6 @@ #ifndef LLVM_CODEGEN_FILEWRITERS_H #define LLVM_CODEGEN_FILEWRITERS_H -#include - namespace llvm { class PassManagerBase; Modified: llvm/trunk/include/llvm/CodeGen/GCMetadataPrinter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/GCMetadataPrinter.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/GCMetadataPrinter.h (original) +++ llvm/trunk/include/llvm/CodeGen/GCMetadataPrinter.h Mon Jan 5 11:59:02 2009 @@ -23,8 +23,6 @@ #include "llvm/CodeGen/GCMetadata.h" #include "llvm/CodeGen/GCStrategy.h" #include "llvm/Support/Registry.h" -#include -#include namespace llvm { Modified: llvm/trunk/include/llvm/CodeGen/GCStrategy.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/GCStrategy.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/GCStrategy.h (original) +++ llvm/trunk/include/llvm/CodeGen/GCStrategy.h Mon Jan 5 11:59:02 2009 @@ -38,7 +38,6 @@ #include "llvm/CodeGen/GCMetadata.h" #include "llvm/Support/Registry.h" -#include #include namespace llvm { Modified: llvm/trunk/include/llvm/CodeGen/LinkAllAsmWriterComponents.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LinkAllAsmWriterComponents.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/LinkAllAsmWriterComponents.h (original) +++ llvm/trunk/include/llvm/CodeGen/LinkAllAsmWriterComponents.h Mon Jan 5 11:59:02 2009 @@ -34,4 +34,3 @@ } #endif // LLVM_CODEGEN_LINKALLASMWRITERCOMPONENTS_H - Modified: llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h (original) +++ llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h Mon Jan 5 11:59:02 2009 @@ -24,7 +24,6 @@ #include "llvm/CodeGen/LiveInterval.h" #include "llvm/ADT/BitVector.h" #include "llvm/ADT/DenseMap.h" -#include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallVector.h" #include "llvm/Support/Allocator.h" #include Modified: llvm/trunk/include/llvm/CodeGen/LiveVariables.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveVariables.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/LiveVariables.h (original) +++ llvm/trunk/include/llvm/CodeGen/LiveVariables.h Mon Jan 5 11:59:02 2009 @@ -32,7 +32,6 @@ #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/ADT/BitVector.h" #include "llvm/ADT/DenseMap.h" -#include "llvm/ADT/SmallSet.h" #include "llvm/ADT/SmallVector.h" namespace llvm { Modified: llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h Mon Jan 5 11:59:02 2009 @@ -20,7 +20,6 @@ namespace llvm { -class AsmPrinter; class Constant; class FoldingSetNodeID; class TargetData; Modified: llvm/trunk/include/llvm/CodeGen/MachineDominators.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineDominators.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineDominators.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineDominators.h Mon Jan 5 11:59:02 2009 @@ -16,9 +16,6 @@ #define LLVM_CODEGEN_MACHINEDOMINATORS_H #include "llvm/CodeGen/MachineFunctionPass.h" -#include "llvm/CodeGen/MachineBasicBlock.h" -#include "llvm/CodeGen/MachineFunction.h" -#include "llvm/CodeGen/MachineInstr.h" #include "llvm/Analysis/Dominators.h" #include "llvm/Analysis/DominatorInternals.h" @@ -45,21 +42,13 @@ static char ID; // Pass ID, replacement for typeid DominatorTreeBase* DT; - MachineDominatorTree() : MachineFunctionPass(intptr_t(&ID)) { - DT = new DominatorTreeBase(false); - } + MachineDominatorTree(); - ~MachineDominatorTree() { - DT->releaseMemory(); - delete DT; - } + ~MachineDominatorTree(); DominatorTreeBase& getBase() { return *DT; } - virtual void getAnalysisUsage(AnalysisUsage &AU) const { - AU.setPreservesAll(); - MachineFunctionPass::getAnalysisUsage(AU); - } + virtual void getAnalysisUsage(AnalysisUsage &AU) const; /// getRoots - Return the root blocks of the current CFG. This may include /// multiple blocks if we are computing post dominators. For forward @@ -77,11 +66,7 @@ return DT->getRootNode(); } - virtual bool runOnMachineFunction(MachineFunction &F) { - DT->recalculate(F); - - return false; - } + virtual bool runOnMachineFunction(MachineFunction &F); inline bool dominates(MachineDomTreeNode* A, MachineDomTreeNode* B) const { return DT->dominates(A, B); @@ -173,9 +158,7 @@ } - virtual void releaseMemory() { - DT->releaseMemory(); - } + virtual void releaseMemory(); virtual void print(std::ostream &OS, const Module* M= 0) const { DT->print(OS, M); Modified: llvm/trunk/include/llvm/CodeGen/MachineInstrBuilder.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineInstrBuilder.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineInstrBuilder.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineInstrBuilder.h Mon Jan 5 11:59:02 2009 @@ -17,7 +17,6 @@ #ifndef LLVM_CODEGEN_MACHINEINSTRBUILDER_H #define LLVM_CODEGEN_MACHINEINSTRBUILDER_H -#include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/CodeGen/MachineFunction.h" namespace llvm { Modified: llvm/trunk/include/llvm/CodeGen/MachineLoopInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineLoopInfo.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineLoopInfo.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineLoopInfo.h Mon Jan 5 11:59:02 2009 @@ -31,9 +31,6 @@ #define LLVM_CODEGEN_MACHINE_LOOP_INFO_H #include "llvm/CodeGen/MachineFunctionPass.h" -#include "llvm/CodeGen/MachineBasicBlock.h" -#include "llvm/CodeGen/MachineFunction.h" -#include "llvm/CodeGen/MachineInstr.h" #include "llvm/Analysis/LoopInfo.h" namespace llvm { Modified: llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h (original) +++ llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h Mon Jan 5 11:59:02 2009 @@ -13,22 +13,18 @@ //===----------------------------------------------------------------------===// #include "llvm/System/IncludeFile.h" -#include "llvm/CodeGen/MachineInstr.h" -#include "llvm/CodeGen/LiveIntervalAnalysis.h" -#include "llvm/CodeGen/LiveVariables.h" -#include "llvm/Target/TargetRegisterInfo.h" +#include "llvm/CodeGen/LiveInterval.h" +#include "llvm/ADT/SmallPtrSet.h" #ifndef LLVM_CODEGEN_REGISTER_COALESCER_H #define LLVM_CODEGEN_REGISTER_COALESCER_H -namespace llvm -{ +namespace llvm { + class MachineFunction; class RegallocQuery; class AnalysisUsage; - class LiveIntervals; class MachineInstr; - class TargetRegisterInfo; /// An abstract interface for register coalescers. Coalescers must /// implement this interface to be part of the coalescer analysis Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h (original) +++ llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h Mon Jan 5 11:59:02 2009 @@ -19,7 +19,6 @@ #ifndef LLVM_CODEGEN_SELECTIONDAGNODES_H #define LLVM_CODEGEN_SELECTIONDAGNODES_H -#include "llvm/Value.h" #include "llvm/Constants.h" #include "llvm/ADT/FoldingSet.h" #include "llvm/ADT/GraphTraits.h" Modified: llvm/trunk/include/llvm/CompilerDriver/Tool.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CompilerDriver/Tool.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/CompilerDriver/Tool.h (original) +++ llvm/trunk/include/llvm/CompilerDriver/Tool.h Mon Jan 5 11:59:02 2009 @@ -20,7 +20,6 @@ #include "llvm/ADT/StringSet.h" #include "llvm/System/Path.h" -#include #include namespace llvmc { Modified: llvm/trunk/include/llvm/Config/alloca.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Config/alloca.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Config/alloca.h (original) +++ llvm/trunk/include/llvm/Config/alloca.h Mon Jan 5 11:59:02 2009 @@ -47,4 +47,3 @@ #endif #endif - Modified: llvm/trunk/include/llvm/Debugger/InferiorProcess.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Debugger/InferiorProcess.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Debugger/InferiorProcess.h (original) +++ llvm/trunk/include/llvm/Debugger/InferiorProcess.h Mon Jan 5 11:59:02 2009 @@ -135,4 +135,3 @@ } // end namespace llvm #endif - Modified: llvm/trunk/include/llvm/ExecutionEngine/ExecutionEngine.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/ExecutionEngine.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/ExecutionEngine/ExecutionEngine.h (original) +++ llvm/trunk/include/llvm/ExecutionEngine/ExecutionEngine.h Mon Jan 5 11:59:02 2009 @@ -17,7 +17,6 @@ #include #include -#include #include #include "llvm/System/Mutex.h" #include "llvm/ADT/SmallVector.h" Modified: llvm/trunk/include/llvm/GlobalAlias.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/GlobalAlias.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/GlobalAlias.h (original) +++ llvm/trunk/include/llvm/GlobalAlias.h Mon Jan 5 11:59:02 2009 @@ -23,7 +23,6 @@ class Module; class Constant; -class PointerType; template class SymbolTableListTraits; Modified: llvm/trunk/include/llvm/GlobalVariable.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/GlobalVariable.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/GlobalVariable.h (original) +++ llvm/trunk/include/llvm/GlobalVariable.h Mon Jan 5 11:59:02 2009 @@ -28,7 +28,6 @@ class Module; class Constant; -class PointerType; template class SymbolTableListTraits; Modified: llvm/trunk/include/llvm/Instructions.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Instructions.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Instructions.h (original) +++ llvm/trunk/include/llvm/Instructions.h Mon Jan 5 11:59:02 2009 @@ -16,19 +16,16 @@ #ifndef LLVM_INSTRUCTIONS_H #define LLVM_INSTRUCTIONS_H -#include - #include "llvm/InstrTypes.h" #include "llvm/DerivedTypes.h" #include "llvm/Attributes.h" #include "llvm/BasicBlock.h" #include "llvm/ADT/SmallVector.h" +#include namespace llvm { class ConstantInt; -class PointerType; -class VectorType; class ConstantRange; class APInt; Modified: llvm/trunk/include/llvm/Pass.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Pass.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Pass.h (original) +++ llvm/trunk/include/llvm/Pass.h Mon Jan 5 11:59:02 2009 @@ -38,7 +38,6 @@ namespace llvm { -class Value; class BasicBlock; class Function; class Module; Modified: llvm/trunk/include/llvm/PassManagers.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/PassManagers.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/PassManagers.h (original) +++ llvm/trunk/include/llvm/PassManagers.h Mon Jan 5 11:59:02 2009 @@ -1,4 +1,4 @@ -//===- llvm/PassManager.h - Pass Inftrastructre classes --------*- C++ -*-===// +//===- llvm/PassManagers.h - Pass Infrastructure classes -------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -11,8 +11,8 @@ // //===----------------------------------------------------------------------===// -#ifndef PASSMANAGERS_H -#define PASSMANAGERS_H +#ifndef LLVM_PASSMANAGERS_H +#define LLVM_PASSMANAGERS_H #include "llvm/PassManager.h" #include "llvm/ADT/SmallVector.h" @@ -428,4 +428,3 @@ extern void StopPassTimer(llvm::Pass *); #endif - Modified: llvm/trunk/include/llvm/Support/Annotation.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Annotation.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Annotation.h (original) +++ llvm/trunk/include/llvm/Support/Annotation.h Mon Jan 5 11:59:02 2009 @@ -22,7 +22,6 @@ #ifndef LLVM_SUPPORT_ANNOTATION_H #define LLVM_SUPPORT_ANNOTATION_H -#include #include namespace llvm { Modified: llvm/trunk/include/llvm/Support/DataFlow.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/DataFlow.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/DataFlow.h (original) +++ llvm/trunk/include/llvm/Support/DataFlow.h Mon Jan 5 11:59:02 2009 @@ -15,7 +15,6 @@ #define LLVM_SUPPORT_DATAFLOW_H #include "llvm/User.h" -#include "llvm/Value.h" #include "llvm/ADT/GraphTraits.h" namespace llvm { Modified: llvm/trunk/include/llvm/Support/DebugInfoBuilder.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/DebugInfoBuilder.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/DebugInfoBuilder.h (original) +++ llvm/trunk/include/llvm/Support/DebugInfoBuilder.h Mon Jan 5 11:59:02 2009 @@ -15,7 +15,7 @@ #ifndef LLVM_SUPPORT_DEBUGINFOBUILDER_H #define LLVM_SUPPORT_DEBUGINFOBUILDER_H -#include +#include "llvm/Module.h" #include namespace llvm { Modified: llvm/trunk/include/llvm/Support/ELF.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/ELF.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/ELF.h (original) +++ llvm/trunk/include/llvm/Support/ELF.h Mon Jan 5 11:59:02 2009 @@ -23,7 +23,6 @@ #include "llvm/Support/DataTypes.h" #include -#include namespace llvm { Modified: llvm/trunk/include/llvm/Support/IRBuilder.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/IRBuilder.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/IRBuilder.h (original) +++ llvm/trunk/include/llvm/Support/IRBuilder.h Mon Jan 5 11:59:02 2009 @@ -15,7 +15,6 @@ #ifndef LLVM_SUPPORT_IRBUILDER_H #define LLVM_SUPPORT_IRBUILDER_H -#include "llvm/BasicBlock.h" #include "llvm/Constants.h" #include "llvm/Instructions.h" #include "llvm/GlobalVariable.h" Modified: llvm/trunk/include/llvm/Support/InstVisitor.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/InstVisitor.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/InstVisitor.h (original) +++ llvm/trunk/include/llvm/Support/InstVisitor.h Mon Jan 5 11:59:02 2009 @@ -23,10 +23,6 @@ #define HANDLE_INST(NUM, OPCODE, CLASS) class CLASS; #include "llvm/Instruction.def" -// Forward declare the intermediate types... -class TerminatorInst; class BinaryOperator; -class AllocationInst; - #define DELEGATE(CLASS_TO_VISIT) \ return static_cast(this)-> \ visit##CLASS_TO_VISIT(static_cast(I)) Modified: llvm/trunk/include/llvm/Support/MutexGuard.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/MutexGuard.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/MutexGuard.h (original) +++ llvm/trunk/include/llvm/Support/MutexGuard.h Mon Jan 5 11:59:02 2009 @@ -15,7 +15,7 @@ #ifndef LLVM_SUPPORT_MUTEXGUARD_H #define LLVM_SUPPORT_MUTEXGUARD_H -#include +#include "llvm/System/Mutex.h" namespace llvm { /// Instances of this class acquire a given Mutex Lock when constructed and Modified: llvm/trunk/include/llvm/Support/PassNameParser.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/PassNameParser.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/PassNameParser.h (original) +++ llvm/trunk/include/llvm/Support/PassNameParser.h Mon Jan 5 11:59:02 2009 @@ -129,4 +129,5 @@ }; } // End llvm namespace + #endif Modified: llvm/trunk/include/llvm/Support/PredIteratorCache.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/PredIteratorCache.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/PredIteratorCache.h (original) +++ llvm/trunk/include/llvm/Support/PredIteratorCache.h Mon Jan 5 11:59:02 2009 @@ -59,4 +59,3 @@ } // end namespace llvm #endif - Modified: llvm/trunk/include/llvm/Target/DarwinTargetAsmInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/DarwinTargetAsmInfo.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/DarwinTargetAsmInfo.h (original) +++ llvm/trunk/include/llvm/Target/DarwinTargetAsmInfo.h Mon Jan 5 11:59:02 2009 @@ -16,7 +16,6 @@ #define LLVM_DARWIN_TARGET_ASM_INFO_H #include "llvm/Target/TargetAsmInfo.h" -#include "llvm/Target/TargetMachine.h" namespace llvm { class GlobalValue; Modified: llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h (original) +++ llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h Mon Jan 5 11:59:02 2009 @@ -16,7 +16,6 @@ #define LLVM_ELF_TARGET_ASM_INFO_H #include "llvm/Target/TargetAsmInfo.h" -#include "llvm/Target/TargetMachine.h" namespace llvm { class GlobalValue; Modified: llvm/trunk/include/llvm/Target/TargetELFWriterInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetELFWriterInfo.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetELFWriterInfo.h (original) +++ llvm/trunk/include/llvm/Target/TargetELFWriterInfo.h Mon Jan 5 11:59:02 2009 @@ -16,8 +16,6 @@ namespace llvm { - class MachineBasicBlock; - //===--------------------------------------------------------------------===// // TargetELFWriterInfo //===--------------------------------------------------------------------===// Modified: llvm/trunk/include/llvm/Target/TargetFrameInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetFrameInfo.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetFrameInfo.h (original) +++ llvm/trunk/include/llvm/Target/TargetFrameInfo.h Mon Jan 5 11:59:02 2009 @@ -18,8 +18,6 @@ namespace llvm { -class MachineFunction; - /// Information about stack frame layout on the target. It holds the direction /// of stack growth, the known stack alignment on entry to each function, and /// the offset to the locals area. Modified: llvm/trunk/include/llvm/Target/TargetInstrDesc.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetInstrDesc.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetInstrDesc.h (original) +++ llvm/trunk/include/llvm/Target/TargetInstrDesc.h Mon Jan 5 11:59:02 2009 @@ -15,8 +15,6 @@ #ifndef LLVM_TARGET_TARGETINSTRDESC_H #define LLVM_TARGET_TARGETINSTRDESC_H -#include - namespace llvm { class TargetRegisterClass; Modified: llvm/trunk/include/llvm/Target/TargetJITInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetJITInfo.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetJITInfo.h (original) +++ llvm/trunk/include/llvm/Target/TargetJITInfo.h Mon Jan 5 11:59:02 2009 @@ -23,7 +23,6 @@ namespace llvm { class Function; class GlobalValue; - class MachineBasicBlock; class MachineCodeEmitter; class MachineRelocation; Modified: llvm/trunk/include/llvm/Target/TargetLowering.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLowering.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetLowering.h (original) +++ llvm/trunk/include/llvm/Target/TargetLowering.h Mon Jan 5 11:59:02 2009 @@ -22,9 +22,7 @@ #ifndef LLVM_TARGET_TARGETLOWERING_H #define LLVM_TARGET_TARGETLOWERING_H -#include "llvm/Constants.h" #include "llvm/InlineAsm.h" -#include "llvm/Instructions.h" #include "llvm/CodeGen/SelectionDAGNodes.h" #include "llvm/CodeGen/RuntimeLibcalls.h" #include "llvm/ADT/APFloat.h" @@ -36,6 +34,7 @@ namespace llvm { class AllocaInst; + class CallInst; class Function; class FastISel; class MachineBasicBlock; @@ -51,7 +50,6 @@ class TargetRegisterClass; class TargetSubtarget; class Value; - class VectorType; //===----------------------------------------------------------------------===// /// TargetLowering - This class defines information used to lower LLVM code to Modified: llvm/trunk/include/llvm/Target/TargetMachine.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetMachine.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetMachine.h (original) +++ llvm/trunk/include/llvm/Target/TargetMachine.h Mon Jan 5 11:59:02 2009 @@ -16,7 +16,6 @@ #include "llvm/Target/TargetInstrItineraries.h" #include -#include namespace llvm { @@ -78,7 +77,7 @@ TargetMachine(const TargetMachine &); // DO NOT IMPLEMENT void operator=(const TargetMachine &); // DO NOT IMPLEMENT protected: // Can only create subclasses. - TargetMachine() : AsmInfo(NULL) { } + TargetMachine() : AsmInfo(0) { } /// getSubtargetImpl - virtual method implemented by subclasses that returns /// a reference to that target's TargetSubtarget-derived member variable. @@ -90,7 +89,7 @@ /// createTargetAsmInfo - Create a new instance of target specific asm /// information. - virtual const TargetAsmInfo *createTargetAsmInfo() const { return NULL; } + virtual const TargetAsmInfo *createTargetAsmInfo() const { return 0; } public: virtual ~TargetMachine(); Modified: llvm/trunk/include/llvm/Target/TargetRegisterInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetRegisterInfo.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetRegisterInfo.h (original) +++ llvm/trunk/include/llvm/Target/TargetRegisterInfo.h Mon Jan 5 11:59:02 2009 @@ -16,7 +16,6 @@ #ifndef LLVM_TARGET_TARGETREGISTERINFO_H #define LLVM_TARGET_TARGETREGISTERINFO_H -#include "llvm/ADT/SmallVector.h" #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/CodeGen/ValueTypes.h" #include @@ -26,12 +25,8 @@ class BitVector; class MachineFunction; -class MachineInstr; class MachineMove; class RegScavenger; -class SDNode; -class SelectionDAG; -class Type; /// TargetRegisterDesc - This record contains all of the information known about /// a particular register. The AliasSet field (if not null) contains a pointer Modified: llvm/trunk/include/llvm/Transforms/Utils/Local.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/Local.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/Transforms/Utils/Local.h (original) +++ llvm/trunk/include/llvm/Transforms/Utils/Local.h Mon Jan 5 11:59:02 2009 @@ -15,15 +15,18 @@ #ifndef LLVM_TRANSFORMS_UTILS_LOCAL_H #define LLVM_TRANSFORMS_UTILS_LOCAL_H -#include "llvm/Function.h" - namespace llvm { +class BasicBlock; +class Instruction; +class Value; class Pass; class PHINode; class AllocaInst; class ConstantExpr; class TargetData; + +template class SmallVectorImpl; //===----------------------------------------------------------------------===// // Local constant propagation. @@ -84,12 +87,12 @@ /// the alloca inserted to create a stack slot for X. /// AllocaInst *DemoteRegToStack(Instruction &X, bool VolatileLoads = false, - Instruction *AllocaPoint = NULL); + Instruction *AllocaPoint = 0); /// DemotePHIToStack - This function takes a virtual register computed by a phi /// node and replaces it with a slot in the stack frame, allocated via alloca. /// The phi node is deleted and it returns the pointer to the alloca inserted. -AllocaInst *DemotePHIToStack(PHINode *P, Instruction *AllocaPoint = NULL); +AllocaInst *DemotePHIToStack(PHINode *P, Instruction *AllocaPoint = 0); } // End llvm namespace Modified: llvm/trunk/include/llvm/TypeSymbolTable.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/TypeSymbolTable.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/include/llvm/TypeSymbolTable.h (original) +++ llvm/trunk/include/llvm/TypeSymbolTable.h Mon Jan 5 11:59:02 2009 @@ -134,4 +134,3 @@ } // End llvm namespace #endif - Modified: llvm/trunk/lib/Analysis/EscapeAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/EscapeAnalysis.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/EscapeAnalysis.cpp (original) +++ llvm/trunk/lib/Analysis/EscapeAnalysis.cpp Mon Jan 5 11:59:02 2009 @@ -14,8 +14,11 @@ #define DEBUG_TYPE "escape-analysis" #include "llvm/Analysis/EscapeAnalysis.h" #include "llvm/Constants.h" +#include "llvm/Instructions.h" #include "llvm/Module.h" +#include "llvm/Analysis/AliasAnalysis.h" #include "llvm/Support/InstIterator.h" +#include "llvm/Target/TargetData.h" #include "llvm/ADT/SmallPtrSet.h" #include using namespace llvm; @@ -25,6 +28,12 @@ "Pointer Escape Analysis", true, true); +void EscapeAnalysis::getAnalysisUsage(AnalysisUsage &AU) const { + AU.addRequiredTransitive(); + AU.addRequiredTransitive(); + AU.setPreservesAll(); +} + /// runOnFunction - Precomputation for escape analysis. This collects all know /// "escape points" in the def-use graph of the function. These are /// instructions which allow their inputs to escape from the current function. Modified: llvm/trunk/lib/Analysis/ProfileInfoLoader.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ProfileInfoLoader.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/ProfileInfoLoader.cpp (original) +++ llvm/trunk/lib/Analysis/ProfileInfoLoader.cpp Mon Jan 5 11:59:02 2009 @@ -18,6 +18,7 @@ #include "llvm/InstrTypes.h" #include "llvm/Support/Streams.h" #include +#include #include using namespace llvm; Modified: llvm/trunk/lib/Archive/ArchiveReader.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Archive/ArchiveReader.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Archive/ArchiveReader.cpp (original) +++ llvm/trunk/lib/Archive/ArchiveReader.cpp Mon Jan 5 11:59:02 2009 @@ -15,6 +15,7 @@ #include "llvm/Bitcode/ReaderWriter.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Module.h" +#include #include using namespace llvm; Modified: llvm/trunk/lib/AsmParser/LLLexer.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLLexer.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLLexer.h (original) +++ llvm/trunk/lib/AsmParser/LLLexer.h Mon Jan 5 11:59:02 2009 @@ -17,9 +17,7 @@ #include "LLToken.h" #include "llvm/ADT/APSInt.h" #include "llvm/ADT/APFloat.h" -#include #include -#include namespace llvm { class MemoryBuffer; Modified: llvm/trunk/lib/CodeGen/MachineDominators.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineDominators.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/MachineDominators.cpp (original) +++ llvm/trunk/lib/CodeGen/MachineDominators.cpp Mon Jan 5 11:59:02 2009 @@ -26,3 +26,28 @@ E("machinedomtree", "MachineDominator Tree Construction", true); const PassInfo *const llvm::MachineDominatorsID = &E; + +void MachineDominatorTree::getAnalysisUsage(AnalysisUsage &AU) const { + AU.setPreservesAll(); + MachineFunctionPass::getAnalysisUsage(AU); +} + +bool MachineDominatorTree::runOnMachineFunction(MachineFunction &F) { + DT->recalculate(F); + + return false; +} + +MachineDominatorTree::MachineDominatorTree() + : MachineFunctionPass(intptr_t(&ID)) { + DT = new DominatorTreeBase(false); +} + +MachineDominatorTree::~MachineDominatorTree() { + DT->releaseMemory(); + delete DT; +} + +void MachineDominatorTree::releaseMemory() { + DT->releaseMemory(); +} Modified: llvm/trunk/lib/CodeGen/MachineLICM.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineLICM.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/MachineLICM.cpp (original) +++ llvm/trunk/lib/CodeGen/MachineLICM.cpp Mon Jan 5 11:59:02 2009 @@ -20,7 +20,6 @@ #include "llvm/Target/TargetRegisterInfo.h" #include "llvm/Target/TargetInstrInfo.h" #include "llvm/Target/TargetMachine.h" -#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/Statistic.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Compiler.h" Modified: llvm/trunk/lib/CodeGen/MachineSink.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineSink.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/MachineSink.cpp (original) +++ llvm/trunk/lib/CodeGen/MachineSink.cpp Mon Jan 5 11:59:02 2009 @@ -18,7 +18,6 @@ #include "llvm/Target/TargetRegisterInfo.h" #include "llvm/Target/TargetInstrInfo.h" #include "llvm/Target/TargetMachine.h" -#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/Statistic.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/Debug.h" Modified: llvm/trunk/lib/CodeGen/PostRASchedulerList.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PostRASchedulerList.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/PostRASchedulerList.cpp (original) +++ llvm/trunk/lib/CodeGen/PostRASchedulerList.cpp Mon Jan 5 11:59:02 2009 @@ -32,10 +32,7 @@ #include "llvm/Support/Compiler.h" #include "llvm/Support/Debug.h" #include "llvm/ADT/Statistic.h" -#include "llvm/ADT/DenseSet.h" -#include "llvm/ADT/SmallVector.h" #include -#include using namespace llvm; STATISTIC(NumStalls, "Number of pipeline stalls"); Modified: llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp (original) +++ llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp Mon Jan 5 11:59:02 2009 @@ -29,6 +29,7 @@ #include "llvm/Target/TargetOptions.h" #include "llvm/Target/TargetInstrInfo.h" #include "llvm/ADT/EquivalenceClasses.h" +#include "llvm/ADT/SmallSet.h" #include "llvm/ADT/Statistic.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Support/Debug.h" Modified: llvm/trunk/lib/CodeGen/RegisterScavenging.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegisterScavenging.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/RegisterScavenging.cpp (original) +++ llvm/trunk/lib/CodeGen/RegisterScavenging.cpp Mon Jan 5 11:59:02 2009 @@ -24,6 +24,7 @@ #include "llvm/Target/TargetInstrInfo.h" #include "llvm/Target/TargetMachine.h" #include "llvm/ADT/SmallPtrSet.h" +#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/STLExtras.h" using namespace llvm; Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Mon Jan 5 11:59:02 2009 @@ -24,9 +24,7 @@ #include "llvm/Target/TargetInstrInfo.h" #include "llvm/Support/Debug.h" #include "llvm/Support/Compiler.h" -#include "llvm/ADT/BitVector.h" #include "llvm/ADT/PriorityQueue.h" -#include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallSet.h" #include "llvm/ADT/Statistic.h" #include "llvm/ADT/STLExtras.h" Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Mon Jan 5 11:59:02 2009 @@ -14,7 +14,6 @@ #define DEBUG_TYPE "isel" #include "llvm/CodeGen/SelectionDAGISel.h" #include "SelectionDAGBuild.h" -#include "llvm/ADT/BitVector.h" #include "llvm/Analysis/AliasAnalysis.h" #include "llvm/Constants.h" #include "llvm/CallingConv.h" Modified: llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.h (original) +++ llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.h Mon Jan 5 11:59:02 2009 @@ -15,11 +15,9 @@ #define LLVM_CODEGEN_SIMPLE_REGISTER_COALESCING_H #include "llvm/CodeGen/MachineFunctionPass.h" -#include "llvm/CodeGen/LiveInterval.h" #include "llvm/CodeGen/LiveIntervalAnalysis.h" #include "llvm/CodeGen/RegisterCoalescer.h" #include "llvm/ADT/BitVector.h" -#include "llvm/ADT/IndexedMap.h" #include namespace llvm { Modified: llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp (original) +++ llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp Mon Jan 5 11:59:02 2009 @@ -42,7 +42,7 @@ #include "llvm/Support/Debug.h" #include "llvm/ADT/BitVector.h" #include "llvm/ADT/DenseMap.h" -#include "llvm/ADT/SmallPtrSet.h" +#include "llvm/ADT/SmallSet.h" #include "llvm/ADT/Statistic.h" #include "llvm/ADT/STLExtras.h" using namespace llvm; Modified: llvm/trunk/lib/CodeGen/VirtRegMap.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/VirtRegMap.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/VirtRegMap.h (original) +++ llvm/trunk/lib/CodeGen/VirtRegMap.h Mon Jan 5 11:59:02 2009 @@ -21,6 +21,7 @@ #include "llvm/ADT/BitVector.h" #include "llvm/ADT/IndexedMap.h" #include "llvm/ADT/SmallPtrSet.h" +#include "llvm/ADT/SmallVector.h" #include "llvm/Support/Streams.h" #include Modified: llvm/trunk/lib/Debugger/Debugger.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Debugger/Debugger.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Debugger/Debugger.cpp (original) +++ llvm/trunk/lib/Debugger/Debugger.cpp Mon Jan 5 11:59:02 2009 @@ -18,6 +18,7 @@ #include "llvm/Debugger/InferiorProcess.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/ADT/StringExtras.h" +#include #include using namespace llvm; Modified: llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.h (original) +++ llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.h Mon Jan 5 11:59:02 2009 @@ -17,7 +17,6 @@ #include "llvm/Function.h" #include "llvm/ExecutionEngine/ExecutionEngine.h" #include "llvm/ExecutionEngine/GenericValue.h" -#include "llvm/ADT/APInt.h" #include "llvm/Support/InstVisitor.h" #include "llvm/Support/CallSite.h" #include "llvm/Target/TargetData.h" Modified: llvm/trunk/lib/Target/ARM/ARM.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARM.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARM.h (original) +++ llvm/trunk/lib/Target/ARM/ARM.h Mon Jan 5 11:59:02 2009 @@ -15,7 +15,6 @@ #ifndef TARGET_ARM_H #define TARGET_ARM_H -#include #include namespace llvm { Modified: llvm/trunk/lib/Target/ARM/ARMConstantPoolValue.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMConstantPoolValue.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMConstantPoolValue.h (original) +++ llvm/trunk/lib/Target/ARM/ARMConstantPoolValue.h Mon Jan 5 11:59:02 2009 @@ -15,7 +15,7 @@ #define LLVM_TARGET_ARM_CONSTANTPOOLVALUE_H #include "llvm/CodeGen/MachineConstantPool.h" -#include +#include namespace llvm { Modified: llvm/trunk/lib/Target/Alpha/Alpha.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Alpha/Alpha.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/Alpha/Alpha.h (original) +++ llvm/trunk/lib/Target/Alpha/Alpha.h Mon Jan 5 11:59:02 2009 @@ -15,8 +15,6 @@ #ifndef TARGET_ALPHA_H #define TARGET_ALPHA_H -#include - namespace llvm { class AlphaTargetMachine; Modified: llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.cpp (original) +++ llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.cpp Mon Jan 5 11:59:02 2009 @@ -15,6 +15,7 @@ #include "AlphaInstrInfo.h" #include "AlphaGenInstrInfo.inc" #include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/SmallVector.h" #include "llvm/CodeGen/MachineInstrBuilder.h" using namespace llvm; Modified: llvm/trunk/lib/Target/CellSPU/SPU.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPU.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPU.h (original) +++ llvm/trunk/lib/Target/CellSPU/SPU.h Mon Jan 5 11:59:02 2009 @@ -16,7 +16,6 @@ #define LLVM_TARGET_IBMCELLSPU_H #include "llvm/Support/DataTypes.h" -#include namespace llvm { class SPUTargetMachine; Modified: llvm/trunk/lib/Target/IA64/IA64.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/IA64/IA64.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/IA64/IA64.h (original) +++ llvm/trunk/lib/Target/IA64/IA64.h Mon Jan 5 11:59:02 2009 @@ -14,8 +14,6 @@ #ifndef TARGET_IA64_H #define TARGET_IA64_H -#include - namespace llvm { class IA64TargetMachine; Modified: llvm/trunk/lib/Target/IA64/IA64InstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/IA64/IA64InstrInfo.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/IA64/IA64InstrInfo.cpp (original) +++ llvm/trunk/lib/Target/IA64/IA64InstrInfo.cpp Mon Jan 5 11:59:02 2009 @@ -15,6 +15,7 @@ #include "IA64.h" #include "IA64InstrBuilder.h" #include "llvm/CodeGen/MachineInstrBuilder.h" +#include "llvm/ADT/SmallVector.h" #include "IA64GenInstrInfo.inc" using namespace llvm; Modified: llvm/trunk/lib/Target/MSIL/MSILWriter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSIL/MSILWriter.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/MSIL/MSILWriter.h (original) +++ llvm/trunk/lib/Target/MSIL/MSILWriter.h Mon Jan 5 11:59:02 2009 @@ -27,7 +27,6 @@ #include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetMachineRegistry.h" #include "llvm/Support/Mangler.h" -#include #include using namespace llvm; Modified: llvm/trunk/lib/Target/Mips/Mips.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/Mips.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/Mips/Mips.h (original) +++ llvm/trunk/lib/Target/Mips/Mips.h Mon Jan 5 11:59:02 2009 @@ -15,8 +15,6 @@ #ifndef TARGET_MIPS_H #define TARGET_MIPS_H -#include - namespace llvm { class MipsTargetMachine; class FunctionPass; Modified: llvm/trunk/lib/Target/Mips/MipsMachineFunction.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsMachineFunction.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/Mips/MipsMachineFunction.h (original) +++ llvm/trunk/lib/Target/Mips/MipsMachineFunction.h Mon Jan 5 11:59:02 2009 @@ -14,6 +14,7 @@ #ifndef MIPS_MACHINE_FUNCTION_INFO_H #define MIPS_MACHINE_FUNCTION_INFO_H +#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/VectorExtras.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFrameInfo.h" Modified: llvm/trunk/lib/Target/PIC16/PIC16.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/PIC16/PIC16.h (original) +++ llvm/trunk/lib/Target/PIC16/PIC16.h Mon Jan 5 11:59:02 2009 @@ -15,8 +15,6 @@ #ifndef LLVM_TARGET_PIC16_H #define LLVM_TARGET_PIC16_H -#include - namespace llvm { class PIC16TargetMachine; class FunctionPass; Modified: llvm/trunk/lib/Target/PowerPC/PPC.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPC.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/PowerPC/PPC.h (original) +++ llvm/trunk/lib/Target/PowerPC/PPC.h Mon Jan 5 11:59:02 2009 @@ -15,9 +15,6 @@ #ifndef LLVM_TARGET_POWERPC_H #define LLVM_TARGET_POWERPC_H -#include - - // GCC #defines PPC on Linux but we use it as our namespace name #undef PPC Modified: llvm/trunk/lib/Target/PowerPC/PPCSubtarget.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCSubtarget.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/PowerPC/PPCSubtarget.cpp (original) +++ llvm/trunk/lib/Target/PowerPC/PPCSubtarget.cpp Mon Jan 5 11:59:02 2009 @@ -16,6 +16,7 @@ #include "llvm/Module.h" #include "llvm/Target/TargetMachine.h" #include "PPCGenSubtarget.inc" +#include using namespace llvm; #if defined(__APPLE__) Modified: llvm/trunk/lib/Target/Sparc/Sparc.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/Sparc.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/Sparc/Sparc.h (original) +++ llvm/trunk/lib/Target/Sparc/Sparc.h Mon Jan 5 11:59:02 2009 @@ -15,7 +15,6 @@ #ifndef TARGET_SPARC_H #define TARGET_SPARC_H -#include #include namespace llvm { Modified: llvm/trunk/lib/Target/Sparc/SparcInstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcInstrInfo.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/Sparc/SparcInstrInfo.cpp (original) +++ llvm/trunk/lib/Target/Sparc/SparcInstrInfo.cpp Mon Jan 5 11:59:02 2009 @@ -15,6 +15,7 @@ #include "SparcSubtarget.h" #include "Sparc.h" #include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/SmallVector.h" #include "llvm/CodeGen/MachineInstrBuilder.h" #include "SparcGenInstrInfo.inc" using namespace llvm; Modified: llvm/trunk/lib/Target/X86/X86.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86.h (original) +++ llvm/trunk/lib/Target/X86/X86.h Mon Jan 5 11:59:02 2009 @@ -15,8 +15,6 @@ #ifndef TARGET_X86_H #define TARGET_X86_H -#include - namespace llvm { class X86TargetMachine; Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Mon Jan 5 11:59:02 2009 @@ -18,6 +18,7 @@ #include "X86MachineFunctionInfo.h" #include "X86Subtarget.h" #include "X86TargetMachine.h" +#include "llvm/DerivedTypes.h" #include "llvm/ADT/STLExtras.h" #include "llvm/CodeGen/MachineConstantPool.h" #include "llvm/CodeGen/MachineFrameInfo.h" @@ -1913,7 +1914,7 @@ } static MachineInstr *FuseTwoAddrInst(MachineFunction &MF, unsigned Opcode, - const SmallVector &MOs, + const SmallVectorImpl &MOs, MachineInstr *MI, const TargetInstrInfo &TII) { // Create the base instruction with the memory operand as the first part. MachineInstr *NewMI = MF.CreateMachineInstr(TII.get(Opcode), true); @@ -1939,7 +1940,7 @@ static MachineInstr *FuseInst(MachineFunction &MF, unsigned Opcode, unsigned OpNo, - const SmallVector &MOs, + const SmallVectorImpl &MOs, MachineInstr *MI, const TargetInstrInfo &TII) { MachineInstr *NewMI = MF.CreateMachineInstr(TII.get(Opcode), true); MachineInstrBuilder MIB(NewMI); @@ -1961,7 +1962,7 @@ } static MachineInstr *MakeM0Inst(const TargetInstrInfo &TII, unsigned Opcode, - const SmallVector &MOs, + const SmallVectorImpl &MOs, MachineInstr *MI) { MachineFunction &MF = *MI->getParent()->getParent(); MachineInstrBuilder MIB = BuildMI(MF, TII.get(Opcode)); @@ -1977,7 +1978,7 @@ MachineInstr* X86InstrInfo::foldMemoryOperandImpl(MachineFunction &MF, MachineInstr *MI, unsigned i, - const SmallVector &MOs) const{ + const SmallVectorImpl &MOs) const{ const DenseMap *OpcodeTablePtr = NULL; bool isTwoAddrFold = false; unsigned NumOps = MI->getDesc().getNumOperands(); Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86InstrInfo.h (original) +++ llvm/trunk/lib/Target/X86/X86InstrInfo.h Mon Jan 5 11:59:02 2009 @@ -17,7 +17,7 @@ #include "llvm/Target/TargetInstrInfo.h" #include "X86.h" #include "X86RegisterInfo.h" -#include "llvm/ADT/IndexedMap.h" +#include "llvm/ADT/DenseMap.h" #include "llvm/Target/TargetRegisterInfo.h" namespace llvm { @@ -447,7 +447,7 @@ MachineInstr* foldMemoryOperandImpl(MachineFunction &MF, MachineInstr* MI, unsigned OpNum, - const SmallVector &MOs) const; + const SmallVectorImpl &MOs) const; }; } // End llvm namespace Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86RegisterInfo.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86RegisterInfo.h (original) +++ llvm/trunk/lib/Target/X86/X86RegisterInfo.h Mon Jan 5 11:59:02 2009 @@ -14,8 +14,6 @@ #ifndef X86REGISTERINFO_H #define X86REGISTERINFO_H -#include "llvm/ADT/DenseMap.h" -#include "llvm/ADT/SmallVector.h" #include "llvm/Target/TargetRegisterInfo.h" #include "X86GenRegisterInfo.h.inc" Modified: llvm/trunk/lib/Target/X86/X86Subtarget.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.h?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86Subtarget.h (original) +++ llvm/trunk/lib/Target/X86/X86Subtarget.h Mon Jan 5 11:59:02 2009 @@ -15,7 +15,6 @@ #define X86SUBTARGET_H #include "llvm/Target/TargetSubtarget.h" - #include namespace llvm { Modified: llvm/trunk/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp (original) +++ llvm/trunk/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp Mon Jan 5 11:59:02 2009 @@ -20,7 +20,6 @@ #include "llvm/Function.h" #include "llvm/Instructions.h" #include "llvm/Type.h" -#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringExtras.h" using namespace llvm; Modified: llvm/trunk/lib/VMCore/Function.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Function.cpp?rev=61715&r1=61714&r2=61715&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Function.cpp (original) +++ llvm/trunk/lib/VMCore/Function.cpp Mon Jan 5 11:59:02 2009 @@ -18,7 +18,6 @@ #include "llvm/Support/LeakDetector.h" #include "llvm/Support/StringPool.h" #include "SymbolTableListTraitsImpl.h" -#include "llvm/ADT/BitVector.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/StringExtras.h" using namespace llvm; From gohman at apple.com Mon Jan 5 12:00:18 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 05 Jan 2009 18:00:18 -0000 Subject: [llvm-commits] [test-suite] r61716 - in /test-suite/trunk/MultiSource/Benchmarks/ASC_Sequoia: AMGmk/ CrystalMk/ IRSmk/ Message-ID: <200901051800.n05I0Id2030489@zion.cs.uiuc.edu> Author: djg Date: Mon Jan 5 12:00:18 2009 New Revision: 61716 URL: http://llvm.org/viewvc/llvm-project?rev=61716&view=rev Log: Add svn:ignore properties for Output directories. Modified: test-suite/trunk/MultiSource/Benchmarks/ASC_Sequoia/AMGmk/ (props changed) test-suite/trunk/MultiSource/Benchmarks/ASC_Sequoia/CrystalMk/ (props changed) test-suite/trunk/MultiSource/Benchmarks/ASC_Sequoia/IRSmk/ (props changed) Propchange: test-suite/trunk/MultiSource/Benchmarks/ASC_Sequoia/AMGmk/ ------------------------------------------------------------------------------ --- svn:ignore (added) +++ svn:ignore Mon Jan 5 12:00:18 2009 @@ -0,0 +1 @@ +Output Propchange: test-suite/trunk/MultiSource/Benchmarks/ASC_Sequoia/CrystalMk/ ------------------------------------------------------------------------------ --- svn:ignore (added) +++ svn:ignore Mon Jan 5 12:00:18 2009 @@ -0,0 +1 @@ +Output Propchange: test-suite/trunk/MultiSource/Benchmarks/ASC_Sequoia/IRSmk/ ------------------------------------------------------------------------------ --- svn:ignore (added) +++ svn:ignore Mon Jan 5 12:00:18 2009 @@ -0,0 +1 @@ +Output From gohman at apple.com Mon Jan 5 12:02:31 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 05 Jan 2009 18:02:31 -0000 Subject: [llvm-commits] [test-suite] r61717 - /test-suite/trunk/SingleSource/UnitTests/Threads/tls.c Message-ID: <200901051802.n05I2VCj030578@zion.cs.uiuc.edu> Author: djg Date: Mon Jan 5 12:02:30 2009 New Revision: 61717 URL: http://llvm.org/viewvc/llvm-project?rev=61717&view=rev Log: Fix an int* being used as a void**, which is dubious on LP64 targets. Modified: test-suite/trunk/SingleSource/UnitTests/Threads/tls.c Modified: test-suite/trunk/SingleSource/UnitTests/Threads/tls.c URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/SingleSource/UnitTests/Threads/tls.c?rev=61717&r1=61716&r2=61717&view=diff ============================================================================== --- test-suite/trunk/SingleSource/UnitTests/Threads/tls.c (original) +++ test-suite/trunk/SingleSource/UnitTests/Threads/tls.c Mon Jan 5 12:02:30 2009 @@ -1,20 +1,21 @@ #include #include +#include void *f(void *a){ - static __thread int i = 1; + static __thread intptr_t i = 1; i++; return (void *)i; } int main() { pthread_t t; - int ret; + intptr_t ret; pthread_create(&t, NULL, f, NULL); pthread_join(t, (void **) &ret); - printf("Thread 1: %d\n",ret); + printf("Thread 1: %" PRIdPTR "\n",ret); pthread_create(&t, NULL, f, NULL); pthread_join(t, (void **) &ret); - printf("Thread 2: %d\n",ret); + printf("Thread 2: %" PRIdPTR "\n",ret); return 0; } From dpatel at apple.com Mon Jan 5 12:06:22 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 05 Jan 2009 18:06:22 -0000 Subject: [llvm-commits] [llvm] r61718 - /llvm/trunk/include/llvm/Analysis/DebugInfo.h Message-ID: <200901051806.n05I6MEJ030701@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jan 5 12:06:21 2009 New Revision: 61718 URL: http://llvm.org/viewvc/llvm-project?rev=61718&view=rev Log: Now, getTag() is used by DwarfWriter. Modified: llvm/trunk/include/llvm/Analysis/DebugInfo.h Modified: llvm/trunk/include/llvm/Analysis/DebugInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DebugInfo.h?rev=61718&r1=61717&r2=61718&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/DebugInfo.h (original) +++ llvm/trunk/include/llvm/Analysis/DebugInfo.h Mon Jan 5 12:06:21 2009 @@ -48,9 +48,6 @@ /// not, the debug info is corrupt and we ignore it. DIDescriptor(GlobalVariable *GV, unsigned RequiredTag); - unsigned getTag() const { - return getUnsignedField(0) & ~VersionMask; - } unsigned getVersion() const { return getUnsignedField(0) & VersionMask; } @@ -76,6 +73,10 @@ bool isNull() const { return GV == 0; } GlobalVariable *getGV() const { return GV; } + + unsigned getTag() const { + return getUnsignedField(0) & ~VersionMask; + } }; /// DIAnchor - A wrapper for various anchor descriptors. From sabre at nondot.org Mon Jan 5 12:12:22 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 18:12:22 -0000 Subject: [llvm-commits] [llvm] r61719 - /llvm/trunk/lib/AsmParser/LLParser.cpp Message-ID: <200901051812.n05ICMlC030921@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 12:12:21 2009 New Revision: 61719 URL: http://llvm.org/viewvc/llvm-project?rev=61719&view=rev Log: allow opaque undefs. This resolves PR3282 and fixes test/Assembler/2005-05-05-OpaqueUndefValues.ll Modified: llvm/trunk/lib/AsmParser/LLParser.cpp Modified: llvm/trunk/lib/AsmParser/LLParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61719&r1=61718&r2=61719&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.cpp (original) +++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jan 5 12:12:21 2009 @@ -1913,7 +1913,8 @@ return false; case ValID::t_Undef: // FIXME: LabelTy should not be a first-class type. - if (!Ty->isFirstClassType() || Ty == Type::LabelTy) + if ((!Ty->isFirstClassType() || Ty == Type::LabelTy) && + !isa(Ty)) return Error(ID.Loc, "invalid type for undef constant"); V = UndefValue::get(Ty); return false; From sabre at nondot.org Mon Jan 5 12:19:47 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 18:19:47 -0000 Subject: [llvm-commits] [llvm] r61720 - /llvm/trunk/lib/AsmParser/LLParser.cpp Message-ID: <200901051819.n05IJlC9031158@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 12:19:46 2009 New Revision: 61720 URL: http://llvm.org/viewvc/llvm-project?rev=61720&view=rev Log: reject PR3281:crash09.ll with this diagnostic: llvm-as: crash09.ll:3:1: self referential type is invalid type %0 ^ Modified: llvm/trunk/lib/AsmParser/LLParser.cpp Modified: llvm/trunk/lib/AsmParser/LLParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61720&r1=61719&r2=61720&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.cpp (original) +++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jan 5 12:19:46 2009 @@ -238,6 +238,9 @@ std::map >::iterator FI = ForwardRefTypeIDs.find(TypeID); if (FI != ForwardRefTypeIDs.end()) { + if (FI->second.first.get() == Ty) + return Error(TypeLoc, "self referential type is invalid"); + cast(FI->second.first.get())->refineAbstractTypeTo(Ty); Ty = FI->second.first.get(); ForwardRefTypeIDs.erase(FI); @@ -275,6 +278,9 @@ std::map >::iterator FI = ForwardRefTypes.find(Name); if (FI != ForwardRefTypes.end()) { + if (FI->second.first.get() == Ty) + return Error(NameLoc, "self referential type is invalid"); + cast(FI->second.first.get())->refineAbstractTypeTo(Ty); Ty = FI->second.first.get(); ForwardRefTypes.erase(FI); From sabre at nondot.org Mon Jan 5 12:24:24 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 18:24:24 -0000 Subject: [llvm-commits] [llvm] r61721 - /llvm/trunk/lib/AsmParser/LLParser.cpp Message-ID: <200901051824.n05IOOwt031322@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 12:24:23 2009 New Revision: 61721 URL: http://llvm.org/viewvc/llvm-project?rev=61721&view=rev Log: reject PR3281:crash10.ll with: llvm-as: crash10.ll:3:35: floating point constant does not have type 'ppc_fp128' "dumy" = fcmp ult ppc_fp128 "j",9209.4 ^ Modified: llvm/trunk/lib/AsmParser/LLParser.cpp Modified: llvm/trunk/lib/AsmParser/LLParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61721&r1=61720&r2=61721&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.cpp (original) +++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jan 5 12:24:23 2009 @@ -1911,6 +1911,11 @@ &Ignored); } V = ConstantFP::get(ID.APFloatVal); + + if (V->getType() != Ty) + return Error(ID.Loc, "floating point constant does not have type '" + + Ty->getDescription() + "'"); + return false; case ValID::t_Null: if (!isa(Ty)) From sabre at nondot.org Mon Jan 5 12:27:50 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 18:27:50 -0000 Subject: [llvm-commits] [llvm] r61722 - /llvm/trunk/lib/AsmParser/LLParser.cpp Message-ID: <200901051827.n05IRoDt031434@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 12:27:50 2009 New Revision: 61722 URL: http://llvm.org/viewvc/llvm-project?rev=61722&view=rev Log: reject PR3281:crash11.ll with: llvm-as: crash11.ll:2:27: function may not return return opaque type "xw" = tail call opaque @608(label %31) ^ Modified: llvm/trunk/lib/AsmParser/LLParser.cpp Modified: llvm/trunk/lib/AsmParser/LLParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61722&r1=61721&r2=61722&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.cpp (original) +++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jan 5 12:27:50 2009 @@ -602,11 +602,17 @@ // Otherwise, create a new forward reference for this value and remember it. GlobalValue *FwdVal; - if (const FunctionType *FT = dyn_cast(PTy->getElementType())) + if (const FunctionType *FT = dyn_cast(PTy->getElementType())) { + // Function types can return opaque but functions can't. + if (isa(FT->getReturnType())) { + Error(Loc, "function may not return return opaque type"); + return 0; + } FwdVal = Function::Create(FT, GlobalValue::ExternalWeakLinkage, "", M); - else + } else { FwdVal = new GlobalVariable(PTy->getElementType(), false, GlobalValue::ExternalWeakLinkage, 0, "", M); + } ForwardRefValIDs[ID] = std::make_pair(FwdVal, Loc); return FwdVal; From resistor at mac.com Mon Jan 5 12:32:26 2009 From: resistor at mac.com (Owen Anderson) Date: Mon, 05 Jan 2009 18:32:26 -0000 Subject: [llvm-commits] [llvm] r61723 - /llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp Message-ID: <200901051832.n05IWQrT031610@zion.cs.uiuc.edu> Author: resistor Date: Mon Jan 5 12:32:26 2009 New Revision: 61723 URL: http://llvm.org/viewvc/llvm-project?rev=61723&view=rev Log: Get rid of sentinel insertion in interval reconstruction. It just masked the problem, rather than fixing it. The problem has now been fixed the right way. Modified: llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp Modified: llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp?rev=61723&r1=61722&r2=61723&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp (original) +++ llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp Mon Jan 5 12:32:26 2009 @@ -605,11 +605,6 @@ else if (!intrablock && LiveOut.count(MBB)) return LiveOut[MBB]; - // Insert a sentinel into the map (which also acts as the DFS stack) so that - // we won't get stuck in infinite recursion when processing a loop. - if (!intrablock) - LiveOut[MBB] = 0; - typedef DenseMap > RegMap; // Check if our block contains any uses or defs. From dpatel at apple.com Mon Jan 5 12:33:01 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 05 Jan 2009 18:33:01 -0000 Subject: [llvm-commits] [llvm] r61724 - in /llvm/trunk: include/llvm/Analysis/DebugInfo.h lib/Analysis/DebugInfo.cpp lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901051833.n05IX1nT031640@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jan 5 12:33:01 2009 New Revision: 61724 URL: http://llvm.org/viewvc/llvm-project?rev=61724&view=rev Log: Construct array/vector type DIEs using DebugInfo. Modified: llvm/trunk/include/llvm/Analysis/DebugInfo.h llvm/trunk/lib/Analysis/DebugInfo.cpp llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/include/llvm/Analysis/DebugInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DebugInfo.h?rev=61724&r1=61723&r2=61724&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/DebugInfo.h (original) +++ llvm/trunk/include/llvm/Analysis/DebugInfo.h Mon Jan 5 12:33:01 2009 @@ -86,6 +86,15 @@ unsigned getAnchorTag() const { return getUnsignedField(1); } }; + + /// DISubrange - This is used to represent ranges, for array bounds. + class DISubrange : public DIDescriptor { + public: + explicit DISubrange(GlobalVariable *GV = 0); + + int64_t getLo() const { return (int64_t)getUInt64Field(1); } + int64_t getHi() const { return (int64_t)getUInt64Field(2); } + }; /// DIArray - This descriptor holds an array of descriptors. class DIArray : public DIDescriptor { @@ -93,7 +102,9 @@ explicit DIArray(GlobalVariable *GV = 0) : DIDescriptor(GV) {} unsigned getNumElements() const; - DIDescriptor getElement(unsigned Idx) const; + DISubrange getElement(unsigned Idx) const { + return getFieldAs(Idx); + } }; /// DICompileUnit - A wrapper for a compile unit. @@ -118,15 +129,6 @@ uint64_t getLanguage() const { return getUInt64Field(2); } }; - /// DISubrange - This is used to represent ranges, for array bounds. - class DISubrange : public DIDescriptor { - public: - explicit DISubrange(GlobalVariable *GV = 0); - - int64_t getLo() const { return (int64_t)getUInt64Field(1); } - int64_t getHi() const { return (int64_t)getUInt64Field(2); } - }; - /// DIType - This is a wrapper for a type. /// FIXME: Types should be factored much better so that CV qualifiers and /// others do not require a huge and empty descriptor full of zeros. Modified: llvm/trunk/lib/Analysis/DebugInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/DebugInfo.cpp?rev=61724&r1=61723&r2=61724&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/DebugInfo.cpp (original) +++ llvm/trunk/lib/Analysis/DebugInfo.cpp Mon Jan 5 12:33:01 2009 @@ -174,7 +174,12 @@ GV = 0; } - +unsigned DIArray::getNumElements() const { + assert (GV && "Invalid DIArray"); + Constant *C = GV->getInitializer(); + assert (C && "Invalid DIArray initializer"); + return C->getNumOperands(); +} //===----------------------------------------------------------------------===// // DIFactory: Basic Helpers Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61724&r1=61723&r2=61724&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Jan 5 12:33:01 2009 @@ -1512,6 +1512,7 @@ AddUInt(&Buffer, DW_AT_byte_size, 0, Size); } + /// ConstructType - Construct derived type die from DIDerivedType. void ConstructType(CompileUnit *DW_Unit, DIE &Buffer, DIDerivedType *DTy) { @@ -1540,6 +1541,45 @@ // FIXME - Enable this. AddSourceLine(&Buffer, *DTy); } + // ConstructSubrangeDIE - Construct subrange DIE from DISubrange. + void ConstructSubrangeDIE (DIE &Buffer, DISubrange *SR, DIE *IndexTy) { + int64_t L = SR->getLo(); + int64_t H = SR->getHi(); + DIE *DW_Subrange = new DIE(DW_TAG_subrange_type); + if (L != H) { + AddDIEntry(DW_Subrange, DW_AT_type, DW_FORM_ref4, IndexTy); + if (L) + AddSInt(DW_Subrange, DW_AT_lower_bound, 0, L); + AddSInt(DW_Subrange, DW_AT_upper_bound, 0, H); + } + Buffer.AddChild(DW_Subrange); + } + + /// ConstructArrayTypeDIE - Construct array type DIE from DICompositeType. + void ConstructArrayTypeDIE(CompileUnit *DW_Unit, DIE &Buffer, + DICompositeType *CTy) { + Buffer.setTag(DW_TAG_array_type); + if (CTy->getTag() == DW_TAG_vector_type) + AddUInt(&Buffer, DW_AT_GNU_vector, DW_FORM_flag, 1); + + DIArray Elements = CTy->getTypeArray(); + // FIXME - Enable this. + // AddType(&Buffer, CTy->getTypeDerivedFrom(), DW_Unit); + + // Construct an anonymous type for index type. + DIE IdxBuffer(DW_TAG_base_type); + AddUInt(&IdxBuffer, DW_AT_byte_size, 0, sizeof(int32_t)); + AddUInt(&IdxBuffer, DW_AT_encoding, DW_FORM_data1, DW_ATE_signed); + DIE *IndexTy = DW_Unit->AddDie(IdxBuffer); + + // Add subranges to array type. + for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) { + DISubrange Element = Elements.getElement(i); + ConstructSubrangeDIE(Buffer, &Element, IndexTy); + } + } + + /// ConstructType - Adds all the required attributes to the type. /// void ConstructType(DIE &Buffer, TypeDesc *TyDesc, CompileUnit *Unit) { From sabre at nondot.org Mon Jan 5 12:34:07 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 18:34:07 -0000 Subject: [llvm-commits] [llvm] r61725 - in /llvm/trunk/lib/AsmParser: LLParser.cpp LLParser.h Message-ID: <200901051834.n05IY7YU031695@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 12:34:07 2009 New Revision: 61725 URL: http://llvm.org/viewvc/llvm-project?rev=61725&view=rev Log: Reject PR3281:accepted03.ll with: llvm-as: accepted03.ll:1:35: invalid unresolved type up reference declare void @r({ \7, opaque, \10 } %su) ^ Modified: llvm/trunk/lib/AsmParser/LLParser.cpp llvm/trunk/lib/AsmParser/LLParser.h Modified: llvm/trunk/lib/AsmParser/LLParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61725&r1=61724&r2=61725&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.cpp (original) +++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jan 5 12:34:07 2009 @@ -1075,15 +1075,17 @@ -/// ParseArgumentList +/// ParseArgumentList - Parse the argument list for a function type or function +/// prototype. If 'inType' is true then we are parsing a FunctionType. /// ::= '(' ArgTypeListI ')' /// ArgTypeListI /// ::= /*empty*/ /// ::= '...' /// ::= ArgTypeList ',' '...' /// ::= ArgType (',' ArgType)* +/// bool LLParser::ParseArgumentList(std::vector &ArgList, - bool &isVarArg) { + bool &isVarArg, bool inType) { isVarArg = false; assert(Lex.getKind() == lltok::lparen); Lex.Lex(); // eat the (. @@ -1099,7 +1101,10 @@ unsigned Attrs; std::string Name; - if (ParseTypeRec(ArgTy) || + // If we're parsing a type, use ParseTypeRec, because we allow recursive + // types (such as a function returning a pointer to itself). If parsing a + // function prototype, we require fully resolved types. + if ((inType ? ParseTypeRec(ArgTy) : ParseType(ArgTy)) || ParseOptionalAttrs(Attrs, 0)) return true; if (Lex.getKind() == lltok::LocalVar || @@ -1154,7 +1159,7 @@ std::vector ArgList; bool isVarArg; unsigned Attrs; - if (ParseArgumentList(ArgList, isVarArg) || + if (ParseArgumentList(ArgList, isVarArg, true) || // FIXME: Allow, but ignore attributes on function types! // FIXME: Remove in LLVM 3.0 ParseOptionalAttrs(Attrs, 2)) @@ -2087,7 +2092,7 @@ unsigned Alignment; std::string GC; - if (ParseArgumentList(ArgList, isVarArg) || + if (ParseArgumentList(ArgList, isVarArg, false) || ParseOptionalAttrs(FuncAttrs, 2) || (EatIfPresent(lltok::kw_section) && ParseStringConstant(Section)) || Modified: llvm/trunk/lib/AsmParser/LLParser.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.h?rev=61725&r1=61724&r2=61725&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.h (original) +++ llvm/trunk/lib/AsmParser/LLParser.h Mon Jan 5 12:34:07 2009 @@ -232,7 +232,7 @@ : Loc(L), Type(Ty), Attrs(Attr), Name(N) {} }; bool ParseArgumentList(std::vector &ArgList, - bool &isVarArg); + bool &isVarArg, bool inType); bool ParseFunctionHeader(Function *&Fn, bool isDefine); bool ParseFunctionBody(Function &Fn); bool ParseBasicBlock(PerFunctionState &PFS); From dpatel at apple.com Mon Jan 5 12:38:38 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 05 Jan 2009 18:38:38 -0000 Subject: [llvm-commits] [llvm] r61726 - in /llvm/trunk: include/llvm/Analysis/DebugInfo.h lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901051838.n05Icdsd031829@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jan 5 12:38:38 2009 New Revision: 61726 URL: http://llvm.org/viewvc/llvm-project?rev=61726&view=rev Log: Construct enumerator DIE using DebugInfo. Modified: llvm/trunk/include/llvm/Analysis/DebugInfo.h llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/include/llvm/Analysis/DebugInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DebugInfo.h?rev=61726&r1=61725&r2=61726&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/DebugInfo.h (original) +++ llvm/trunk/include/llvm/Analysis/DebugInfo.h Mon Jan 5 12:38:38 2009 @@ -126,7 +126,7 @@ explicit DIEnumerator(GlobalVariable *GV = 0); std::string getName() const { return getStringField(1); } - uint64_t getLanguage() const { return getUInt64Field(2); } + uint64_t getEnumValue() const { return getUInt64Field(2); } }; /// DIType - This is a wrapper for a type. Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61726&r1=61725&r2=61726&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Jan 5 12:38:38 2009 @@ -1579,6 +1579,17 @@ } } + /// ConstructEnumTypeDIE - Construct enum type DIE from + /// DIEnumerator. + void ConstructEnumType(CompileUnit *DW_Unit, + DIE &Buffer, DIEnumerator *ETy) { + + DIE *Enumerator = new DIE(DW_TAG_enumerator); + AddString(Enumerator, DW_AT_name, DW_FORM_string, ETy->getName()); + int64_t Value = ETy->getEnumValue(); + AddSInt(Enumerator, DW_AT_const_value, DW_FORM_sdata, Value); + Buffer.AddChild(Enumerator); + } /// ConstructType - Adds all the required attributes to the type. /// From snaroff at apple.com Mon Jan 5 12:48:49 2009 From: snaroff at apple.com (Steve Naroff) Date: Mon, 05 Jan 2009 18:48:49 -0000 Subject: [llvm-commits] [llvm] r61727 - /llvm/trunk/lib/AsmParser/LLParser.cpp Message-ID: <200901051848.n05Imn1V032437@zion.cs.uiuc.edu> Author: snaroff Date: Mon Jan 5 12:48:47 2009 New Revision: 61727 URL: http://llvm.org/viewvc/llvm-project?rev=61727&view=rev Log: Remove redundant ValID::ValID:: scoping (doesn't compile on Windows). Modified: llvm/trunk/lib/AsmParser/LLParser.cpp Modified: llvm/trunk/lib/AsmParser/LLParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61727&r1=61726&r2=61727&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.cpp (original) +++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jan 5 12:48:47 2009 @@ -1999,7 +1999,7 @@ V = PFS.GetVal(ID.UIntVal, Ty, ID.Loc); else if (ID.Kind == ValID::t_LocalName) V = PFS.GetVal(ID.StrVal, Ty, ID.Loc); - else if (ID.Kind == ValID::ValID::t_InlineAsm) { + else if (ID.Kind == ValID::t_InlineAsm) { const PointerType *PTy = dyn_cast(Ty); const FunctionType *FTy = PTy ? dyn_cast(PTy->getElementType()) : 0; From sabre at nondot.org Mon Jan 5 12:56:52 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 18:56:52 -0000 Subject: [llvm-commits] [llvm] r61728 - /llvm/trunk/lib/AsmParser/LLParser.cpp Message-ID: <200901051856.n05Iuqa1032688@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 12:56:52 2009 New Revision: 61728 URL: http://llvm.org/viewvc/llvm-project?rev=61728&view=rev Log: fix wordo Modified: llvm/trunk/lib/AsmParser/LLParser.cpp Modified: llvm/trunk/lib/AsmParser/LLParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61728&r1=61727&r2=61728&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.cpp (original) +++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jan 5 12:56:52 2009 @@ -605,7 +605,7 @@ if (const FunctionType *FT = dyn_cast(PTy->getElementType())) { // Function types can return opaque but functions can't. if (isa(FT->getReturnType())) { - Error(Loc, "function may not return return opaque type"); + Error(Loc, "function may not return opaque type"); return 0; } FwdVal = Function::Create(FT, GlobalValue::ExternalWeakLinkage, "", M); From dpatel at apple.com Mon Jan 5 12:59:44 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 05 Jan 2009 18:59:44 -0000 Subject: [llvm-commits] [llvm] r61729 - in /llvm/trunk: include/llvm/Analysis/DebugInfo.h lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901051859.n05IxjEE000399@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jan 5 12:59:44 2009 New Revision: 61729 URL: http://llvm.org/viewvc/llvm-project?rev=61729&view=rev Log: Construct stuct field DIEs. Modified: llvm/trunk/include/llvm/Analysis/DebugInfo.h llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/include/llvm/Analysis/DebugInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DebugInfo.h?rev=61729&r1=61728&r2=61729&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/DebugInfo.h (original) +++ llvm/trunk/include/llvm/Analysis/DebugInfo.h Mon Jan 5 12:59:44 2009 @@ -228,6 +228,7 @@ explicit DISubprogram(GlobalVariable *GV = 0); std::string getFilename() const { return getStringField(11); } std::string getDirectory() const { return getStringField(12); } + DICompositeType getType() const { return getFieldAs(8); } }; /// DIGlobalVariable - This is a wrapper for a global variable. Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61729&r1=61728&r2=61729&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Jan 5 12:59:44 2009 @@ -1591,6 +1591,84 @@ Buffer.AddChild(Enumerator); } + /// ConstructFieldTypeDIE - Construct variable DIE for a struct field. + void ConstructFieldTypeDIE(CompileUnit *DW_Unit, + DIE &Buffer, DIGlobalVariable *V) { + + DIE *VariableDie = new DIE(DW_TAG_variable); + const std::string &LinkageName = V->getLinkageName(); + if (!LinkageName.empty()) + AddString(VariableDie, DW_AT_MIPS_linkage_name, DW_FORM_string, + LinkageName); + // FIXME - Enable this. AddSourceLine(VariableDie, V); + // FIXME - Enable this. AddType(VariableDie, V->getType(), DW_Unit); + if (!V->isLocalToUnit()) + AddUInt(VariableDie, DW_AT_external, DW_FORM_flag, 1); + AddUInt(VariableDie, DW_AT_declaration, DW_FORM_flag, 1); + Buffer.AddChild(VariableDie); + } + + /// ConstructFieldTypeDIE - Construct subprogram DIE for a struct field. + void ConstructFieldTypeDIE(CompileUnit *DW_Unit, + DIE &Buffer, DISubprogram *SP, + bool IsConstructor = false) { + DIE *Method = new DIE(DW_TAG_subprogram); + AddString(Method, DW_AT_name, DW_FORM_string, SP->getName()); + const std::string &LinkageName = SP->getLinkageName(); + if (!LinkageName.empty()) + AddString(Method, DW_AT_MIPS_linkage_name, DW_FORM_string, LinkageName); + // FIXME - Enable this. AddSourceLine(Method, SP); + + DICompositeType MTy = SP->getType(); + DIArray Args = MTy.getTypeArray(); + + // Add Return Type. + // FIXME - Enable this. if (!IsConstructor) + // Fixme - Enable this. AddType(Method, Args.getElement(0), DW_Unit); + + // Add arguments. + for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) { + DIE *Arg = new DIE(DW_TAG_formal_parameter); + // FIXME - Enable this. AddType(Arg, Args.getElement(i), DW_Unit); + AddUInt(Arg, DW_AT_artificial, DW_FORM_flag, 1); // ??? + Method->AddChild(Arg); + } + + if (!SP->isLocalToUnit()) + AddUInt(Method, DW_AT_external, DW_FORM_flag, 1); + Buffer.AddChild(Method); + } + + /// COnstructFieldTypeDIE - Construct derived type DIE for a struct field. + void ConstructFieldTypeDIE(CompileUnit *DW_Unit, DIE &Buffer, + DIDerivedType *DTy) { + unsigned Tag = DTy->getTag(); + DIE *MemberDie = new DIE(Tag); + if (!DTy->getName().empty()) + AddString(MemberDie, DW_AT_name, DW_FORM_string, DTy->getName()); + // FIXME - Enable this. AddSourceLine(MemberDie, DTy); + + DIType FromTy = DTy->getTypeDerivedFrom(); + // FIXME - Enable this. AddType(MemberDie, FromTy, DW_Unit); + + uint64_t Size = DTy->getSizeInBits(); + uint64_t Offset = DTy->getOffsetInBits(); + + // FIXME Handle bitfields + + // Add size. + AddUInt(MemberDie, DW_AT_bit_size, 0, Size); + // Add computation for offset. + DIEBlock *Block = new DIEBlock(); + AddUInt(Block, 0, DW_FORM_data1, DW_OP_plus_uconst); + AddUInt(Block, 0, DW_FORM_udata, Offset >> 3); + AddBlock(MemberDie, DW_AT_data_member_location, 0, Block); + + // FIXME Handle DW_AT_accessibility. + + Buffer.AddChild(MemberDie); + } + /// ConstructType - Adds all the required attributes to the type. /// void ConstructType(DIE &Buffer, TypeDesc *TyDesc, CompileUnit *Unit) { From sabre at nondot.org Mon Jan 5 13:01:33 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 19:01:33 -0000 Subject: [llvm-commits] [llvm] r61730 - /llvm/trunk/tools/llvm-ld/llvm-ld.cpp Message-ID: <200901051901.n05J1Xbf000504@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 13:01:32 2009 New Revision: 61730 URL: http://llvm.org/viewvc/llvm-project?rev=61730&view=rev Log: make llvm-ld smart enough to link against native libraries that are not in system library directories by checking -L paths as well. Patch by Axel Naumann! Modified: llvm/trunk/tools/llvm-ld/llvm-ld.cpp Modified: llvm/trunk/tools/llvm-ld/llvm-ld.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-ld/llvm-ld.cpp?rev=61730&r1=61729&r2=61730&view=diff ============================================================================== --- llvm/trunk/tools/llvm-ld/llvm-ld.cpp (original) +++ llvm/trunk/tools/llvm-ld/llvm-ld.cpp Mon Jan 5 13:01:32 2009 @@ -36,6 +36,7 @@ #include "llvm/Support/Streams.h" #include "llvm/Support/SystemUtils.h" #include "llvm/System/Signals.h" +#include "llvm/Config/config.h" #include #include #include @@ -437,8 +438,23 @@ // on the command line, so that we don't have to do this manually! for (std::vector::iterator i = Libraries.begin(), e = Libraries.end(); i != e; ++i) { - sys::Path FullLibraryPath = sys::Path::FindLibrary(*i); - if (!FullLibraryPath.isEmpty() && FullLibraryPath.isDynamicLibrary()) + // try explicit -L arguments first: + sys::Path FullLibraryPath; + for (cl::list::const_iterator P = LibPaths.begin(), + E = LibPaths.end(); P != E; ++P) { + FullLibraryPath = *P; + FullLibraryPath.appendComponent("lib" + *i); + FullLibraryPath.appendSuffix(&(LTDL_SHLIB_EXT[1])); + if (!FullLibraryPath.isEmpty()) { + if (!FullLibraryPath.isDynamicLibrary()) { + // Not a native shared library; mark as invalid + FullLibraryPath = sys::Path(); + } else break; + } + } + if (FullLibraryPath.isEmpty()) + FullLibraryPath = sys::Path::FindLibrary(*i); + if (!FullLibraryPath.isEmpty()) Out2 << " -load=" << FullLibraryPath.toString() << " \\\n"; } Out2 << " $0.bc ${1+\"$@\"}\n"; From clattner at apple.com Mon Jan 5 13:02:06 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 5 Jan 2009 11:02:06 -0800 Subject: [llvm-commits] [PATCH] llvm-ld EmitShellScript and -L In-Reply-To: <4961C5AC.5060206@cern.ch> References: <49491B52.40606@cern.ch> <399F6527-D045-4257-BEB7-4A599A12943A@apple.com> <4961C5AC.5060206@cern.ch> Message-ID: On Jan 5, 2009, at 12:32 AM, Axel Naumann wrote: > Weird - my Sent folder shows it as outlined. Here's a gz of the diff; > thunderbird: inline _that_! > > Thanks for considering the patch! Thanks Axel! Applied: http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20090105/071784.html -Chris From clattner at apple.com Mon Jan 5 13:06:50 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 5 Jan 2009 11:06:50 -0800 Subject: [llvm-commits] [PATCH] Teach IRBuilder about simplifying BinOp(Value, Constant) In-Reply-To: <4961D1F3.7080009@gmail.com> References: <4957DC66.1010406@gmail.com> <518486B1-E8A2-47A7-938A-D5F7BDE60313@apple.com> <49590C30.2060900@gmail.com> <495A4772.3090109@gmail.com> <91BFA91F-0E58-4987-A0CD-2CFE1291C79A@apple.com> <495FD902.1090003@gmail.com> <58154023-DA2F-4FD6-A9E9-0A1BCC759865@apple.com> <49609594.1040405@gmail.com> <264FC7CF-5D46-4DA8-8CE3-007E4F6D6591@apple.com> <49612701.1020300@gmail.com> <608B031F-57E5-4FF4-9CFC-A7A07F1D73C5@apple.com> <4961C148.1020408@gmail.com> <4961D1F3.7080009@gmail.com> Message-ID: <635485AA-76C3-4C09-9CF6-3C260E5C6870@apple.com> On Jan 5, 2009, at 1:25 AM, T?r?k Edwin wrote: > I added back the Constant* functions in ConstantFolder/TargetFolder, > since llvm-gcc is using them (called with constant* params, expecting > constant* return). Hi Edwin, Please don't put the large SimplifyBinOp/findBinOp functions inline into ConstantFolder.h. Also, I think it is somewhat strange to call ConstantFolder::CreateNot with non-constant operands. Should this functionality be moved out of the ConstantFolder class into some new place? finally, please follow the standard convention of putting the '{' on the previous line instead of on a new one. -Chris From dpatel at apple.com Mon Jan 5 13:07:53 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 05 Jan 2009 19:07:53 -0000 Subject: [llvm-commits] [llvm] r61731 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901051907.n05J7rET000754@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jan 5 13:07:53 2009 New Revision: 61731 URL: http://llvm.org/viewvc/llvm-project?rev=61731&view=rev Log: s/ConstructType/ConstructTypeDIE/g Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61731&r1=61730&r2=61731&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Jan 5 13:07:53 2009 @@ -1497,9 +1497,9 @@ } } - /// ConstructType - Construct basic type die from DIBasicType. - void ConstructType(CompileUnit *DW_Unit, DIE &Buffer, - DIBasicType *BTy) { + /// ConstructTypeDIE - Construct basic type die from DIBasicType. + void ConstructTypeDIE(CompileUnit *DW_Unit, DIE &Buffer, + DIBasicType *BTy) { // Get core information. const std::string &Name = BTy->getName(); @@ -1512,9 +1512,9 @@ AddUInt(&Buffer, DW_AT_byte_size, 0, Size); } - /// ConstructType - Construct derived type die from DIDerivedType. - void ConstructType(CompileUnit *DW_Unit, DIE &Buffer, - DIDerivedType *DTy) { + /// ConstructTypeDIE - Construct derived type die from DIDerivedType. + void ConstructTypeDIE(CompileUnit *DW_Unit, DIE &Buffer, + DIDerivedType *DTy) { // Get core information. const std::string &Name = DTy->getName(); From edwintorok at gmail.com Mon Jan 5 13:27:07 2009 From: edwintorok at gmail.com (=?ISO-8859-1?Q?T=F6r=F6k_Edwin?=) Date: Mon, 05 Jan 2009 21:27:07 +0200 Subject: [llvm-commits] [PATCH] Teach IRBuilder about simplifying BinOp(Value, Constant) In-Reply-To: <635485AA-76C3-4C09-9CF6-3C260E5C6870@apple.com> References: <4957DC66.1010406@gmail.com> <518486B1-E8A2-47A7-938A-D5F7BDE60313@apple.com> <49590C30.2060900@gmail.com> <495A4772.3090109@gmail.com> <91BFA91F-0E58-4987-A0CD-2CFE1291C79A@apple.com> <495FD902.1090003@gmail.com> <58154023-DA2F-4FD6-A9E9-0A1BCC759865@apple.com> <49609594.1040405@gmail.com> <264FC7CF-5D46-4DA8-8CE3-007E4F6D6591@apple.com> <49612701.1020300@gmail.com> <608B031F-57E5-4FF4-9CFC-A7A07F1D73C5@apple.com> <4961C148.1020408@gmail.com> <4961D1F3.7080009@gmail.com> <635485AA-76C3-4C09-9CF6-3C260E5C6870@apple.com> Message-ID: <49625F0B.5010408@gmail.com> On 2009-01-05 21:06, Chris Lattner wrote: > On Jan 5, 2009, at 1:25 AM, T?r?k Edwin wrote: > >> I added back the Constant* functions in ConstantFolder/TargetFolder, >> since llvm-gcc is using them (called with constant* params, expecting >> constant* return). >> > > Hi Edwin, > > Please don't put the large SimplifyBinOp/findBinOp functions inline > into ConstantFolder.h. > Hi Chris, What .cpp file should it live in? I can't find anything suitable in lib/Support/, and I wouldn't put it into Analysis, since IRBuilder is in Support. Should I create a ConstantFolder.cpp? > Also, I think it is somewhat strange to call ConstantFolder::CreateNot > with non-constant operands. Should this functionality be moved out of > the ConstantFolder class into some new place? > At the moment it is called from IRBuilder.h only, I could put the CreateNot/CreateNeg functionality into IRBuilder, and remove those CreateNot/CreateNeg taking non-constant operands from the folder, since all it does is call findBinOp if reuseOps is true. > finally, please follow the standard convention of putting the '{' on > the previous line instead of on a new one. > I'll fix, findBinOp/getReuse has it in the wrong place. It seems I am automatically putting the { after the function prototype without even noticing. Best regards, --Edwin From gohman at apple.com Mon Jan 5 13:31:29 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 05 Jan 2009 19:31:29 -0000 Subject: [llvm-commits] [llvm] r61732 - /llvm/trunk/utils/TableGen/DAGISelEmitter.cpp Message-ID: <200901051931.n05JVTtu001444@zion.cs.uiuc.edu> Author: djg Date: Mon Jan 5 13:31:28 2009 New Revision: 61732 URL: http://llvm.org/viewvc/llvm-project?rev=61732&view=rev Log: Delete an unused variable and simplify the code. Modified: llvm/trunk/utils/TableGen/DAGISelEmitter.cpp Modified: llvm/trunk/utils/TableGen/DAGISelEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/DAGISelEmitter.cpp?rev=61732&r1=61731&r2=61732&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/DAGISelEmitter.cpp (original) +++ llvm/trunk/utils/TableGen/DAGISelEmitter.cpp Mon Jan 5 13:31:28 2009 @@ -1183,16 +1183,13 @@ ");"); } - if (FoldedChains.size() > 0) { - std::string Code; - for (unsigned j = 0, e = FoldedChains.size(); j < e; j++) { - ReplaceFroms.push_back("SDValue(" + - FoldedChains[j].first + ".getNode(), " + - utostr(FoldedChains[j].second) + - ")"); - ReplaceTos.push_back("SDValue(ResNode, " + - utostr(NumResults+NumDstRegs) + ")"); - } + for (unsigned j = 0, e = FoldedChains.size(); j < e; j++) { + ReplaceFroms.push_back("SDValue(" + + FoldedChains[j].first + ".getNode(), " + + utostr(FoldedChains[j].second) + + ")"); + ReplaceTos.push_back("SDValue(ResNode, " + + utostr(NumResults+NumDstRegs) + ")"); } if (NodeHasOutFlag) { From gohman at apple.com Mon Jan 5 13:40:39 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 05 Jan 2009 19:40:39 -0000 Subject: [llvm-commits] [llvm] r61733 - in /llvm/trunk: include/llvm/CodeGen/SelectionDAGNodes.h include/llvm/Target/TargetLowering.h lib/CodeGen/SelectionDAG/TargetLowering.cpp Message-ID: <200901051940.n05Jed02001755@zion.cs.uiuc.edu> Author: djg Date: Mon Jan 5 13:40:39 2009 New Revision: 61733 URL: http://llvm.org/viewvc/llvm-project?rev=61733&view=rev Log: TargetLowering.h #includes SelectionDAGNodes.h, so it doesn't need its own OpActionsCapacity magic number; it can just use ISD::BUILTIN_OP_END, as long as it takes care to round up when needed. Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h llvm/trunk/include/llvm/Target/TargetLowering.h llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h?rev=61733&r1=61732&r2=61733&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h (original) +++ llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h Mon Jan 5 13:40:39 2009 @@ -56,8 +56,6 @@ /// ISD namespace - This namespace contains an enum which represents all of the /// SelectionDAG node types and value types. /// -/// If you add new elements here you should increase OpActionsCapacity in -/// TargetLowering.h by the number of new elements. namespace ISD { //===--------------------------------------------------------------------===// Modified: llvm/trunk/include/llvm/Target/TargetLowering.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLowering.h?rev=61733&r1=61732&r2=61733&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetLowering.h (original) +++ llvm/trunk/include/llvm/Target/TargetLowering.h Mon Jan 5 13:40:39 2009 @@ -1489,15 +1489,12 @@ /// by the system, this holds the same type (e.g. i32 -> i32). MVT TransformToType[MVT::LAST_VALUETYPE]; - // Defines the capacity of the TargetLowering::OpActions table - static const int OpActionsCapacity = 184; - /// OpActions - For each operation and each value type, keep a LegalizeAction /// that indicates how instruction selection should deal with the operation. /// Most operations are Legal (aka, supported natively by the target), but /// operations that are not should be described. Note that operations on /// non-legal value types are not described here. - uint64_t OpActions[OpActionsCapacity]; + uint64_t OpActions[ISD::BUILTIN_OP_END]; /// LoadExtActions - For each load of load extension type and each value type, /// keep a LegalizeAction that indicates how instruction selection should deal @@ -1535,7 +1532,7 @@ /// like PerformDAGCombine callbacks for by calling setTargetDAGCombine(), /// which sets a bit in this array. unsigned char - TargetDAGCombineArray[OpActionsCapacity/(sizeof(unsigned char)*8)]; + TargetDAGCombineArray[(ISD::BUILTIN_OP_END+CHAR_BIT-1)/CHAR_BIT]; /// PromoteToType - For operations that must be promoted to a specific type, /// this holds the destination type. This map should be sparse, so don't hold Modified: llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp?rev=61733&r1=61732&r2=61733&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp Mon Jan 5 13:40:39 2009 @@ -398,8 +398,6 @@ TargetLowering::TargetLowering(TargetMachine &tm) : TM(tm), TD(TM.getTargetData()) { - assert(ISD::BUILTIN_OP_END <= OpActionsCapacity && - "Fixed size array in TargetLowering is not large enough!"); // All operations default to being supported. memset(OpActions, 0, sizeof(OpActions)); memset(LoadExtActions, 0, sizeof(LoadExtActions)); From gohman at apple.com Mon Jan 5 13:47:30 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 05 Jan 2009 19:47:30 -0000 Subject: [llvm-commits] [llvm] r61736 - /llvm/trunk/include/llvm/Target/TargetLowering.h Message-ID: <200901051947.n05JlUoj002010@zion.cs.uiuc.edu> Author: djg Date: Mon Jan 5 13:47:30 2009 New Revision: 61736 URL: http://llvm.org/viewvc/llvm-project?rev=61736&view=rev Log: Add , to get the definition of CHAR_BIT. This should fix build errors. Modified: llvm/trunk/include/llvm/Target/TargetLowering.h Modified: llvm/trunk/include/llvm/Target/TargetLowering.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLowering.h?rev=61736&r1=61735&r2=61736&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetLowering.h (original) +++ llvm/trunk/include/llvm/Target/TargetLowering.h Mon Jan 5 13:47:30 2009 @@ -29,6 +29,7 @@ #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallSet.h" #include "llvm/ADT/STLExtras.h" +#include #include #include From dpatel at apple.com Mon Jan 5 13:55:07 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 05 Jan 2009 19:55:07 -0000 Subject: [llvm-commits] [llvm] r61740 - in /llvm/trunk: include/llvm/Analysis/DebugInfo.h lib/Analysis/DebugInfo.cpp Message-ID: <200901051955.n05Jt7bv002291@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jan 5 13:55:07 2009 New Revision: 61740 URL: http://llvm.org/viewvc/llvm-project?rev=61740&view=rev Log: Add classof() methods so that dwarf writer can decide what DIDescriptor is in its hand. Modified: llvm/trunk/include/llvm/Analysis/DebugInfo.h llvm/trunk/lib/Analysis/DebugInfo.cpp Modified: llvm/trunk/include/llvm/Analysis/DebugInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DebugInfo.h?rev=61740&r1=61739&r2=61740&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/DebugInfo.h (original) +++ llvm/trunk/include/llvm/Analysis/DebugInfo.h Mon Jan 5 13:55:07 2009 @@ -77,6 +77,7 @@ unsigned getTag() const { return getUnsignedField(0) & ~VersionMask; } + static inline bool classof(const DIDescriptor *D) { return true; } }; /// DIAnchor - A wrapper for various anchor descriptors. @@ -94,6 +95,11 @@ int64_t getLo() const { return (int64_t)getUInt64Field(1); } int64_t getHi() const { return (int64_t)getUInt64Field(2); } + static bool isSubrange(unsigned); + static inline bool classof(const DISubrange *) { return true; } + static inline bool classof(const DIDescriptor *D) { + return isSubrange(D->getTag()); + } }; /// DIArray - This descriptor holds an array of descriptors. @@ -102,8 +108,8 @@ explicit DIArray(GlobalVariable *GV = 0) : DIDescriptor(GV) {} unsigned getNumElements() const; - DISubrange getElement(unsigned Idx) const { - return getFieldAs(Idx); + DIDescriptor getElement(unsigned Idx) const { + return getDescriptorField(Idx); } }; @@ -180,6 +186,11 @@ /// isDerivedType - Return true if the specified tag is legal for /// DIDerivedType. static bool isDerivedType(unsigned TAG); + + static inline bool classof(const DIDerivedType *) { return true; } + static inline bool classof(const DIDescriptor *D) { + return isDerivedType(D->getTag()); + } }; @@ -197,6 +208,10 @@ /// isCompositeType - Return true if the specified tag is legal for /// DICompositeType. static bool isCompositeType(unsigned TAG); + static inline bool classof(const DIDerivedType *) { return true; } + static inline bool classof(const DIDescriptor *D) { + return isCompositeType(D->getTag()); + } }; /// DIGlobal - This is a common class for global variables and subprograms. Modified: llvm/trunk/lib/Analysis/DebugInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/DebugInfo.cpp?rev=61740&r1=61739&r2=61740&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/DebugInfo.cpp (original) +++ llvm/trunk/lib/Analysis/DebugInfo.cpp Mon Jan 5 13:55:07 2009 @@ -181,6 +181,11 @@ return C->getNumOperands(); } +/// isSubrange - Return true if the specified tag is legal for DISubrange. +bool DISubrange::isSubrange(unsigned Tag) { + return Tag == dwarf::DW_TAG_subrange_type; +} + //===----------------------------------------------------------------------===// // DIFactory: Basic Helpers //===----------------------------------------------------------------------===// From dpatel at apple.com Mon Jan 5 13:55:51 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 05 Jan 2009 19:55:51 -0000 Subject: [llvm-commits] [llvm] r61741 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901051955.n05Jtp1D002318@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jan 5 13:55:51 2009 New Revision: 61741 URL: http://llvm.org/viewvc/llvm-project?rev=61741&view=rev Log: Construct composite type DIE using DebugInfo. Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61741&r1=61740&r2=61741&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Jan 5 13:55:51 2009 @@ -1541,6 +1541,84 @@ // FIXME - Enable this. AddSourceLine(&Buffer, *DTy); } + /// ConstructTypeDIE - Construct type DIE from DICompositeType. + void ConstructTypeDIE(CompileUnit *DW_Unit, DIE &Buffer, + DICompositeType *CTy) { + + // Get core information. + const std::string &Name = CTy->getName(); + uint64_t Size = CTy->getSizeInBits() >> 3; + unsigned Tag = CTy->getTag(); + switch (Tag) { + case DW_TAG_vector_type: + case DW_TAG_array_type: + ConstructArrayTypeDIE(DW_Unit, Buffer, CTy); + break; + //FIXME - Enable this. + // case DW_TAG_enumeration_type: + // DIArray Elements = CTy->getTypeArray(); + // // Add enumerators to enumeration type. + // for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) + // ConstructEnumTypeDIE(Buffer, &Elements.getElement(i)); + // break; + case DW_TAG_subroutine_type: + { + // Add prototype flag. + AddUInt(&Buffer, DW_AT_prototyped, DW_FORM_flag, 1); + DIArray Elements = CTy->getTypeArray(); + // Add return type. + // FIXME - Enable this.AddType(&Buffer, Elements.getElement(0), DW_Unit); + // Add arguments. + for (unsigned i = 1, N = Elements.getNumElements(); i < N; ++i) { + DIE *Arg = new DIE(DW_TAG_formal_parameter); + // FIXME - Enable this.AddType(Arg, Elements.getElement(i), DW_Unit); + Buffer.AddChild(Arg); + } + } + break; + case DW_TAG_structure_type: + case DW_TAG_union_type: + { + // Add elements to structure type. + DIArray Elements = CTy->getTypeArray(); + // Add elements to structure type. + for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) { + DIDescriptor Element = Elements.getElement(i); + if (DISubprogram *SP = dyn_cast(&Element)) + ConstructFieldTypeDIE(DW_Unit, Buffer, SP); + else if (DIDerivedType *DT = dyn_cast(&Element)) + ConstructFieldTypeDIE(DW_Unit, Buffer, DT); + else if (DIGlobalVariable *GV = dyn_cast(&Element)) + ConstructFieldTypeDIE(DW_Unit, Buffer, GV); + } + } + break; + default: + break; + } + + // Add name if not anonymous or intermediate type. + if (!Name.empty()) AddString(&Buffer, DW_AT_name, DW_FORM_string, Name); + + // Add size if non-zero (derived types might be zero-sized.) + if (Size) + AddUInt(&Buffer, DW_AT_byte_size, 0, Size); + else { + // Add zero size even if it is not a forward declaration. + // FIXME - Enable this. + // if (!CTy->isDefinition()) + // AddUInt(&Buffer, DW_AT_declaration, DW_FORM_flag, 1); + // else + // AddUInt(&Buffer, DW_AT_byte_size, 0, 0); + } + + // Add source line info if available and TyDesc is not a forward + // declaration. + // FIXME - Enable this. + // if (CTy->isForwardDecl()) + // AddSourceLine(&Buffer, *CTy); + } + // ConstructSubrangeDIE - Construct subrange DIE from DISubrange. void ConstructSubrangeDIE (DIE &Buffer, DISubrange *SR, DIE *IndexTy) { int64_t L = SR->getLo(); @@ -1574,15 +1652,16 @@ // Add subranges to array type. for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) { - DISubrange Element = Elements.getElement(i); - ConstructSubrangeDIE(Buffer, &Element, IndexTy); + DIDescriptor Element = Elements.getElement(i); + if (DISubrange *SR = dyn_cast(&Element)) + ConstructSubrangeDIE(Buffer, SR, IndexTy); } } /// ConstructEnumTypeDIE - Construct enum type DIE from /// DIEnumerator. - void ConstructEnumType(CompileUnit *DW_Unit, - DIE &Buffer, DIEnumerator *ETy) { + void ConstructEnumTypeDIE(CompileUnit *DW_Unit, + DIE &Buffer, DIEnumerator *ETy) { DIE *Enumerator = new DIE(DW_TAG_enumerator); AddString(Enumerator, DW_AT_name, DW_FORM_string, ETy->getName()); From baldrick at free.fr Mon Jan 5 14:37:33 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 05 Jan 2009 20:37:33 -0000 Subject: [llvm-commits] [llvm] r61742 - in /llvm/trunk: lib/Transforms/IPO/GlobalDCE.cpp test/Transforms/GlobalDCE/2009-01-05-DeadAliases.ll Message-ID: <200901052037.n05KbXOj003778@zion.cs.uiuc.edu> Author: baldrick Date: Mon Jan 5 14:37:33 2009 New Revision: 61742 URL: http://llvm.org/viewvc/llvm-project?rev=61742&view=rev Log: Delete unused global aliases with internal linkage. In fact this also deletes those with linkonce linkage, however this is currently dead because for the moment aliases aren't allowed to have this linkage type. Added: llvm/trunk/test/Transforms/GlobalDCE/2009-01-05-DeadAliases.ll Modified: llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp Modified: llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp?rev=61742&r1=61741&r2=61742&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp Mon Jan 5 14:37:33 2009 @@ -25,6 +25,7 @@ #include using namespace llvm; +STATISTIC(NumAliases, "Number of global aliases removed"); STATISTIC(NumFunctions, "Number of functions removed"); STATISTIC(NumVariables, "Number of global variables removed"); @@ -32,7 +33,7 @@ struct VISIBILITY_HIDDEN GlobalDCE : public ModulePass { static char ID; // Pass identification, replacement for typeid GlobalDCE() : ModulePass(&ID) {} - + // run - Do the GlobalDCE pass on the specified module, optionally updating // the specified callgraph to reflect the changes. // @@ -41,7 +42,7 @@ private: std::set AliveGlobals; - /// GlobalIsNeeded - the specific global value as needed, and + /// GlobalIsNeeded - mark the specific global value as needed, and /// recursively mark anything that it uses as also needed. void GlobalIsNeeded(GlobalValue *GV); void MarkUsedGlobalsAsNeeded(Constant *C); @@ -77,11 +78,12 @@ GlobalIsNeeded(I); } - for (Module::alias_iterator I = M.alias_begin(), E = M.alias_end(); I != E; ++I) { - // Aliases are always needed even if they are not used. - MarkUsedGlobalsAsNeeded(I->getAliasee()); + Changed |= RemoveUnusedGlobalValue(*I); + // Externally visible aliases are needed. + if (!I->hasInternalLinkage() && !I->hasLinkOnceLinkage()) + GlobalIsNeeded(I); } // Now that all globals which are needed are in the AliveGlobals set, we loop @@ -96,7 +98,6 @@ I->setInitializer(0); } - // The second pass drops the bodies of functions which are dead... std::vector DeadFunctions; for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) @@ -107,7 +108,7 @@ } if (!DeadFunctions.empty()) { - // Now that all interreferences have been dropped, delete the actual objects + // Now that all interferences have been dropped, delete the actual objects // themselves. for (unsigned i = 0, e = DeadFunctions.size(); i != e; ++i) { RemoveUnusedGlobalValue(*DeadFunctions[i]); @@ -126,6 +127,17 @@ Changed = true; } + // Now delete any dead aliases. + for (Module::alias_iterator I = M.alias_begin(), E = M.alias_end(); I != E;) { + Module::alias_iterator J = I++; + if (!AliveGlobals.count(J)) { + RemoveUnusedGlobalValue(*J); + M.getAliasList().erase(J); + ++NumAliases; + Changed = true; + } + } + // Make sure that all memory is released AliveGlobals.clear(); return Changed; @@ -147,7 +159,10 @@ // referenced by the initializer to the alive set. if (GV->hasInitializer()) MarkUsedGlobalsAsNeeded(GV->getInitializer()); - } else if (!isa(G)) { + } else if (GlobalAlias *GA = dyn_cast(G)) { + // The target of a global alias is needed. + MarkUsedGlobalsAsNeeded(GA->getAliasee()); + } else { // Otherwise this must be a function object. We have to scan the body of // the function looking for constants and global values which are used as // operands. Any operands of these types must be processed to ensure that Added: llvm/trunk/test/Transforms/GlobalDCE/2009-01-05-DeadAliases.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GlobalDCE/2009-01-05-DeadAliases.ll?rev=61742&view=auto ============================================================================== --- llvm/trunk/test/Transforms/GlobalDCE/2009-01-05-DeadAliases.ll (added) +++ llvm/trunk/test/Transforms/GlobalDCE/2009-01-05-DeadAliases.ll Mon Jan 5 14:37:33 2009 @@ -0,0 +1,8 @@ +; RUN: llvm-as < %s | opt -globaldce | llvm-dis | not grep @D +; RUN: llvm-as < %s | opt -globaldce | llvm-dis | grep @L | count 3 + + at A = global i32 0 + at D = alias internal i32* @A + at L1 = alias i32* @A + at L2 = alias internal i32* @L1 + at L3 = alias i32* @L2 From baldrick at free.fr Mon Jan 5 14:38:27 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 05 Jan 2009 20:38:27 -0000 Subject: [llvm-commits] [llvm] r61743 - /llvm/trunk/lib/Transforms/IPO/Internalize.cpp Message-ID: <200901052038.n05KcRIG003848@zion.cs.uiuc.edu> Author: baldrick Date: Mon Jan 5 14:38:27 2009 New Revision: 61743 URL: http://llvm.org/viewvc/llvm-project?rev=61743&view=rev Log: Remove trailing spaces. Modified: llvm/trunk/lib/Transforms/IPO/Internalize.cpp Modified: llvm/trunk/lib/Transforms/IPO/Internalize.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/Internalize.cpp?rev=61743&r1=61742&r2=61743&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/Internalize.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/Internalize.cpp Mon Jan 5 14:38:27 2009 @@ -73,7 +73,7 @@ ExternalNames.insert(APIList.begin(), APIList.end()); } -InternalizePass::InternalizePass(const std::vector&exportList) +InternalizePass::InternalizePass(const std::vector&exportList) : ModulePass(&ID), AllButMain(false){ for(std::vector::const_iterator itr = exportList.begin(); itr != exportList.end(); itr++) { @@ -85,7 +85,7 @@ // Load the APIFile... std::ifstream In(Filename); if (!In.good()) { - cerr << "WARNING: Internalize couldn't load file '" << Filename + cerr << "WARNING: Internalize couldn't load file '" << Filename << "'! Continuing as if it's empty.\n"; return; // Just continue as if the file were empty } @@ -104,7 +104,7 @@ if (ExternalNames.empty()) { // Return if we're not in 'all but main' mode and have no external api if (!AllButMain) - return false; + return false; // If no list or file of symbols was specified, check to see if there is a // "main" symbol defined in the module. If so, use it, otherwise do not // internalize the module, it must be a library or something. @@ -112,13 +112,13 @@ Function *MainFunc = M.getFunction("main"); if (MainFunc == 0 || MainFunc->isDeclaration()) return false; // No main found, must be a library... - + // Preserve main, internalize all else. ExternalNames.insert(MainFunc->getName()); } - + bool Changed = false; - + // Mark all functions not in the api as internal. for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) if (!I->isDeclaration() && // Function must be defined here @@ -131,11 +131,11 @@ ++NumFunctions; DOUT << "Internalizing func " << I->getName() << "\n"; } - + // Never internalize the llvm.used symbol. It is used to implement // attribute((used)). ExternalNames.insert("llvm.used"); - + // Never internalize anchors used by the machine module info, else the info // won't find them. (see MachineModuleInfo.) ExternalNames.insert("llvm.dbg.compile_units"); @@ -145,7 +145,7 @@ ExternalNames.insert("llvm.global_dtors"); ExternalNames.insert("llvm.noinline"); ExternalNames.insert("llvm.global.annotations"); - + // Mark all global variables with initializers that are not in the api as // internal as well. for (Module::global_iterator I = M.global_begin(), E = M.global_end(); @@ -157,7 +157,7 @@ ++NumGlobals; DOUT << "Internalized gvar " << I->getName() << "\n"; } - + return Changed; } From baldrick at free.fr Mon Jan 5 14:39:50 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 05 Jan 2009 20:39:50 -0000 Subject: [llvm-commits] [llvm] r61744 - /llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp Message-ID: <200901052039.n05KdoAV003925@zion.cs.uiuc.edu> Author: baldrick Date: Mon Jan 5 14:39:50 2009 New Revision: 61744 URL: http://llvm.org/viewvc/llvm-project?rev=61744&view=rev Log: Format more neatly. Modified: llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp Modified: llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp?rev=61744&r1=61743&r2=61744&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp Mon Jan 5 14:39:50 2009 @@ -25,7 +25,7 @@ #include using namespace llvm; -STATISTIC(NumAliases, "Number of global aliases removed"); +STATISTIC(NumAliases , "Number of global aliases removed"); STATISTIC(NumFunctions, "Number of functions removed"); STATISTIC(NumVariables, "Number of global variables removed"); From baldrick at free.fr Mon Jan 5 14:47:56 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 05 Jan 2009 20:47:56 -0000 Subject: [llvm-commits] [llvm] r61745 - /llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp Message-ID: <200901052047.n05KlusW004185@zion.cs.uiuc.edu> Author: baldrick Date: Mon Jan 5 14:47:56 2009 New Revision: 61745 URL: http://llvm.org/viewvc/llvm-project?rev=61745&view=rev Log: Not having an aliasee is a theoretical possibility. Modified: llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp Modified: llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp?rev=61745&r1=61744&r2=61745&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp Mon Jan 5 14:47:56 2009 @@ -161,7 +161,8 @@ MarkUsedGlobalsAsNeeded(GV->getInitializer()); } else if (GlobalAlias *GA = dyn_cast(G)) { // The target of a global alias is needed. - MarkUsedGlobalsAsNeeded(GA->getAliasee()); + if (Constant *Aliasee = GA->getAliasee()) + MarkUsedGlobalsAsNeeded(Aliasee); } else { // Otherwise this must be a function object. We have to scan the body of // the function looking for constants and global values which are used as From eli.friedman at gmail.com Mon Jan 5 15:01:29 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Mon, 5 Jan 2009 13:01:29 -0800 Subject: [llvm-commits] [PATCH] Teach IRBuilder about simplifying BinOp(Value, Constant) In-Reply-To: <4961D1F3.7080009@gmail.com> References: <4957DC66.1010406@gmail.com> <91BFA91F-0E58-4987-A0CD-2CFE1291C79A@apple.com> <495FD902.1090003@gmail.com> <58154023-DA2F-4FD6-A9E9-0A1BCC759865@apple.com> <49609594.1040405@gmail.com> <264FC7CF-5D46-4DA8-8CE3-007E4F6D6591@apple.com> <49612701.1020300@gmail.com> <608B031F-57E5-4FF4-9CFC-A7A07F1D73C5@apple.com> <4961C148.1020408@gmail.com> <4961D1F3.7080009@gmail.com> Message-ID: On Mon, Jan 5, 2009 at 1:25 AM, T?r?k Edwin wrote: > I added back the Constant* functions in ConstantFolder/TargetFolder, > since llvm-gcc is using them (called with constant* params, expecting > constant* return). + case Instruction::UDiv: + case Instruction::SDiv: + // udiv/sdiv 0, X -> 0 + // This also transforms udiv 0, 0 (undefined behaviour) -> 0. + if (CLHS && CLHS->isZero()) + return CLHS; + // udiv/sdiv X, 1 -> X + if (CRHS && CRHS->isOne()) + return LHS; + // Don't simplify udiv X, 0 at this point, because it could be used + // to knowingly generate a SIGFPE. + break; Go ahead and simplify udiv X, 0... we don't make any guarantees about what happens when you perform an illegal division, and half-baked attempts to preserve that behavior aren't helpful. If someone really wants a SIGFPE, they should use inline asm or something like that. Actually, you could just remove the comment, though, since it's not likely to show up in normal code. -Eli From sabre at nondot.org Mon Jan 5 15:07:34 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 21:07:34 -0000 Subject: [llvm-commits] [llvm] r61751 - /llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c Message-ID: <200901052107.n05L7YOi005064@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 15:07:34 2009 New Revision: 61751 URL: http://llvm.org/viewvc/llvm-project?rev=61751&view=rev Log: testcase for bill's patch. Added: llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c Added: llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c?rev=61751&view=auto ============================================================================== --- llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c (added) +++ llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c Mon Jan 5 15:07:34 2009 @@ -0,0 +1,26 @@ +// RUN: %llvmgcc %s -S -emit-llvm -O2 -o - | grep {call i32 .*printf.*argc} | count 3 +// rdar://5865221 + +// All of these should be inlined equivalently into a single printf call. + +static int fun(int x) { + return x+1; +} + +static int block(int x) { + return (^(int x){return x+1;})(x); +} + +static void print(int result) { + printf("%d\n", result); +} + +int main (int argc, const char * argv[]) { + int x = argc-1; + print(fun(x)); + print(block(x)); + int (^block_inline)(int) = ^(int x){return x+1;}; + print(block_inline(x)); + return 0; +} + From edwintorok at gmail.com Mon Jan 5 15:12:38 2009 From: edwintorok at gmail.com (=?ISO-8859-1?Q?T=F6r=F6k_Edwin?=) Date: Mon, 05 Jan 2009 23:12:38 +0200 Subject: [llvm-commits] [PATCH] Teach IRBuilder about simplifying BinOp(Value, Constant) In-Reply-To: References: <4957DC66.1010406@gmail.com> <91BFA91F-0E58-4987-A0CD-2CFE1291C79A@apple.com> <495FD902.1090003@gmail.com> <58154023-DA2F-4FD6-A9E9-0A1BCC759865@apple.com> <49609594.1040405@gmail.com> <264FC7CF-5D46-4DA8-8CE3-007E4F6D6591@apple.com> <49612701.1020300@gmail.com> <608B031F-57E5-4FF4-9CFC-A7A07F1D73C5@apple.com> <4961C148.1020408@gmail.com> <4961D1F3.7080009@gmail.com> Message-ID: <496277C6.1030700@gmail.com> On 2009-01-05 23:01, Eli Friedman wrote: > On Mon, Jan 5, 2009 at 1:25 AM, T?r?k Edwin wrote: > >> I added back the Constant* functions in ConstantFolder/TargetFolder, >> since llvm-gcc is using them (called with constant* params, expecting >> constant* return). >> > > + case Instruction::UDiv: > + case Instruction::SDiv: > + // udiv/sdiv 0, X -> 0 > + // This also transforms udiv 0, 0 (undefined behaviour) -> 0. > + if (CLHS && CLHS->isZero()) > + return CLHS; > + // udiv/sdiv X, 1 -> X > + if (CRHS && CRHS->isOne()) > + return LHS; > + // Don't simplify udiv X, 0 at this point, because it could be used > + // to knowingly generate a SIGFPE. > + break; > > Go ahead and simplify udiv X, 0... we don't make any guarantees about > what happens when you perform an illegal division, and half-baked > attempts to preserve that behavior aren't helpful. If someone really > wants a SIGFPE, they should use inline asm or something like that. > Actually, you could just remove the comment, though, since it's not > likely to show up in normal code. > I'll remove the comment. Best regards, --Edwin From brukman at gmail.com Mon Jan 5 15:16:25 2009 From: brukman at gmail.com (Misha Brukman) Date: Mon, 5 Jan 2009 16:16:25 -0500 Subject: [llvm-commits] [llvm] r61540 - in /llvm/trunk/utils/unittest/googletest: Makefile README.LLVM gtest-all.cc gtest-death-test.cc gtest-internal-inl.h gtest-test-part.cc gtest.cc gtest_main.cc include/gtest/internal/gtest-internal-inl.h In-Reply-To: <4962301F.2010600@cs.uiuc.edu> References: <200901010205.n0125isk030712@zion.cs.uiuc.edu> <4962301F.2010600@cs.uiuc.edu> Message-ID: 2009/1/5 John Criswell > 1) Can you move the copyright/license information to a LICENSE.TXT file > and add an entry in llvm/LICENSE.TXT? This is the established convention > for third party licenses and makes it easier to find what code has > additional licenses. It was already listed in llvm/LICENSE.TXT and referred to the file COPYING in this directory, but since you insist, I renamed it to LICENSE.TXT . > 2) The code doesn't compile on my Linux machine. I get the following > errors with g++ 4.1.2.: > > > /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-port.h:327:21: > warning: tr1/tuple: No such file or directory > > /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-param-util-generated.h:2670: > error: 'tr1' is not a member of 'std' > > /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-param-util-generated.h:2670: > error: 'tr1' is not a member of 'std' > > /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-param-util-generated.h:2670: > error: template argument 1 is invalid > > Do you know what the problem might be? Hmm, this might mean we need to run gtest's configure script to let it define the pre-processor tokens appropriately. I'll look into this. FWIW, unittests compile and run fine under gcc 4.1.1, but I don't have gcc 4.1.2 installed locally. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090105/86421ebc/attachment.html From evan.cheng at apple.com Mon Jan 5 15:17:27 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Mon, 05 Jan 2009 21:17:27 -0000 Subject: [llvm-commits] [llvm] r61752 - in /llvm/trunk: lib/Transforms/Scalar/CodeGenPrepare.cpp test/CodeGen/X86/remat-mov0.ll Message-ID: <200901052117.n05LHRoN005377@zion.cs.uiuc.edu> Author: evancheng Date: Mon Jan 5 15:17:27 2009 New Revision: 61752 URL: http://llvm.org/viewvc/llvm-project?rev=61752&view=rev Log: Find loop back edges only after empty blocks are eliminated. Modified: llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp llvm/trunk/test/CodeGen/X86/remat-mov0.ll Modified: llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp?rev=61752&r1=61751&r2=61752&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp Mon Jan 5 15:17:27 2009 @@ -125,12 +125,13 @@ bool CodeGenPrepare::runOnFunction(Function &F) { bool EverMadeChange = false; - findLoopBackEdges(F); - // First pass, eliminate blocks that contain only PHI nodes and an // unconditional branch. EverMadeChange |= EliminateMostlyEmptyBlocks(F); + // Now find loop back edges. + findLoopBackEdges(F); + bool MadeChange = true; while (MadeChange) { MadeChange = false; Modified: llvm/trunk/test/CodeGen/X86/remat-mov0.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/remat-mov0.ll?rev=61752&r1=61751&r2=61752&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/remat-mov0.ll (original) +++ llvm/trunk/test/CodeGen/X86/remat-mov0.ll Mon Jan 5 15:17:27 2009 @@ -1,4 +1,4 @@ -; RUN: llvm-as < %s | llc -march=x86 | grep xor | count 1 +; RUN: llvm-as < %s | llc -march=x86 | grep xor | count 2 %struct.FILE = type { i8*, i32, i32, i16, i16, %struct.__sbuf, i32, i8*, i32 (i8*)*, i32 (i8*, i8*, i32)*, i64 (i8*, i64, i32)*, i32 (i8*, i8*, i32)*, %struct.__sbuf, %struct.__sFILEX*, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 } %struct.ImgT = type { i8, i8*, i8*, %struct.FILE*, i32, i32, i32, i32, i8*, double*, float*, float*, float*, i32*, double, double, i32*, double*, i32*, i32* } From isanbard at gmail.com Mon Jan 5 15:19:16 2009 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 5 Jan 2009 13:19:16 -0800 Subject: [llvm-commits] [llvm] r61751 - /llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c In-Reply-To: <200901052107.n05L7YOi005064@zion.cs.uiuc.edu> References: <200901052107.n05L7YOi005064@zion.cs.uiuc.edu> Message-ID: <16e5fdf90901051319v34170cb5o477cc9ba062b574@mail.gmail.com> Thx! -bw On Mon, Jan 5, 2009 at 1:07 PM, Chris Lattner wrote: > Author: lattner > Date: Mon Jan 5 15:07:34 2009 > New Revision: 61751 > > URL: http://llvm.org/viewvc/llvm-project?rev=61751&view=rev > Log: > testcase for bill's patch. > > > Added: > llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c > > Added: llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c?rev=61751&view=auto > > ============================================================================== > --- llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c (added) > +++ llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c Mon Jan 5 15:07:34 2009 > @@ -0,0 +1,26 @@ > +// RUN: %llvmgcc %s -S -emit-llvm -O2 -o - | grep {call i32 .*printf.*argc} | count 3 > +// rdar://5865221 > + > +// All of these should be inlined equivalently into a single printf call. > + > +static int fun(int x) { > + return x+1; > +} > + > +static int block(int x) { > + return (^(int x){return x+1;})(x); > +} > + > +static void print(int result) { > + printf("%d\n", result); > +} > + > +int main (int argc, const char * argv[]) { > + int x = argc-1; > + print(fun(x)); > + print(block(x)); > + int (^block_inline)(int) = ^(int x){return x+1;}; > + print(block_inline(x)); > + return 0; > +} > + > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > From baldrick at free.fr Mon Jan 5 15:19:57 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 05 Jan 2009 21:19:57 -0000 Subject: [llvm-commits] [llvm] r61753 - /llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Message-ID: <200901052119.n05LJvVW005471@zion.cs.uiuc.edu> Author: baldrick Date: Mon Jan 5 15:19:53 2009 New Revision: 61753 URL: http://llvm.org/viewvc/llvm-project?rev=61753&view=rev Log: When checking if an Argument escapes, check if the argument is marked nocapture - no need to analyze the argument if the answer is already known! Modified: llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Modified: llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp?rev=61753&r1=61752&r2=61753&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp (original) +++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Mon Jan 5 15:19:53 2009 @@ -35,10 +35,11 @@ // Useful predicates //===----------------------------------------------------------------------===// -// Determine if an AllocationInst instruction escapes from the function it is -// contained in. If it does not escape, there is no way for another function to -// mod/ref it. We do this by looking at its uses and determining if the uses -// can escape (recursively). +// Determine if a value escapes from the function it is contained in (being +// returned by the function does not count as escaping here). If a value local +// to the function does not escape, there is no way another function can mod/ref +// it. We do this by looking at its uses and determining if they can escape +// (recursively). static bool AddressMightEscape(const Value *V) { for (Value::use_const_iterator UI = V->use_begin(), E = V->use_end(); UI != E; ++UI) { @@ -161,12 +162,17 @@ // If this is a local allocation, check to see if it escapes. if (isa(V) || isNoAliasCall(V)) return !AddressMightEscape(V); - + // If this is an argument that corresponds to a byval or noalias argument, - // it can't escape either. + // then it has not escaped before entering the function. Check if it escapes + // inside the function. if (const Argument *A = dyn_cast(V)) - if (A->hasByValAttr() || A->hasNoAliasAttr()) + if (A->hasByValAttr() || A->hasNoAliasAttr()) { + // Don't bother analyzing arguments already known not to escape. + if (A->hasNoCaptureAttr()) + return true; return !AddressMightEscape(V); + } return false; } From echeng at apple.com Mon Jan 5 15:24:22 2009 From: echeng at apple.com (Evan Cheng) Date: Mon, 5 Jan 2009 13:24:22 -0800 Subject: [llvm-commits] [llvm] r61714 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp In-Reply-To: <200901051757.n05Hvlnq030294@zion.cs.uiuc.edu> References: <200901051757.n05Hvlnq030294@zion.cs.uiuc.edu> Message-ID: <93322C51-21ED-4DDF-B897-189F35822C5C@apple.com> On Jan 5, 2009, at 9:57 AM, Devang Patel wrote: > Author: dpatel > Date: Mon Jan 5 11:57:47 2009 > New Revision: 61714 > > URL: http://llvm.org/viewvc/llvm-project?rev=61714&view=rev > Log: > Construct basic and derived type DIEs using DebugInfo. > > Modified: > llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp > > Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61714&r1=61713&r2=61714&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) > +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Jan 5 > 11:57:47 2009 > @@ -23,6 +23,7 @@ > #include "llvm/CodeGen/MachineModuleInfo.h" > #include "llvm/CodeGen/MachineFrameInfo.h" > #include "llvm/CodeGen/MachineLocation.h" > +#include "llvm/Analysis/DebugInfo.h" > #include "llvm/Support/Debug.h" > #include "llvm/Support/Dwarf.h" > #include "llvm/Support/CommandLine.h" > @@ -1496,6 +1497,49 @@ > } > } > > + /// ConstructType - Construct basic type die from DIBasicType. > + void ConstructType(CompileUnit *DW_Unit, DIE &Buffer, > + DIBasicType *BTy) { > + > + // Get core information. > + const std::string &Name = BTy->getName(); This makes a copy of the name string. Is it possible to change AddString, DIEString, etc. to take const char* instead? Then you can use getNameStart() instead. Evan > > + Buffer.setTag(DW_TAG_base_type); > + AddUInt(&Buffer, DW_AT_encoding, DW_FORM_data1, BTy- > >getEncoding()); > + // Add name if not anonymous or intermediate type. > + if (!Name.empty()) > + AddString(&Buffer, DW_AT_name, DW_FORM_string, Name); > + uint64_t Size = BTy->getSizeInBits() >> 3; > + AddUInt(&Buffer, DW_AT_byte_size, 0, Size); > + } > + > + void ConstructType(CompileUnit *DW_Unit, DIE &Buffer, > + DIDerivedType *DTy) { > + > + // Get core information. > + const std::string &Name = DTy->getName(); > + uint64_t Size = DTy->getSizeInBits() >> 3; > + unsigned Tag = DTy->getTag(); > + // FIXME - Workaround for templates. > + if (Tag == DW_TAG_inheritance) Tag = DW_TAG_reference_type; > + > + Buffer.setTag(Tag); > + // Map to main type, void will not have a type. > + DIType FromTy = DTy->getTypeDerivedFrom(); > + // FIXME - Enable this. AddType(&Buffer, FromTy, DW_Unit); > + > + // Add name if not anonymous or intermediate type. > + if (!Name.empty()) AddString(&Buffer, DW_AT_name, > DW_FORM_string, Name); > + > + // Add size if non-zero (derived types might be zero-sized.) > + if (Size) > + AddUInt(&Buffer, DW_AT_byte_size, 0, Size); > + > + // Add source line info if available and TyDesc is not a forward > + // declaration. > + // FIXME - Enable this. if (!DTy->isForwardDecl()) > + // FIXME - Enable this. AddSourceLine(&Buffer, *DTy); > + } > + > /// ConstructType - Adds all the required attributes to the type. > /// > void ConstructType(DIE &Buffer, TypeDesc *TyDesc, CompileUnit > *Unit) { > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From baldrick at free.fr Mon Jan 5 15:24:45 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 05 Jan 2009 21:24:45 -0000 Subject: [llvm-commits] [llvm] r61754 - in /llvm/trunk: lib/Transforms/IPO/Internalize.cpp test/Transforms/Internalize/2009-01-05-InternalizeAliases.ll Message-ID: <200901052124.n05LOjsa005704@zion.cs.uiuc.edu> Author: baldrick Date: Mon Jan 5 15:24:45 2009 New Revision: 61754 URL: http://llvm.org/viewvc/llvm-project?rev=61754&view=rev Log: Teach the internalize pass to also internalize global aliases. Added: llvm/trunk/test/Transforms/Internalize/2009-01-05-InternalizeAliases.ll Modified: llvm/trunk/lib/Transforms/IPO/Internalize.cpp Modified: llvm/trunk/lib/Transforms/IPO/Internalize.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/Internalize.cpp?rev=61754&r1=61753&r2=61754&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/Internalize.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/Internalize.cpp Mon Jan 5 15:24:45 2009 @@ -26,6 +26,7 @@ #include using namespace llvm; +STATISTIC(NumAliases , "Number of aliases internalized"); STATISTIC(NumFunctions, "Number of functions internalized"); STATISTIC(NumGlobals , "Number of global vars internalized"); @@ -158,6 +159,17 @@ DOUT << "Internalized gvar " << I->getName() << "\n"; } + // Mark all aliases that are not in the api as internal as well. + for (Module::alias_iterator I = M.alias_begin(), E = M.alias_end(); + I != E; ++I) + if (!I->isDeclaration() && !I->hasInternalLinkage() && + !ExternalNames.count(I->getName())) { + I->setLinkage(GlobalValue::InternalLinkage); + Changed = true; + ++NumAliases; + DOUT << "Internalized alias " << I->getName() << "\n"; + } + return Changed; } Added: llvm/trunk/test/Transforms/Internalize/2009-01-05-InternalizeAliases.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Internalize/2009-01-05-InternalizeAliases.ll?rev=61754&view=auto ============================================================================== --- llvm/trunk/test/Transforms/Internalize/2009-01-05-InternalizeAliases.ll (added) +++ llvm/trunk/test/Transforms/Internalize/2009-01-05-InternalizeAliases.ll Mon Jan 5 15:24:45 2009 @@ -0,0 +1,10 @@ +; RUN: llvm-as < %s | opt -internalize | llvm-dis | grep internal | count 3 + + at A = global i32 0 + at B = alias i32* @A + at C = alias i32* @B + +define i32 @main() { + %tmp = load i32* @C + ret i32 %tmp +} From isanbard at gmail.com Mon Jan 5 15:27:59 2009 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 05 Jan 2009 21:27:59 -0000 Subject: [llvm-commits] [llvm] r61755 - /llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c Message-ID: <200901052127.n05LRxve005813@zion.cs.uiuc.edu> Author: void Date: Mon Jan 5 15:27:59 2009 New Revision: 61755 URL: http://llvm.org/viewvc/llvm-project?rev=61755&view=rev Log: Strength test. Modified: llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c Modified: llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c?rev=61755&r1=61754&r2=61755&view=diff ============================================================================== --- llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c (original) +++ llvm/trunk/test/FrontendC/2009-01-05-BlockInlining.c Mon Jan 5 15:27:59 2009 @@ -1,4 +1,6 @@ -// RUN: %llvmgcc %s -S -emit-llvm -O2 -o - | grep {call i32 .*printf.*argc} | count 3 +// RUN: %llvmgcc %s -S -emit-llvm -O2 -o %t.s +// RUN: grep {call i32 .*printf.*argc} %t.s | count 3 +// RUN: not grep __block_holder_tmp %t.s // rdar://5865221 // All of these should be inlined equivalently into a single printf call. From baldrick at free.fr Mon Jan 5 15:33:06 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 05 Jan 2009 21:33:06 -0000 Subject: [llvm-commits] [llvm] r61756 - /llvm/trunk/include/llvm/Target/TargetLowering.h Message-ID: <200901052133.n05LX6Vk006013@zion.cs.uiuc.edu> Author: baldrick Date: Mon Jan 5 15:33:06 2009 New Revision: 61756 URL: http://llvm.org/viewvc/llvm-project?rev=61756&view=rev Log: Add a note about passing MVT::Other to getSetCCResultType. Modified: llvm/trunk/include/llvm/Target/TargetLowering.h Modified: llvm/trunk/include/llvm/Target/TargetLowering.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLowering.h?rev=61756&r1=61755&r2=61756&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetLowering.h (original) +++ llvm/trunk/include/llvm/Target/TargetLowering.h Mon Jan 5 15:33:06 2009 @@ -116,8 +116,11 @@ /// srl/add/sra. bool isPow2DivCheap() const { return Pow2DivIsCheap; } - /// getSetCCResultType - Return the ValueType of the result of setcc - /// operations. + /// getSetCCResultType - Return the ValueType of the result of SETCC + /// operations. Also used to obtain the target's preferred type for + /// the condition operand of SELECT and BRCOND nodes. In the case of + /// BRCOND the argument passed is MVT::Other since there are no other + /// operands to get a type hint from. virtual MVT getSetCCResultType(MVT VT) const; /// getBooleanContents - For targets without i1 registers, this gives the From dpatel at apple.com Mon Jan 5 15:40:10 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 5 Jan 2009 13:40:10 -0800 Subject: [llvm-commits] [llvm] r61714 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp In-Reply-To: <93322C51-21ED-4DDF-B897-189F35822C5C@apple.com> References: <200901051757.n05Hvlnq030294@zion.cs.uiuc.edu> <93322C51-21ED-4DDF-B897-189F35822C5C@apple.com> Message-ID: On Jan 5, 2009, at 1:24 PM, Evan Cheng wrote: >> = >> ===================================================================== >> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) >> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Jan 5 >> 11:57:47 2009 >> @@ -23,6 +23,7 @@ >> #include "llvm/CodeGen/MachineModuleInfo.h" >> #include "llvm/CodeGen/MachineFrameInfo.h" >> #include "llvm/CodeGen/MachineLocation.h" >> +#include "llvm/Analysis/DebugInfo.h" >> #include "llvm/Support/Debug.h" >> #include "llvm/Support/Dwarf.h" >> #include "llvm/Support/CommandLine.h" >> @@ -1496,6 +1497,49 @@ >> } >> } >> >> + /// ConstructType - Construct basic type die from DIBasicType. >> + void ConstructType(CompileUnit *DW_Unit, DIE &Buffer, >> + DIBasicType *BTy) { >> + >> + // Get core information. >> + const std::string &Name = BTy->getName(); > > This makes a copy of the name string. Is it possible to change > AddString, DIEString, etc. to take const char* instead? Then you can > use getNameStart() instead. AddString and DIEString takes std::string reference. However, DebugInfo::getName() extracts string value from GV on demand where there is a possibility to cache extracted strings. - Devang From criswell at cs.uiuc.edu Mon Jan 5 15:40:52 2009 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon, 5 Jan 2009 15:40:52 -0600 Subject: [llvm-commits] [llvm] r61540 - in /llvm/trunk/utils/unittest/googletest: Makefile README.LLVM gtest-all.cc gtest-death-test.cc gtest-internal-inl.h gtest-test-part.cc gtest.cc gtest_main.cc include/gtest/internal/gtest-internal-inl.h In-Reply-To: References: <200901010205.n0125isk030712@zion.cs.uiuc.edu> <4962301F.2010600@cs.uiuc.edu> Message-ID: <49627E64.2060108@cs.uiuc.edu> Misha Brukman wrote: > 2009/1/5 John Criswell > > 1) Can you move the copyright/license information to a LICENSE.TXT file > and add an entry in llvm/LICENSE.TXT? This is the established convention > for third party licenses and makes it easier to find what code has > additional licenses. > > It was already listed in llvm/LICENSE.TXT and referred to the file COPYING in this directory, but since you insist, I renamed it to LICENSE.TXT . > Sorry. I didn't notice the new text in the top level LICENSE.TXT file. Thanks for renaming the COPYING file. > 2) The code doesn't compile on my Linux machine. I get the following > errors with g++ 4.1.2.: > > /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-port.h:327:21: > warning: tr1/tuple: No such file or directory > /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-param-util-generated.h:2670: > error: 'tr1' is not a member of 'std' > /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-param-util-generated.h:2670: > error: 'tr1' is not a member of 'std' > /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-param-util-generated.h:2670: > error: template argument 1 is invalid > > Do you know what the problem might be? > > Hmm, this might mean we need to run gtest's configure script to let it define the pre-processor tokens appropriately. I'll look into this. > FWIW, unittests compile and run fine under gcc 4.1.1, but I don't have gcc 4.1.2 installed locally. > Do you still have access to our research machines? If so, you should be able to log into our newer machines (maute.cs.uiuc.edu and gravity.cs.uiuc.edu) and use /usr/bin/g++4. If you don't have access, I can talk to Vikram and see if he'd be willing to re-enable your account. (I imagine he would). That seems like less work than you doing another GCC install on your machines. -- John T. From dpatel at apple.com Mon Jan 5 15:47:58 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 05 Jan 2009 21:47:58 -0000 Subject: [llvm-commits] [llvm] r61757 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901052147.n05LlwqO006639@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jan 5 15:47:57 2009 New Revision: 61757 URL: http://llvm.org/viewvc/llvm-project?rev=61757&view=rev Log: Add type DIEs using DebugInfo. Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61757&r1=61756&r2=61757&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Jan 5 15:47:57 2009 @@ -723,10 +723,12 @@ /// DescToDieMap - Tracks the mapping of unit level debug informaton /// descriptors to debug information entries. std::map DescToDieMap; + DenseMap GVToDieMap; /// DescToDIEntryMap - Tracks the mapping of unit level debug informaton /// descriptors to debug information entries using a DIEntry proxy. std::map DescToDIEntryMap; + DenseMap GVToDIEntryMap; /// Globals - A map of globally visible named entities for this unit. /// @@ -746,7 +748,9 @@ , ID(I) , Die(D) , DescToDieMap() + , GVToDieMap() , DescToDIEntryMap() + , GVToDIEntryMap() , Globals() , DiesSet(InitDiesSetSize) , Dies() @@ -782,12 +786,18 @@ DIE *&getDieMapSlotFor(DebugInfoDesc *DID) { return DescToDieMap[DID]; } + DIE *&getDieMapSlotFor(GlobalVariable *GV) { + return GVToDieMap[GV]; + } /// getDIEntrySlotFor - Returns the debug information entry proxy slot for the /// specified debug descriptor. DIEntry *&getDIEntrySlotFor(DebugInfoDesc *DID) { return DescToDIEntryMap[DID]; } + DIEntry *&getDIEntrySlotFor(GlobalVariable *GV) { + return GVToDIEntryMap[GV]; + } /// AddDie - Adds or interns the DIE to the compile unit. /// @@ -1497,6 +1507,39 @@ } } + /// AddType - Add a new type attribute to the specified entity. + void AddType(CompileUnit *DW_Unit, DIE *Entity, DIType Ty) { + if (Ty.isNull()) { + AddBasicType(Entity, DW_Unit, "", DW_ATE_signed, sizeof(int32_t)); + return; + } + + // Check for pre-existence. + DIEntry *&Slot = DW_Unit->getDIEntrySlotFor(Ty.getGV()); + // If it exists then use the existing value. + if (Slot) { + Entity->AddValue(DW_AT_type, DW_FORM_ref4, Slot); + return; + } + + // Set up proxy. + Slot = NewDIEntry(); + + // Construct type. + DIE Buffer(DW_TAG_base_type); + if (DIBasicType *BT = dyn_cast(&Ty)) + ConstructTypeDIE(DW_Unit, Buffer, BT); + else if (DIDerivedType *DT = dyn_cast(&Ty)) + ConstructTypeDIE(DW_Unit, Buffer, DT); + else if (DICompositeType *CT = dyn_cast(&Ty)) + ConstructTypeDIE(DW_Unit, Buffer, CT); + + // Add debug information entry to entity and unit. + DIE *Die = DW_Unit->AddDie(Buffer); + SetDIEntry(Slot, Die); + Entity->AddValue(DW_AT_type, DW_FORM_ref4, Slot); + } + /// ConstructTypeDIE - Construct basic type die from DIBasicType. void ConstructTypeDIE(CompileUnit *DW_Unit, DIE &Buffer, DIBasicType *BTy) { @@ -1526,7 +1569,7 @@ Buffer.setTag(Tag); // Map to main type, void will not have a type. DIType FromTy = DTy->getTypeDerivedFrom(); - // FIXME - Enable this. AddType(&Buffer, FromTy, DW_Unit); + AddType(DW_Unit, &Buffer, FromTy); // Add name if not anonymous or intermediate type. if (!Name.empty()) AddString(&Buffer, DW_AT_name, DW_FORM_string, Name); @@ -1567,11 +1610,25 @@ AddUInt(&Buffer, DW_AT_prototyped, DW_FORM_flag, 1); DIArray Elements = CTy->getTypeArray(); // Add return type. - // FIXME - Enable this.AddType(&Buffer, Elements.getElement(0), DW_Unit); + DIDescriptor RTy = Elements.getElement(0); + if (DIBasicType *BT = dyn_cast(&RTy)) + AddType(DW_Unit, &Buffer, *BT); + else if (DIDerivedType *DT = dyn_cast(&RTy)) + AddType(DW_Unit, &Buffer, *DT); + else if (DICompositeType *CT = dyn_cast(&RTy)) + AddType(DW_Unit, &Buffer, *CT); + + //AddType(DW_Unit, &Buffer, Elements.getElement(0)); // Add arguments. for (unsigned i = 1, N = Elements.getNumElements(); i < N; ++i) { DIE *Arg = new DIE(DW_TAG_formal_parameter); - // FIXME - Enable this.AddType(Arg, Elements.getElement(i), DW_Unit); + DIDescriptor Ty = Elements.getElement(i); + if (DIBasicType *BT = dyn_cast(&Ty)) + AddType(DW_Unit, &Buffer, *BT); + else if (DIDerivedType *DT = dyn_cast(&Ty)) + AddType(DW_Unit, &Buffer, *DT); + else if (DICompositeType *CT = dyn_cast(&Ty)) + AddType(DW_Unit, &Buffer, *CT); Buffer.AddChild(Arg); } } @@ -1642,7 +1699,7 @@ DIArray Elements = CTy->getTypeArray(); // FIXME - Enable this. - // AddType(&Buffer, CTy->getTypeDerivedFrom(), DW_Unit); + AddType(DW_Unit, &Buffer, CTy->getTypeDerivedFrom()); // Construct an anonymous type for index type. DIE IdxBuffer(DW_TAG_base_type); @@ -1680,7 +1737,7 @@ AddString(VariableDie, DW_AT_MIPS_linkage_name, DW_FORM_string, LinkageName); // FIXME - Enable this. AddSourceLine(VariableDie, V); - // FIXME - Enable this. AddType(VariableDie, V->getType(), DW_Unit); + AddType(DW_Unit, VariableDie, V->getType()); if (!V->isLocalToUnit()) AddUInt(VariableDie, DW_AT_external, DW_FORM_flag, 1); AddUInt(VariableDie, DW_AT_declaration, DW_FORM_flag, 1); @@ -1702,13 +1759,26 @@ DIArray Args = MTy.getTypeArray(); // Add Return Type. - // FIXME - Enable this. if (!IsConstructor) - // Fixme - Enable this. AddType(Method, Args.getElement(0), DW_Unit); + if (!IsConstructor) { + DIDescriptor Ty = Args.getElement(0); + if (DIBasicType *BT = dyn_cast(&Ty)) + AddType(DW_Unit, Method, *BT); + else if (DIDerivedType *DT = dyn_cast(&Ty)) + AddType(DW_Unit, Method, *DT); + else if (DICompositeType *CT = dyn_cast(&Ty)) + AddType(DW_Unit, Method, *CT); + } // Add arguments. for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) { DIE *Arg = new DIE(DW_TAG_formal_parameter); - // FIXME - Enable this. AddType(Arg, Args.getElement(i), DW_Unit); + DIDescriptor Ty = Args.getElement(i); + if (DIBasicType *BT = dyn_cast(&Ty)) + AddType(DW_Unit, Method, *BT); + else if (DIDerivedType *DT = dyn_cast(&Ty)) + AddType(DW_Unit, Method, *DT); + else if (DICompositeType *CT = dyn_cast(&Ty)) + AddType(DW_Unit, Method, *CT); AddUInt(Arg, DW_AT_artificial, DW_FORM_flag, 1); // ??? Method->AddChild(Arg); } @@ -1728,7 +1798,7 @@ // FIXME - Enable this. AddSourceLine(MemberDie, DTy); DIType FromTy = DTy->getTypeDerivedFrom(); - // FIXME - Enable this. AddType(MemberDie, FromTy, DW_Unit); + AddType(DW_Unit, MemberDie, FromTy); uint64_t Size = DTy->getSizeInBits(); uint64_t Offset = DTy->getOffsetInBits(); From brukman at gmail.com Mon Jan 5 16:07:37 2009 From: brukman at gmail.com (Misha Brukman) Date: Mon, 5 Jan 2009 17:07:37 -0500 Subject: [llvm-commits] [llvm] r61540 - in /llvm/trunk/utils/unittest/googletest: Makefile README.LLVM gtest-all.cc gtest-death-test.cc gtest-internal-inl.h gtest-test-part.cc gtest.cc gtest_main.cc include/gtest/internal/gtest-internal-inl.h In-Reply-To: <49627E64.2060108@cs.uiuc.edu> References: <200901010205.n0125isk030712@zion.cs.uiuc.edu> <4962301F.2010600@cs.uiuc.edu> <49627E64.2060108@cs.uiuc.edu> Message-ID: 2009/1/5 John Criswell > Misha Brukman wrote: > > 2009/1/5 John Criswell >> > > 1) Can you move the copyright/license information to a LICENSE.TXT file > > and add an entry in llvm/LICENSE.TXT? This is the established convention > > for third party licenses and makes it easier to find what code has > > additional licenses. > > > > It was already listed in llvm/LICENSE.TXT and referred to the file > COPYING in this directory, but since you insist, I renamed it to LICENSE.TXT > . > > > Sorry. I didn't notice the new text in the top level LICENSE.TXT file. > > Thanks for renaming the COPYING file. > > > 2) The code doesn't compile on my Linux machine. I get the following > > errors with g++ 4.1.2.: > > > > > /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-port.h:327:21: > > warning: tr1/tuple: No such file or directory > > > /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-param-util-generated.h:2670: > > error: 'tr1' is not a member of 'std' > > > /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-param-util-generated.h:2670: > > error: 'tr1' is not a member of 'std' > > > /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-param-util-generated.h:2670: > > error: template argument 1 is invalid > > > > Do you know what the problem might be? > > > > Hmm, this might mean we need to run gtest's configure script to let it > define the pre-processor tokens appropriately. I'll look into this. > > FWIW, unittests compile and run fine under gcc 4.1.1, but I don't have > gcc 4.1.2 installed locally. > > > Do you still have access to our research machines? If so, you should be > able to log into our newer machines (maute.cs.uiuc.edu and > gravity.cs.uiuc.edu) and use /usr/bin/g++4. > Yes, I do. I just looked into gtest source code, and it doesn't look like it needs any preprocessor tokens to get tr1 to work. I tried using /usr/bin/g++4 on this simple one-line file and it failed to compile, saying the header wasn't found: ------8<------ #include ------8<------ This tells me that the g++ on your system might not be installed correctly, because it works for me with gcc-4.1.1 and also because that is the location of the header in libstdc++: http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/include/tr1/tuple?view=log so it might be that this RedHat package was badly configured/installed and might need to go on the list of "broken versions of GCC" for LLVM. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090105/417ba6fd/attachment.html From echeng at apple.com Mon Jan 5 16:14:36 2009 From: echeng at apple.com (Evan Cheng) Date: Mon, 5 Jan 2009 14:14:36 -0800 Subject: [llvm-commits] [llvm] r61714 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp In-Reply-To: References: <200901051757.n05Hvlnq030294@zion.cs.uiuc.edu> <93322C51-21ED-4DDF-B897-189F35822C5C@apple.com> Message-ID: <8F706270-244F-440B-87FB-C7BBC5DD7AC8@apple.com> On Jan 5, 2009, at 1:40 PM, Devang Patel wrote: > > On Jan 5, 2009, at 1:24 PM, Evan Cheng wrote: > >>> = >>> = >>> ==================================================================== >>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) >>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Jan 5 >>> 11:57:47 2009 >>> @@ -23,6 +23,7 @@ >>> #include "llvm/CodeGen/MachineModuleInfo.h" >>> #include "llvm/CodeGen/MachineFrameInfo.h" >>> #include "llvm/CodeGen/MachineLocation.h" >>> +#include "llvm/Analysis/DebugInfo.h" >>> #include "llvm/Support/Debug.h" >>> #include "llvm/Support/Dwarf.h" >>> #include "llvm/Support/CommandLine.h" >>> @@ -1496,6 +1497,49 @@ >>> } >>> } >>> >>> + /// ConstructType - Construct basic type die from DIBasicType. >>> + void ConstructType(CompileUnit *DW_Unit, DIE &Buffer, >>> + DIBasicType *BTy) { >>> + >>> + // Get core information. >>> + const std::string &Name = BTy->getName(); >> >> This makes a copy of the name string. Is it possible to change >> AddString, DIEString, etc. to take const char* instead? Then you can >> use getNameStart() instead. > > > AddString and DIEString takes std::string reference. However, Those can be changed as well. Or you can overload them? Evan > > DebugInfo::getName() extracts string value from GV on demand where > there is a possibility to cache extracted strings. > - > Devang > > > > _______________________________________________ > 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 Jan 5 16:16:24 2009 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 05 Jan 2009 22:16:24 -0000 Subject: [llvm-commits] [llvm] r61759 - /llvm/tags/Apple/llvmCore-2091/ Message-ID: <200901052216.n05MGOAl007566@zion.cs.uiuc.edu> Author: void Date: Mon Jan 5 16:16:24 2009 New Revision: 61759 URL: http://llvm.org/viewvc/llvm-project?rev=61759&view=rev Log: Creating llvmCore-2091 branch Added: llvm/tags/Apple/llvmCore-2091/ - copied from r61758, llvm/trunk/ From isanbard at gmail.com Mon Jan 5 16:16:32 2009 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 05 Jan 2009 22:16:32 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r61760 - /llvm-gcc-4.2/tags/Apple/llvmgcc42-2091/ Message-ID: <200901052216.n05MGWrI007580@zion.cs.uiuc.edu> Author: void Date: Mon Jan 5 16:16:32 2009 New Revision: 61760 URL: http://llvm.org/viewvc/llvm-project?rev=61760&view=rev Log: Creating llvmgcc42-2091 branch Added: llvm-gcc-4.2/tags/Apple/llvmgcc42-2091/ - copied from r61759, llvm-gcc-4.2/trunk/ From dpatel at apple.com Mon Jan 5 16:35:52 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 05 Jan 2009 22:35:52 -0000 Subject: [llvm-commits] [llvm] r61761 - in /llvm/trunk: include/llvm/Analysis/DebugInfo.h lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901052235.n05MZq6a008091@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jan 5 16:35:52 2009 New Revision: 61761 URL: http://llvm.org/viewvc/llvm-project?rev=61761&view=rev Log: Extract source location info from DebugInfo. Add methods to add source location info in a DIE. Modified: llvm/trunk/include/llvm/Analysis/DebugInfo.h llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/include/llvm/Analysis/DebugInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DebugInfo.h?rev=61761&r1=61760&r2=61761&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/DebugInfo.h (original) +++ llvm/trunk/include/llvm/Analysis/DebugInfo.h Mon Jan 5 16:35:52 2009 @@ -48,10 +48,6 @@ /// not, the debug info is corrupt and we ignore it. DIDescriptor(GlobalVariable *GV, unsigned RequiredTag); - unsigned getVersion() const { - return getUnsignedField(0) & VersionMask; - } - std::string getStringField(unsigned Elt) const; unsigned getUnsignedField(unsigned Elt) const { return (unsigned)getUInt64Field(Elt); @@ -74,6 +70,10 @@ GlobalVariable *getGV() const { return GV; } + unsigned getVersion() const { + return getUnsignedField(0) & VersionMask; + } + unsigned getTag() const { return getUnsignedField(0) & ~VersionMask; } @@ -147,7 +147,8 @@ public: explicit DIType(GlobalVariable *GV); explicit DIType() {} - + virtual ~DIType() {} + DIDescriptor getContext() const { return getDescriptorField(1); } std::string getName() const { return getStringField(2); } DICompileUnit getCompileUnit() const{ return getFieldAs(3); } @@ -158,6 +159,16 @@ // carry this is just plain insane. uint64_t getOffsetInBits() const { return getUInt64Field(7); } unsigned getFlags() const { return getUnsignedField(8); } + + virtual std::string getFilename() const { + assert (0 && "Invalid DIDescriptor"); + return ""; + } + + virtual std::string getDirectory() const { + assert (0 && "Invalid DIDescriptor"); + return ""; + } }; /// DIBasicType - A basic type, like 'int' or 'float'. @@ -166,7 +177,7 @@ explicit DIBasicType(GlobalVariable *GV); unsigned getEncoding() const { return getUnsignedField(9); } - std::string getFileName() const { return getStringField(10); } + std::string getFilename() const { return getStringField(10); } std::string getDirectory() const { return getStringField(11); } }; @@ -180,7 +191,7 @@ explicit DIDerivedType(GlobalVariable *GV); DIType getTypeDerivedFrom() const { return getFieldAs(9); } - std::string getFileName() const { return getStringField(10); } + std::string getFilename() const { return getStringField(10); } std::string getDirectory() const { return getStringField(11); } /// isDerivedType - Return true if the specified tag is legal for @@ -202,7 +213,7 @@ explicit DICompositeType(GlobalVariable *GV); DIArray getTypeArray() const { return getFieldAs(10); } - std::string getFileName() const { return getStringField(11); } + std::string getFilename() const { return getStringField(11); } std::string getDirectory() const { return getStringField(12); } /// isCompositeType - Return true if the specified tag is legal for @@ -220,7 +231,8 @@ explicit DIGlobal(GlobalVariable *GV, unsigned RequiredTag) : DIDescriptor(GV, RequiredTag) {} public: - + virtual ~DIGlobal() {} + DIDescriptor getContext() const { return getDescriptorField(2); } std::string getName() const { return getStringField(3); } std::string getDisplayName() const { return getStringField(4); } @@ -234,6 +246,16 @@ /// compile unit, like 'static' in C. unsigned isLocalToUnit() const { return getUnsignedField(9); } unsigned isDefinition() const { return getUnsignedField(10); } + + virtual std::string getFilename() const { + assert (0 && "Invalid DIDescriptor"); + return ""; + } + + virtual std::string getDirectory() const { + assert (0 && "Invalid DIDescriptor"); + return ""; + } }; Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61761&r1=61760&r2=61761&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Jan 5 16:35:52 2009 @@ -1124,6 +1124,33 @@ }; //===----------------------------------------------------------------------===// +/// SrcFileInfo - This class is used to track source information. +/// +class SrcFileInfo { + unsigned DirectoryID; // Directory ID number. + std::string Name; // File name (not including directory.) +public: + SrcFileInfo(unsigned D, const std::string &N) : DirectoryID(D), Name(N) {} + + // Accessors + unsigned getDirectoryID() const { return DirectoryID; } + const std::string &getName() const { return Name; } + + /// operator== - Used by UniqueVector to locate entry. + /// + bool operator==(const SourceFileInfo &SI) const { + return getDirectoryID() == SI.getDirectoryID() && getName() == SI.getName(); + } + + /// operator< - Used by UniqueVector to locate entry. + /// + bool operator<(const SrcFileInfo &SI) const { + return getDirectoryID() < SI.getDirectoryID() || + (getDirectoryID() == SI.getDirectoryID() && getName() < SI.getName()); + } +}; + +//===----------------------------------------------------------------------===// /// DwarfDebug - Emits Dwarf debug directives. /// class DwarfDebug : public Dwarf { @@ -1136,6 +1163,7 @@ /// CompileUnits - All the compile units involved in this build. The index /// of each entry in this vector corresponds to the sources in MMI. std::vector CompileUnits; + DenseMap DW_CUs; /// AbbreviationsSet - Used to uniquely define abbreviations. /// @@ -1147,6 +1175,12 @@ /// ValuesSet - Used to uniquely define values. /// + // Directories - Uniquing vector for directories. + UniqueVector Directories; + + // SourceFiles - Uniquing vector for source files. + UniqueVector SrcFiles; + FoldingSet ValuesSet; /// Values - A list of all the unique values in use. @@ -1416,6 +1450,42 @@ } } + /// AddSourceLine - Add location information to specified debug information + /// entry. + void AddSourceLine(DIE *Die, DIGlobal *G) { + unsigned FileID = 0; + unsigned Line = G->getLineNumber(); + if (G->getVersion() < DIDescriptor::Version7) { + // Version6 or earlier. Use compile unit info to get file id. + CompileUnit *Unit = FindCompileUnit(G->getCompileUnit()); + FileID = Unit->getID(); + } else { + // Version7 or newer, use filename and directory info from DIGlobal + // directly. + unsigned DID = Directories.idFor(G->getDirectory()); + FileID = SrcFiles.idFor(SrcFileInfo(DID, G->getFilename())); + } + AddUInt(Die, DW_AT_decl_file, 0, FileID); + AddUInt(Die, DW_AT_decl_line, 0, Line); + } + + void AddSourceLine(DIE *Die, DIType *G) { + unsigned FileID = 0; + unsigned Line = G->getLineNumber(); + if (G->getVersion() < DIDescriptor::Version7) { + // Version6 or earlier. Use compile unit info to get file id. + CompileUnit *Unit = FindCompileUnit(G->getCompileUnit()); + FileID = Unit->getID(); + } else { + // Version7 or newer, use filename and directory info from DIGlobal + // directly. + unsigned DID = Directories.idFor(G->getDirectory()); + FileID = SrcFiles.idFor(SrcFileInfo(DID, G->getFilename())); + } + AddUInt(Die, DW_AT_decl_file, 0, FileID); + AddUInt(Die, DW_AT_decl_line, 0, Line); + } + /// AddAddress - Add an address attribute to a die based on the location /// provided. void AddAddress(DIE *Die, unsigned Attribute, @@ -2144,6 +2214,14 @@ return Unit; } + /// FindCompileUnit - Get the compile unit for the given descriptor. + /// + CompileUnit *FindCompileUnit(DICompileUnit Unit) { + CompileUnit *DW_Unit = DW_CUs[Unit.getGV()]; + assert(DW_Unit && "Missing compile unit."); + return DW_Unit; + } + /// NewGlobalVariable - Add a new global variable DIE. /// DIE *NewGlobalVariable(GlobalVariableDesc *GVD) { From gohman at apple.com Mon Jan 5 16:40:26 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 05 Jan 2009 22:40:26 -0000 Subject: [llvm-commits] [llvm] r61762 - /llvm/trunk/lib/CodeGen/ScheduleDAG.cpp Message-ID: <200901052240.n05MeQwi008235@zion.cs.uiuc.edu> Author: djg Date: Mon Jan 5 16:40:26 2009 New Revision: 61762 URL: http://llvm.org/viewvc/llvm-project?rev=61762&view=rev Log: Don't call setDepthDirty/setHeightDirty when adding an edge with latency 0, since it doesn't affect the depth or height. Modified: llvm/trunk/lib/CodeGen/ScheduleDAG.cpp Modified: llvm/trunk/lib/CodeGen/ScheduleDAG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ScheduleDAG.cpp?rev=61762&r1=61761&r2=61762&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/ScheduleDAG.cpp (original) +++ llvm/trunk/lib/CodeGen/ScheduleDAG.cpp Mon Jan 5 16:40:26 2009 @@ -77,8 +77,10 @@ ++N->NumSuccsLeft; N->Succs.push_back(P); Preds.push_back(D); - this->setDepthDirty(); - N->setHeightDirty(); + if (P.getLatency() != 0) { + this->setDepthDirty(); + N->setHeightDirty(); + } } /// removePred - This removes the specified edge as a pred of the current @@ -112,8 +114,10 @@ --NumPredsLeft; if (!isScheduled) --N->NumSuccsLeft; - this->setDepthDirty(); - N->setHeightDirty(); + if (P.getLatency() != 0) { + this->setDepthDirty(); + N->setHeightDirty(); + } return; } } From isanbard at gmail.com Mon Jan 5 16:53:47 2009 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 05 Jan 2009 22:53:47 -0000 Subject: [llvm-commits] [llvm] r61765 - in /llvm/trunk: include/llvm/Target/TargetAsmInfo.h lib/CodeGen/AsmPrinter/DwarfWriter.cpp lib/Target/TargetAsmInfo.cpp lib/Target/X86/X86TargetAsmInfo.cpp Message-ID: <200901052253.n05MrlqL008702@zion.cs.uiuc.edu> Author: void Date: Mon Jan 5 16:53:45 2009 New Revision: 61765 URL: http://llvm.org/viewvc/llvm-project?rev=61765&view=rev Log: Revert r61415 and r61484. Duncan was correct that these weren't needed. Modified: llvm/trunk/include/llvm/Target/TargetAsmInfo.h llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp llvm/trunk/lib/Target/TargetAsmInfo.cpp llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Modified: llvm/trunk/include/llvm/Target/TargetAsmInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetAsmInfo.h?rev=61765&r1=61764&r2=61765&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetAsmInfo.h (original) +++ llvm/trunk/include/llvm/Target/TargetAsmInfo.h Mon Jan 5 16:53:45 2009 @@ -448,20 +448,10 @@ /// bool DwarfRequiresFrameSection; // Defaults to true. - /// FDEEncodingRequiresSData4 - If set, the FDE Encoding in the EH section - /// includes DW_EH_PE_sdata4. - /// - bool FDEEncodingRequiresSData4; // Defaults to true - /// NonLocalEHFrameLabel - If set, the EH_frame label needs to be non-local. /// bool NonLocalEHFrameLabel; // Defaults to false. - /// Force32BitFDEReference - Force the FDE initial location and address - /// range to be 32-bit sized. - /// - bool Force32BitFDEReference; // Defaults to true. - /// GlobalEHDirective - This is the directive used to make exception frame /// tables globally visible. /// @@ -828,15 +818,9 @@ bool doesDwarfRequireFrameSection() const { return DwarfRequiresFrameSection; } - bool doesFDEEncodingRequireSData4() const { - return FDEEncodingRequiresSData4; - } bool doesRequireNonLocalEHFrameLabel() const { return NonLocalEHFrameLabel; } - bool doesRequire32BitFDEReference() const { - return Force32BitFDEReference; - } const char *getGlobalEHDirective() const { return GlobalEHDirective; } Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61765&r1=61764&r2=61765&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Jan 5 16:53:45 2009 @@ -3410,24 +3410,14 @@ Asm->EmitInt8(DW_EH_PE_pcrel | DW_EH_PE_sdata4); Asm->EOL("LSDA Encoding (pcrel sdata4)"); - if (TAI->doesFDEEncodingRequireSData4()) { - Asm->EmitInt8(DW_EH_PE_pcrel | DW_EH_PE_sdata4); - Asm->EOL("FDE Encoding (pcrel sdata4)"); - } else { - Asm->EmitInt8(DW_EH_PE_pcrel); - Asm->EOL("FDE Encoding (pcrel)"); - } + Asm->EmitInt8(DW_EH_PE_pcrel | DW_EH_PE_sdata4); + Asm->EOL("FDE Encoding (pcrel sdata4)"); } else { Asm->EmitULEB128Bytes(1); Asm->EOL("Augmentation Size"); - if (TAI->doesFDEEncodingRequireSData4()) { - Asm->EmitInt8(DW_EH_PE_pcrel | DW_EH_PE_sdata4); - Asm->EOL("FDE Encoding (pcrel sdata4)"); - } else { - Asm->EmitInt8(DW_EH_PE_pcrel); - Asm->EOL("FDE Encoding (pcrel)"); - } + Asm->EmitInt8(DW_EH_PE_pcrel | DW_EH_PE_sdata4); + Asm->EOL("FDE Encoding (pcrel sdata4)"); } // Indicate locations of general callee saved registers in frame. @@ -3508,12 +3498,10 @@ Asm->EOL("FDE CIE offset"); - EmitReference("eh_func_begin", EHFrameInfo.Number, true, - TAI->doesRequire32BitFDEReference()); + EmitReference("eh_func_begin", EHFrameInfo.Number, true); Asm->EOL("FDE initial location"); EmitDifference("eh_func_end", EHFrameInfo.Number, - "eh_func_begin", EHFrameInfo.Number, - TAI->doesRequire32BitFDEReference()); + "eh_func_begin", EHFrameInfo.Number); Asm->EOL("FDE address range"); // If there is a personality and landing pads then point to the language Modified: llvm/trunk/lib/Target/TargetAsmInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetAsmInfo.cpp?rev=61765&r1=61764&r2=61765&view=diff ============================================================================== --- llvm/trunk/lib/Target/TargetAsmInfo.cpp (original) +++ llvm/trunk/lib/Target/TargetAsmInfo.cpp Mon Jan 5 16:53:45 2009 @@ -99,9 +99,7 @@ SupportsDebugInformation = false; SupportsExceptionHandling = false; DwarfRequiresFrameSection = true; - FDEEncodingRequiresSData4 = true; NonLocalEHFrameLabel = false; - Force32BitFDEReference = true; GlobalEHDirective = 0; SupportsWeakOmittedEHFrame = true; DwarfSectionOffsetDirective = 0; Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp?rev=61765&r1=61764&r2=61765&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Mon Jan 5 16:53:45 2009 @@ -70,9 +70,7 @@ COMMDirectiveTakesAlignment = (Subtarget->getDarwinVers() >= 9); HasDotTypeDotSizeDirective = false; HasSingleParameterDotFile = false; - FDEEncodingRequiresSData4 = false; NonLocalEHFrameLabel = true; - Force32BitFDEReference = false; if (TM.getRelocationModel() == Reloc::Static) { StaticCtorsSection = ".constructor"; StaticDtorsSection = ".destructor"; From isanbard at gmail.com Mon Jan 5 16:55:37 2009 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 5 Jan 2009 14:55:37 -0800 Subject: [llvm-commits] [llvm] r61765 - in /llvm/trunk: include/llvm/Target/TargetAsmInfo.h lib/CodeGen/AsmPrinter/DwarfWriter.cpp lib/Target/TargetAsmInfo.cpp lib/Target/X86/X86TargetAsmInfo.cpp In-Reply-To: <200901052253.n05MrlqL008702@zion.cs.uiuc.edu> References: <200901052253.n05MrlqL008702@zion.cs.uiuc.edu> Message-ID: <16e5fdf90901051455n54897ffdu4d51325d0c19ac53@mail.gmail.com> On Mon, Jan 5, 2009 at 2:53 PM, Bill Wendling wrote: > Author: void > Date: Mon Jan 5 16:53:45 2009 > New Revision: 61765 > > URL: http://llvm.org/viewvc/llvm-project?rev=61765&view=rev > Log: > Revert r61415 and r61484. Duncan was correct that these weren't needed. > Thanks for catching this, Duncan! :-) -bw From gohman at apple.com Mon Jan 5 17:03:04 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 05 Jan 2009 23:03:04 -0000 Subject: [llvm-commits] [llvm] r61767 - /llvm/trunk/utils/llvm.grm Message-ID: <200901052303.n05N34Yu008999@zion.cs.uiuc.edu> Author: djg Date: Mon Jan 5 17:03:03 2009 New Revision: 61767 URL: http://llvm.org/viewvc/llvm-project?rev=61767&view=rev Log: Fix a thinko in the grammar for thread_local variables. Modified: llvm/trunk/utils/llvm.grm Modified: llvm/trunk/utils/llvm.grm URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/llvm.grm?rev=61767&r1=61766&r2=61767&view=diff ============================================================================== --- llvm/trunk/utils/llvm.grm (original) +++ llvm/trunk/utils/llvm.grm Mon Jan 5 17:03:03 2009 @@ -261,7 +261,7 @@ | declare FunctionProto | - module asm AsmBlock | OptLocalAssign type Types - | OptGlobalAssign GVVisibilityStyle ThreadLocal OptAddrSpace OptAddrSpace + | OptGlobalAssign GVVisibilityStyle ThreadLocal OptAddrSpace GlobalType ConstVal GlobalVarAttributes | OptGlobalAssign GVInternalLinkage GVVisibilityStyle ThreadLocal OptAddrSpace GlobalType ConstVal GlobalVarAttributes From dpatel at apple.com Mon Jan 5 17:03:36 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 05 Jan 2009 23:03:36 -0000 Subject: [llvm-commits] [llvm] r61768 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901052303.n05N3aJo009026@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jan 5 17:03:32 2009 New Revision: 61768 URL: http://llvm.org/viewvc/llvm-project?rev=61768&view=rev Log: Construct compile unit dies using DebugInfo. Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61768&r1=61767&r2=61768&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Jan 5 17:03:32 2009 @@ -18,7 +18,7 @@ #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/UniqueVector.h" #include "llvm/Module.h" -#include "llvm/Type.h" +#include "llvm/DerivedTypes.h" #include "llvm/CodeGen/AsmPrinter.h" #include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/CodeGen/MachineFrameInfo.h" @@ -60,6 +60,43 @@ class DIEValue; //===----------------------------------------------------------------------===// +/// Utility routines. +/// +/// getGlobalVariablesUsing - Return all of the GlobalVariables which have the +/// specified value in their initializer somewhere. +static void +getGlobalVariablesUsing(Value *V, std::vector &Result) { + // Scan though value users. + for (Value::use_iterator I = V->use_begin(), E = V->use_end(); I != E; ++I) { + if (GlobalVariable *GV = dyn_cast(*I)) { + // If the user is a GlobalVariable then add to result. + Result.push_back(GV); + } else if (Constant *C = dyn_cast(*I)) { + // If the user is a constant variable then scan its users + getGlobalVariablesUsing(C, Result); + } + } +} + +/// getGlobalVariablesUsing - Return all of the GlobalVariables that use the +/// named GlobalVariable. +static void +getGlobalVariablesUsing(Module &M, const std::string &RootName, + std::vector &Result) { + std::vector FieldTypes; + FieldTypes.push_back(Type::Int32Ty); + FieldTypes.push_back(Type::Int32Ty); + + // Get the GlobalVariable root. + GlobalVariable *UseRoot = M.getGlobalVariable(RootName, + StructType::get(FieldTypes)); + + // If present and linkonce then scan for users. + if (UseRoot && UseRoot->hasLinkOnceLinkage()) + getGlobalVariablesUsing(UseRoot, Result); +} + +//===----------------------------------------------------------------------===// /// DWLabel - Labels are used to track locations in the assembler file. /// Labels appear in the form @verbatim @endverbatim, /// where the tag is a category of label (Ex. location) and number is a value @@ -743,6 +780,11 @@ std::vector Dies; public: + CompileUnit(unsigned I, DIE *D) + : ID(I), Die(D), DescToDieMap(), GVToDieMap(), DescToDIEntryMap(), + GVToDIEntryMap(), Globals(), DiesSet(InitDiesSetSize), Dies() + {} + CompileUnit(CompileUnitDesc *CUD, unsigned I, DIE *D) : Desc(CUD) , ID(I) @@ -3074,6 +3116,33 @@ Asm->EOL(); } + /// ConstructCompileUnitDIEs - Create a compile unit DIEs. + void ConstructCompileUnits() { + std::string CUName = "llvm.dbg.compile_units"; + std::vector Result; + getGlobalVariablesUsing(*M, CUName, Result); + for (std::vector::iterator RI = Result.begin(), + RE = Result.end(); RI != RE; ++RI) { + DICompileUnit *DIUnit = new DICompileUnit(*RI); + unsigned DID = Directories.insert(DIUnit->getDirectory()); + unsigned ID = SrcFiles.insert(SrcFileInfo(DID, + DIUnit->getFilename())); + + DIE *Die = new DIE(DW_TAG_compile_unit); + AddSectionOffset(Die, DW_AT_stmt_list, DW_FORM_data4, + DWLabel("section_line", 0), DWLabel("section_line", 0), + false); + AddString(Die, DW_AT_producer, DW_FORM_string, DIUnit->getProducer()); + AddUInt(Die, DW_AT_language, DW_FORM_data1, DIUnit->getLanguage()); + AddString(Die, DW_AT_name, DW_FORM_string, DIUnit->getFilename()); + if (!DIUnit->getDirectory().empty()) + AddString(Die, DW_AT_comp_dir, DW_FORM_string, DIUnit->getDirectory()); + + CompileUnit *Unit = new CompileUnit(ID, Die); + DW_CUs[DIUnit->getGV()] = Unit; + } + } + /// ConstructCompileUnitDIEs - Create a compile unit DIE for each source and /// header file. void ConstructCompileUnitDIEs() { From dpatel at apple.com Mon Jan 5 17:11:13 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 05 Jan 2009 23:11:13 -0000 Subject: [llvm-commits] [llvm] r61771 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901052311.n05NBDpC009385@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jan 5 17:11:11 2009 New Revision: 61771 URL: http://llvm.org/viewvc/llvm-project?rev=61771&view=rev Log: Construct global variable DIEs using DebugInfo. Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61771&r1=61770&r2=61771&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Jan 5 17:11:11 2009 @@ -3116,7 +3116,7 @@ Asm->EOL(); } - /// ConstructCompileUnitDIEs - Create a compile unit DIEs. + /// ConstructCompileUnits - Create a compile unit DIEs. void ConstructCompileUnits() { std::string CUName = "llvm.dbg.compile_units"; std::vector Result; @@ -3155,6 +3155,53 @@ } } + /// ConstructGlobalVariableDIEs - Create DIEs for each of the externally + /// visible global variables. + void ConstructGlobalVariableDIEs() { + std::string GVName = "llvm.dbg.global_variables"; + std::vector Result; + getGlobalVariablesUsing(*M, GVName, Result); + for (std::vector::iterator GVI = Result.begin(), + GVE = Result.end(); GVI != GVE; ++GVI) { + DIGlobalVariable *DI_GV = new DIGlobalVariable(*GVI); + CompileUnit *DW_Unit = FindCompileUnit(DI_GV->getCompileUnit()); + + // Check for pre-existence. + DIE *&Slot = DW_Unit->getDieMapSlotFor(DI_GV->getGV()); + if (Slot) continue; + + DIE *VariableDie = new DIE(DW_TAG_variable); + AddString(VariableDie, DW_AT_name, DW_FORM_string, DI_GV->getName()); + const std::string &LinkageName = DI_GV->getLinkageName(); + if (!LinkageName.empty()) + AddString(VariableDie, DW_AT_MIPS_linkage_name, DW_FORM_string, + LinkageName); + AddType(DW_Unit, VariableDie, DI_GV->getType()); + + if (!DI_GV->isLocalToUnit()) + AddUInt(VariableDie, DW_AT_external, DW_FORM_flag, 1); + + // Add source line info, if available. + AddSourceLine(VariableDie, DI_GV); + + // Add address. + DIEBlock *Block = new DIEBlock(); + AddUInt(Block, 0, DW_FORM_data1, DW_OP_addr); + AddObjectLabel(Block, 0, DW_FORM_udata, + Asm->getGlobalLinkName(DI_GV->getGV())); + AddBlock(VariableDie, DW_AT_location, 0, Block); + + //Add to map. + Slot = VariableDie; + + //Add to context owner. + DW_Unit->getDie()->AddChild(VariableDie); + + //Expose as global. FIXME - need to check external flag. + DW_Unit->AddGlobal(DI_GV->getName(), VariableDie); + } + } + /// ConstructGlobalDIEs - Create DIEs for each of the externally visible /// global variables. void ConstructGlobalDIEs() { From dpatel at apple.com Mon Jan 5 17:21:35 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 05 Jan 2009 23:21:35 -0000 Subject: [llvm-commits] [llvm] r61772 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901052321.n05NLZcN009745@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jan 5 17:21:35 2009 New Revision: 61772 URL: http://llvm.org/viewvc/llvm-project?rev=61772&view=rev Log: Construct subprogram DIEs using DebugInfo. Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61772&r1=61771&r2=61772&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon Jan 5 17:21:35 2009 @@ -3214,6 +3214,45 @@ } } + /// ConstructSubprograms - Create DIEs for each of the externally visible + /// subprograms. + void ConstructSubprograms() { + + std::string SPName = "llvm.dbg.subprograms"; + std::vector Result; + getGlobalVariablesUsing(*M, SPName, Result); + for (std::vector::iterator RI = Result.begin(), + RE = Result.end(); RI != RE; ++RI) { + + DISubprogram *SP = new DISubprogram(*RI); + CompileUnit *Unit = FindCompileUnit(SP->getCompileUnit()); + + // Check for pre-existence. + DIE *&Slot = Unit->getDieMapSlotFor(SP->getGV()); + if (Slot) continue; + + DIE *SubprogramDie = new DIE(DW_TAG_subprogram); + AddString(SubprogramDie, DW_AT_name, DW_FORM_string, SP->getName()); + const std::string &LinkageName = SP->getLinkageName(); + if (!LinkageName.empty()) + AddString(SubprogramDie, DW_AT_MIPS_linkage_name, DW_FORM_string, + LinkageName); + DIType SPTy = SP->getType(); + AddType(Unit, SubprogramDie, SPTy); + if (!SP->isLocalToUnit()) + AddUInt(SubprogramDie, DW_AT_external, DW_FORM_flag, 1); + AddUInt(SubprogramDie, DW_AT_prototyped, DW_FORM_flag, 1); + + AddSourceLine(SubprogramDie, SP); + //Add to map. + Slot = SubprogramDie; + //Add to context owner. + Unit->getDie()->AddChild(SubprogramDie); + //Expose as global. + Unit->AddGlobal(SP->getName(), SubprogramDie); + } + } + /// ConstructSubprogramDIEs - Create DIEs for each of the externally visible /// subprograms. void ConstructSubprogramDIEs() { From sabre at nondot.org Mon Jan 5 17:45:50 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 23:45:50 -0000 Subject: [llvm-commits] [llvm] r61775 - in /llvm/trunk: include/llvm/Support/PatternMatch.h test/Transforms/InstCombine/2009-01-05-i128-crash.ll Message-ID: <200901052345.n05NjolN010524@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 17:45:50 2009 New Revision: 61775 URL: http://llvm.org/viewvc/llvm-project?rev=61775&view=rev Log: make m_ConstantInt(int64_t) safely match ConstantInt's that are larger than i64. This fixes an instcombine crash on PR3235. Added: llvm/trunk/test/Transforms/InstCombine/2009-01-05-i128-crash.ll Modified: llvm/trunk/include/llvm/Support/PatternMatch.h Modified: llvm/trunk/include/llvm/Support/PatternMatch.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/PatternMatch.h?rev=61775&r1=61774&r2=61775&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/PatternMatch.h (original) +++ llvm/trunk/include/llvm/Support/PatternMatch.h Mon Jan 5 17:45:50 2009 @@ -57,7 +57,16 @@ template bool match(ITy *V) { - return isa(V) && cast(V)->getSExtValue() == Val; + if (const ConstantInt *CI = dyn_cast(V)) { + const APInt &CIV = CI->getValue(); + if (Val > 0) + return CIV == Val; + // If Val is negative, and CI is shorter than it, truncate to the right + // number of bits. If it is larger, then we have to sign extend. Just + // compare their negated values. + return -CIV == -Val; + } + return false; } }; Added: llvm/trunk/test/Transforms/InstCombine/2009-01-05-i128-crash.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/2009-01-05-i128-crash.ll?rev=61775&view=auto ============================================================================== --- llvm/trunk/test/Transforms/InstCombine/2009-01-05-i128-crash.ll (added) +++ llvm/trunk/test/Transforms/InstCombine/2009-01-05-i128-crash.ll Mon Jan 5 17:45:50 2009 @@ -0,0 +1,27 @@ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis +; PR3235 +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128" +target triple = "x86_64-unknown-linux-gnu" + +define hidden i128 @"\01_gfortrani_max_value"(i32 %length, i32 %signed_flag) nounwind { +entry: + switch i32 %length, label %bb13 [ + i32 1, label %bb17 + i32 4, label %bb9 + i32 8, label %bb5 + ] + +bb5: ; preds = %entry + %0 = icmp eq i32 %signed_flag, 0 ; [#uses=1] + %iftmp.28.0 = select i1 %0, i128 18446744073709551615, i128 9223372036854775807 ; [#uses=1] + ret i128 %iftmp.28.0 + +bb9: ; preds = %entry + ret i128 0 + +bb13: ; preds = %entry + ret i128 0 + +bb17: ; preds = %entry + ret i128 0 +} From sabre at nondot.org Mon Jan 5 17:53:12 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 05 Jan 2009 23:53:12 -0000 Subject: [llvm-commits] [llvm] r61776 - in /llvm/trunk: include/llvm/Support/PatternMatch.h lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200901052353.n05NrD90010799@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 17:53:12 2009 New Revision: 61776 URL: http://llvm.org/viewvc/llvm-project?rev=61776&view=rev Log: Change m_ConstantInt and m_SelectCst to take their constant integers as template arguments instead of as instance variables, exposing more optimization opportunities to the compiler earlier. Modified: llvm/trunk/include/llvm/Support/PatternMatch.h llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Modified: llvm/trunk/include/llvm/Support/PatternMatch.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/PatternMatch.h?rev=61776&r1=61775&r2=61776&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/PatternMatch.h (original) +++ llvm/trunk/include/llvm/Support/PatternMatch.h Mon Jan 5 17:53:12 2009 @@ -51,10 +51,8 @@ /// m_ConstantInt() - Match an arbitrary ConstantInt and ignore it. inline leaf_ty m_ConstantInt() { return leaf_ty(); } +template struct constantint_ty { - int64_t Val; - explicit constantint_ty(int64_t val) : Val(val) {} - template bool match(ITy *V) { if (const ConstantInt *CI = dyn_cast(V)) { @@ -72,8 +70,9 @@ /// m_ConstantInt(int64_t) - Match a ConstantInt with a specific value /// and ignore it. -inline constantint_ty m_ConstantInt(int64_t Val) { - return constantint_ty(Val); +template +inline constantint_ty m_ConstantInt() { + return constantint_ty(); } struct zero_ty { @@ -393,12 +392,12 @@ /// m_SelectCst - This matches a select of two constants, e.g.: /// m_SelectCst(m_Value(V), -1, 0) -template -inline SelectClass_match -m_SelectCst(const Cond &C, int64_t L, int64_t R) { - return SelectClass_match(C, m_ConstantInt(L), - m_ConstantInt(R)); +template +inline SelectClass_match, constantint_ty > +m_SelectCst(const Cond &C) { + return SelectClass_match, + constantint_ty >(C, m_ConstantInt(), + m_ConstantInt()); } Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=61776&r1=61775&r2=61776&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Mon Jan 5 17:53:12 2009 @@ -4276,18 +4276,18 @@ Value *C, Value *D) { // If A is not a select of -1/0, this cannot match. Value *Cond = 0; - if (!match(A, m_SelectCst(m_Value(Cond), -1, 0))) + if (!match(A, m_SelectCst<-1, 0>(m_Value(Cond)))) return 0; // ((cond?-1:0)&C) | (B&(cond?0:-1)) -> cond ? C : B. - if (match(D, m_SelectCst(m_Specific(Cond), 0, -1))) + if (match(D, m_SelectCst<0, -1>(m_Specific(Cond)))) return SelectInst::Create(Cond, C, B); - if (match(D, m_Not(m_SelectCst(m_Specific(Cond), -1, 0)))) + if (match(D, m_Not(m_SelectCst<-1, 0>(m_Specific(Cond))))) return SelectInst::Create(Cond, C, B); // ((cond?-1:0)&C) | ((cond?0:-1)&D) -> cond ? C : D. - if (match(B, m_SelectCst(m_Specific(Cond), 0, -1))) + if (match(B, m_SelectCst<0, -1>(m_Specific(Cond)))) return SelectInst::Create(Cond, C, D); - if (match(B, m_Not(m_SelectCst(m_Specific(Cond), -1, 0)))) + if (match(B, m_Not(m_SelectCst<-1, 0>(m_Specific(Cond))))) return SelectInst::Create(Cond, C, D); return 0; } @@ -8713,11 +8713,11 @@ // (x ashr x, 31 -> all ones if signed // (x >s -1) ? -1 : 0 -> ashr x, 31 -> all ones if not signed CmpInst::Predicate Pred = CmpInst::BAD_ICMP_PREDICATE; - if (match(TrueVal, m_ConstantInt(-1)) && - match(FalseVal, m_ConstantInt(0))) + if (match(TrueVal, m_ConstantInt<-1>()) && + match(FalseVal, m_ConstantInt<0>())) Pred = ICI->getPredicate(); - else if (match(TrueVal, m_ConstantInt(0)) && - match(FalseVal, m_ConstantInt(-1))) + else if (match(TrueVal, m_ConstantInt<0>()) && + match(FalseVal, m_ConstantInt<-1>())) Pred = CmpInst::getInversePredicate(ICI->getPredicate()); if (Pred != CmpInst::BAD_ICMP_PREDICATE) { From sabre at nondot.org Mon Jan 5 18:06:25 2009 From: sabre at nondot.org (Chris Lattner) Date: Tue, 06 Jan 2009 00:06:25 -0000 Subject: [llvm-commits] [llvm] r61777 - /llvm/trunk/include/llvm/Support/PatternMatch.h Message-ID: <200901060006.n0606Pvp011201@zion.cs.uiuc.edu> Author: lattner Date: Mon Jan 5 18:06:25 2009 New Revision: 61777 URL: http://llvm.org/viewvc/llvm-project?rev=61777&view=rev Log: no need to negate the APInt for 0. Modified: llvm/trunk/include/llvm/Support/PatternMatch.h Modified: llvm/trunk/include/llvm/Support/PatternMatch.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/PatternMatch.h?rev=61777&r1=61776&r2=61777&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/PatternMatch.h (original) +++ llvm/trunk/include/llvm/Support/PatternMatch.h Mon Jan 5 18:06:25 2009 @@ -57,7 +57,7 @@ bool match(ITy *V) { if (const ConstantInt *CI = dyn_cast(V)) { const APInt &CIV = CI->getValue(); - if (Val > 0) + if (Val >= 0) return CIV == Val; // If Val is negative, and CI is shorter than it, truncate to the right // number of bits. If it is larger, then we have to sign extend. Just From gohman at apple.com Mon Jan 5 19:19:04 2009 From: gohman at apple.com (Dan Gohman) Date: Tue, 06 Jan 2009 01:19:04 -0000 Subject: [llvm-commits] [llvm] r61778 - in /llvm/trunk: lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp test/CodeGen/X86/fold-pcmpeqd-0.ll Message-ID: <200901060119.n061J495013461@zion.cs.uiuc.edu> Author: djg Date: Mon Jan 5 19:19:04 2009 New Revision: 61778 URL: http://llvm.org/viewvc/llvm-project?rev=61778&view=rev Log: Use a latency value of 0 for the artificial edges inserted by AddPseudoTwoAddrDeps. This lets the scheduling infrastructure avoid recalculating node heights. In very large testcases this was a major bottleneck. Thanks to Roman Levenstein for finding this! As a side effect, fold-pcmpeqd-0.ll is now scheduled better and it no longer requires spilling on x86-32. Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp llvm/trunk/test/CodeGen/X86/fold-pcmpeqd-0.ll Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp?rev=61778&r1=61777&r2=61778&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Mon Jan 5 19:19:04 2009 @@ -1252,7 +1252,7 @@ !scheduleDAG->IsReachable(SuccSU, SU)) { DOUT << "Adding a pseudo-two-addr edge from SU # " << SU->NodeNum << " to SU #" << SuccSU->NodeNum << "\n"; - scheduleDAG->AddPred(SU, SDep(SuccSU, SDep::Order, /*Latency=*/1, + scheduleDAG->AddPred(SU, SDep(SuccSU, SDep::Order, /*Latency=*/0, /*Reg=*/0, /*isMustAlias=*/false, /*isArtificial=*/true)); } Modified: llvm/trunk/test/CodeGen/X86/fold-pcmpeqd-0.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fold-pcmpeqd-0.ll?rev=61778&r1=61777&r2=61778&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/fold-pcmpeqd-0.ll (original) +++ llvm/trunk/test/CodeGen/X86/fold-pcmpeqd-0.ll Mon Jan 5 19:19:04 2009 @@ -1,4 +1,4 @@ -; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin | not grep pcmpeqd +; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin | grep pcmpeqd | count 1 ; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin | grep pcmpeqd | count 1 ; This testcase shouldn't need to spill the -1 value, From gohman at apple.com Mon Jan 5 19:28:56 2009 From: gohman at apple.com (Dan Gohman) Date: Tue, 06 Jan 2009 01:28:56 -0000 Subject: [llvm-commits] [llvm] r61779 - /llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Message-ID: <200901060128.n061SuoB013760@zion.cs.uiuc.edu> Author: djg Date: Mon Jan 5 19:28:56 2009 New Revision: 61779 URL: http://llvm.org/viewvc/llvm-project?rev=61779&view=rev Log: Update these argument lists for the isNormalMemory argument. This doesn't affect current functionality. Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp?rev=61779&r1=61778&r2=61779&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Mon Jan 5 19:28:56 2009 @@ -729,7 +729,8 @@ DOUT << "Adding an edge from SU # " << TrySU->NodeNum << " to SU #" << Copies.front()->NodeNum << "\n"; AddPred(TrySU, SDep(Copies.front(), SDep::Order, /*Latency=*/1, - /*Reg=*/0, /*isMustAlias=*/false, + /*Reg=*/0, /*isNormalMemory=*/false, + /*isMustAlias=*/false, /*isArtificial=*/true)); NewDef = Copies.back(); } @@ -738,7 +739,8 @@ << " to SU #" << TrySU->NodeNum << "\n"; LiveRegDefs[Reg] = NewDef; AddPred(NewDef, SDep(TrySU, SDep::Order, /*Latency=*/1, - /*Reg=*/0, /*isMustAlias=*/false, + /*Reg=*/0, /*isNormalMemory=*/false, + /*isMustAlias=*/false, /*isArtificial=*/true)); TrySU->isAvailable = false; CurSU = NewDef; @@ -1253,7 +1255,8 @@ DOUT << "Adding a pseudo-two-addr edge from SU # " << SU->NodeNum << " to SU #" << SuccSU->NodeNum << "\n"; scheduleDAG->AddPred(SU, SDep(SuccSU, SDep::Order, /*Latency=*/0, - /*Reg=*/0, /*isMustAlias=*/false, + /*Reg=*/0, /*isNormalMemory=*/false, + /*isMustAlias=*/false, /*isArtificial=*/true)); } } From gohman at apple.com Mon Jan 5 19:36:23 2009 From: gohman at apple.com (Dan Gohman) Date: Tue, 06 Jan 2009 01:36:23 -0000 Subject: [llvm-commits] [llvm] r61781 - /llvm/trunk/test/CodeGen/Generic/sched.ll Message-ID: <200901060136.n061aNW7014227@zion.cs.uiuc.edu> Author: djg Date: Mon Jan 5 19:36:23 2009 New Revision: 61781 URL: http://llvm.org/viewvc/llvm-project?rev=61781&view=rev Log: Delete this test; it's a duplicate of 2006-07-03-schedulers.ll. Removed: llvm/trunk/test/CodeGen/Generic/sched.ll Removed: llvm/trunk/test/CodeGen/Generic/sched.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/sched.ll?rev=61780&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/Generic/sched.ll (original) +++ llvm/trunk/test/CodeGen/Generic/sched.ll (removed) @@ -1,27 +0,0 @@ -; RUN: llvm-as < %s | llc - -declare i32 @printf(i8*, i32, float) - -define i32 @testissue(i32 %i, float %x, float %y) { - br label %bb1 - -bb1: ; preds = %bb1, %0 - %x1 = mul float %x, %y ; [#uses=1] - %y1 = mul float %y, 7.500000e-01 ; [#uses=1] - %z1 = add float %x1, %y1 ; [#uses=1] - %x2 = mul float %x, 5.000000e-01 ; [#uses=1] - %y2 = mul float %y, 0x3FECCCCCC0000000 ; [#uses=1] - %z2 = add float %x2, %y2 ; [#uses=1] - %z3 = add float %z1, %z2 ; [#uses=1] - %i1 = shl i32 %i, 3 ; [#uses=1] - %j1 = add i32 %i, 7 ; [#uses=1] - %m1 = add i32 %i1, %j1 ; [#uses=2] - %b = icmp sle i32 %m1, 6 ; [#uses=1] - br i1 %b, label %bb1, label %bb2 - -bb2: ; preds = %bb1 - %Msg = inttoptr i64 0 to i8* ; [#uses=1] - call i32 @printf( i8* %Msg, i32 %m1, float %z3 ) ; :1 [#uses=0] - ret i32 0 -} - From clattner at apple.com Mon Jan 5 19:52:15 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 5 Jan 2009 17:52:15 -0800 Subject: [llvm-commits] [llvm] r61778 - in /llvm/trunk: lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp test/CodeGen/X86/fold-pcmpeqd-0.ll In-Reply-To: <200901060119.n061J495013461@zion.cs.uiuc.edu> References: <200901060119.n061J495013461@zion.cs.uiuc.edu> Message-ID: <585971A0-F459-4BBD-ABDC-332067DE4449@apple.com> On Jan 5, 2009, at 5:19 PM, Dan Gohman wrote: > Author: djg > Date: Mon Jan 5 19:19:04 2009 > New Revision: 61778 > > URL: http://llvm.org/viewvc/llvm-project?rev=61778&view=rev > Log: > Use a latency value of 0 for the artificial edges inserted by > AddPseudoTwoAddrDeps. This lets the scheduling infrastructure > avoid recalculating node heights. In very large testcases this > was a major bottleneck. Thanks to Roman Levenstein for finding > this! > > As a side effect, fold-pcmpeqd-0.ll is now scheduled better > and it no longer requires spilling on x86-32. Nice! Can you contrive a testcase that still exercises the pcmpeqd -> constant pool entry spilling logic? -Chris From scottm at aero.org Mon Jan 5 21:36:14 2009 From: scottm at aero.org (Scott Michel) Date: Tue, 06 Jan 2009 03:36:14 -0000 Subject: [llvm-commits] [llvm] r61784 - in /llvm/trunk: lib/Target/CellSPU/SPU128InstrInfo.td lib/Target/CellSPU/SPU64InstrInfo.td lib/Target/CellSPU/SPUCallingConv.td lib/Target/CellSPU/SPUISelLowering.cpp lib/Target/CellSPU/SPUInstrInfo.cpp lib/Target/CellSPU/SPUInstrInfo.td test/CodeGen/CellSPU/i64ops.ll test/CodeGen/CellSPU/useful-harnesses/i64operations.c test/CodeGen/CellSPU/useful-harnesses/i64operations.h Message-ID: <200901060336.n063aEit017704@zion.cs.uiuc.edu> Author: pingbak Date: Mon Jan 5 21:36:14 2009 New Revision: 61784 URL: http://llvm.org/viewvc/llvm-project?rev=61784&view=rev Log: CellSPU: - Fix bugs 3194, 3195: i128 load/stores produce correct code (although, we need to ensure that i128 is 16-byte aligned in real life), and 128 zero- extends are supported. - New td file: SPU128InstrInfo.td: this is where all new i128 support should be put in the future. - Continue to hammer on i64 operations and test cases; ensure that the only remaining problem will be i64 mul. Added: llvm/trunk/lib/Target/CellSPU/SPU128InstrInfo.td llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.h Modified: llvm/trunk/lib/Target/CellSPU/SPU64InstrInfo.td llvm/trunk/lib/Target/CellSPU/SPUCallingConv.td 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/i64ops.ll llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.c Added: llvm/trunk/lib/Target/CellSPU/SPU128InstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPU128InstrInfo.td?rev=61784&view=auto ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPU128InstrInfo.td (added) +++ llvm/trunk/lib/Target/CellSPU/SPU128InstrInfo.td Mon Jan 5 21:36:14 2009 @@ -0,0 +1,22 @@ +//===--- SPU128InstrInfo.td - Cell SPU 128-bit operations -*- tablegen -*--===// +// +// Cell SPU 128-bit operations +// +// Primary author: Scott Michel (scottm at aero.org) +//===----------------------------------------------------------------------===// + +// zext 32->128: Zero extend 32-bit to 128-bit +def : Pat<(i128 (zext R32C:$rSrc)), + (ROTQMBYIr128_zext_r32 R32C:$rSrc, 12)>; + +// zext 64->128: Zero extend 64-bit to 128-bit +def : Pat<(i128 (zext R64C:$rSrc)), + (ROTQMBYIr128_zext_r64 R64C:$rSrc, 8)>; + +// zext 16->128: Zero extend 16-bit to 128-bit +def : Pat<(i128 (zext R16C:$rSrc)), + (ROTQMBYIr128_zext_r32 (ANDi16i32 R16C:$rSrc, (ILAr32 0xffff)), 12)>; + +// zext 8->128: Zero extend 8-bit to 128-bit +def : Pat<(i128 (zext R8C:$rSrc)), + (ROTQMBYIr128_zext_r32 (ANDIi8i32 R8C:$rSrc, 0xf), 12)>; Modified: llvm/trunk/lib/Target/CellSPU/SPU64InstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPU64InstrInfo.td?rev=61784&r1=61783&r2=61784&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPU64InstrInfo.td (original) +++ llvm/trunk/lib/Target/CellSPU/SPU64InstrInfo.td Mon Jan 5 21:36:14 2009 @@ -48,8 +48,8 @@ // is in a 32-bit register that contains a select mask pattern (i.e., gather // bits result): -def : Pat<(select R32C:$rC, R64C:$rB, R64C:$rA), - (SELBr64_cond R64C:$rA, R64C:$rB, (FSMr32 R32C:$rC))>; +def : Pat<(select R32C:$rCond, R64C:$rFalse, R64C:$rTrue), + (SELBr64_cond R64C:$rTrue, R64C:$rFalse, (FSMr32 R32C:$rCond))>; //-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ // The i64 seteq fragment that does the scalar->vector conversion and Modified: llvm/trunk/lib/Target/CellSPU/SPUCallingConv.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUCallingConv.td?rev=61784&r1=61783&r2=61784&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUCallingConv.td (original) +++ llvm/trunk/lib/Target/CellSPU/SPUCallingConv.td Mon Jan 5 21:36:14 2009 @@ -21,10 +21,11 @@ // Return-value convention for Cell SPU: Everything can be passed back via $3: def RetCC_SPU : CallingConv<[ - CCIfType<[i8], CCAssignToReg<[R3]>>, - CCIfType<[i16], CCAssignToReg<[R3]>>, - CCIfType<[i32], CCAssignToReg<[R3]>>, - CCIfType<[i64], CCAssignToReg<[R3]>>, + CCIfType<[i8], CCAssignToReg<[R3]>>, + CCIfType<[i16], CCAssignToReg<[R3]>>, + CCIfType<[i32], CCAssignToReg<[R3]>>, + CCIfType<[i64], CCAssignToReg<[R3]>>, + CCIfType<[i128], CCAssignToReg<[R3]>>, CCIfType<[f32, f64], CCAssignToReg<[R3]>>, CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], CCAssignToReg<[R3]>> ]>; Modified: llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp?rev=61784&r1=61783&r2=61784&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp (original) +++ llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp Mon Jan 5 21:36:14 2009 @@ -114,7 +114,7 @@ setOperationAction(ISD::ConstantFP, MVT::f64, Custom); // SPU's loads and stores have to be custom lowered: - for (unsigned sctype = (unsigned) MVT::i8; sctype < (unsigned) MVT::f128; + for (unsigned sctype = (unsigned) MVT::i8; sctype < (unsigned) MVT::i128; ++sctype) { MVT VT = (MVT::SimpleValueType)sctype; @@ -947,6 +947,9 @@ case MVT::i64: ArgRegClass = &SPU::R64CRegClass; break; + case MVT::i128: + ArgRegClass = &SPU::GPRCRegClass; + break; case MVT::f32: ArgRegClass = &SPU::R32FPRegClass; break; @@ -1070,6 +1073,8 @@ switch (Arg.getValueType().getSimpleVT()) { default: assert(0 && "Unexpected ValueType for argument!"); + case MVT::i8: + case MVT::i16: case MVT::i32: case MVT::i64: case MVT::i128: @@ -1220,6 +1225,11 @@ ResultVals[0] = Chain.getValue(0); NumResults = 1; break; + case MVT::i128: + Chain = DAG.getCopyFromReg(Chain, SPU::R3, MVT::i128, InFlag).getValue(1); + ResultVals[0] = Chain.getValue(0); + NumResults = 1; + break; case MVT::f32: case MVT::f64: Chain = DAG.getCopyFromReg(Chain, SPU::R3, TheCall->getValueType(0), @@ -2182,24 +2192,48 @@ MVT Op0VT = Op0.getValueType(); MVT Op0VecVT = MVT::getVectorVT(Op0VT, (128 / Op0VT.getSizeInBits())); - assert(Op0VT == MVT::i32 - && "CellSPU: Zero/sign extending something other than i32"); - - DEBUG(cerr << "CellSPU.LowerI64Math: lowering zero/sign/any extend\n"); - SDValue PromoteScalar = DAG.getNode(SPUISD::PREFSLOT2VEC, Op0VecVT, Op0); // Use a shuffle to zero extend the i32 to i64 directly: - SDValue shufMask = DAG.getNode(ISD::BUILD_VECTOR, Op0VecVT, - DAG.getConstant(0x80808080, MVT::i32), DAG.getConstant(0x00010203, - MVT::i32), DAG.getConstant(0x80808080, MVT::i32), DAG.getConstant( - 0x08090a0b, MVT::i32)); - SDValue zextShuffle = DAG.getNode(SPUISD::SHUFB, Op0VecVT, PromoteScalar, - PromoteScalar, shufMask); + SDValue shufMask; - return DAG.getNode(SPUISD::VEC2PREFSLOT, VT, DAG.getNode(ISD::BIT_CONVERT, - VecVT, zextShuffle)); + switch (Op0VT.getSimpleVT()) { + default: + cerr << "CellSPU LowerI64Math: Unhandled zero/any extend MVT\n"; + abort(); + /*NOTREACHED*/ + break; + case MVT::i32: + shufMask = DAG.getNode(ISD::BUILD_VECTOR, MVT::v4i32, + DAG.getConstant(0x80808080, MVT::i32), + DAG.getConstant(0x00010203, MVT::i32), + DAG.getConstant(0x80808080, MVT::i32), + DAG.getConstant(0x08090a0b, MVT::i32)); + break; + + case MVT::i16: + shufMask = DAG.getNode(ISD::BUILD_VECTOR, MVT::v4i32, + DAG.getConstant(0x80808080, MVT::i32), + DAG.getConstant(0x80800203, MVT::i32), + DAG.getConstant(0x80808080, MVT::i32), + DAG.getConstant(0x80800a0b, MVT::i32)); + break; + + case MVT::i8: + shufMask = DAG.getNode(ISD::BUILD_VECTOR, MVT::v4i32, + DAG.getConstant(0x80808080, MVT::i32), + DAG.getConstant(0x80808003, MVT::i32), + DAG.getConstant(0x80808080, MVT::i32), + DAG.getConstant(0x8080800b, MVT::i32)); + break; + } + + SDValue zextShuffle = DAG.getNode(SPUISD::SHUFB, Op0VecVT, + PromoteScalar, PromoteScalar, shufMask); + + return DAG.getNode(SPUISD::VEC2PREFSLOT, VT, + DAG.getNode(ISD::BIT_CONVERT, VecVT, zextShuffle)); } case ISD::ADD: { Modified: llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp?rev=61784&r1=61783&r2=61784&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp (original) +++ llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp Mon Jan 5 21:36:14 2009 @@ -130,7 +130,32 @@ case SPU::ORi32_v4i32: case SPU::ORi64_v2i64: case SPU::ORf32_v4f32: - case SPU::ORf64_v2f64: { + case SPU::ORf64_v2f64: + case SPU::ORi128_r64: + case SPU::ORi128_f64: + case SPU::ORi128_r32: + 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::ORr16_r32: + case SPU::ORr8_r32: + case SPU::ORr32_r16: + case SPU::ORr32_r8: + case SPU::ORr32_r64: + case SPU::ORr16_r64: + case SPU::ORr8_r64: + case SPU::ORr64_r32: + case SPU::ORr64_r16: + case SPU::ORr64_r8: + { assert(MI.getNumOperands() == 2 && MI.getOperand(0).isReg() && MI.getOperand(1).isReg() && Modified: llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td?rev=61784&r1=61783&r2=61784&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td (original) +++ llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td Mon Jan 5 21:36:14 2009 @@ -1140,48 +1140,66 @@ XSBHInst<(outs VECREG:$rDst), (ins VECREG:$rSrc), [(set (v8i16 VECREG:$rDst), (sext (vectype VECREG:$rSrc)))]>; -class XSBHInRegInst: +class XSBHInRegInst pattern>: XSBHInst<(outs rclass:$rDst), (ins rclass:$rSrc), - [(set rclass:$rDst, (sext_inreg rclass:$rSrc, i8))]>; + pattern>; multiclass ExtendByteHalfword { - def v16i8: XSBHVecInst; - def r16: XSBHInRegInst; - def r8: XSBHInst<(outs R16C:$rDst), (ins R8C:$rSrc), - [(set R16C:$rDst, (sext R8C:$rSrc))]>; + def v16i8: XSBHVecInst; + def r8: XSBHInst<(outs R16C:$rDst), (ins R8C:$rSrc), + [(set R16C:$rDst, (sext R8C:$rSrc))]>; + def r16: XSBHInRegInst; // 32-bit form for XSBH: used to sign extend 8-bit quantities to 16-bit // quantities to 32-bit quantities via a 32-bit register (see the sext 8->32 // pattern below). Intentionally doesn't match a pattern because we want the // sext 8->32 pattern to do the work for us, namely because we need the extra // XSHWr32. - def r32: XSBHInRegInst; + def r32: XSBHInRegInst; + + // Same as the 32-bit version, but for i64 + def r64: XSBHInRegInst; } defm XSBH : ExtendByteHalfword; // Sign extend halfwords to words: -def XSHWvec: - RRForm_1<0b01101101010, (outs VECREG:$rDest), (ins VECREG:$rSrc), - "xshw\t$rDest, $rSrc", IntegerOp, - [(set (v4i32 VECREG:$rDest), (sext (v8i16 VECREG:$rSrc)))]>; - -def XSHWr32: - RRForm_1<0b01101101010, (outs R32C:$rDst), (ins R32C:$rSrc), - "xshw\t$rDst, $rSrc", IntegerOp, - [(set R32C:$rDst, (sext_inreg R32C:$rSrc, i16))]>; - -def XSHWr16: - RRForm_1<0b01101101010, (outs R32C:$rDst), (ins R16C:$rSrc), - "xshw\t$rDst, $rSrc", IntegerOp, - [(set R32C:$rDst, (sext R16C:$rSrc))]>; + +class XSHWInst pattern>: + RRForm_1<0b01101101010, OOL, IOL, "xshw\t$rDest, $rSrc", + IntegerOp, pattern>; + +class XSHWVecInst: + XSHWInst<(outs VECREG:$rDest), (ins VECREG:$rSrc), + [(set (out_vectype VECREG:$rDest), + (sext (in_vectype VECREG:$rSrc)))]>; + +class XSHWInRegInst pattern>: + XSHWInst<(outs rclass:$rDest), (ins rclass:$rSrc), + pattern>; + +class XSHWRegInst: + XSHWInst<(outs rclass:$rDest), (ins R16C:$rSrc), + [(set rclass:$rDest, (sext R16C:$rSrc))]>; + +multiclass ExtendHalfwordWord { + def v4i32: XSHWVecInst; + + def r16: XSHWRegInst; + + def r32: XSHWInRegInst; + def r64: XSHWInRegInst; +} + +defm XSHW : ExtendHalfwordWord; // Sign-extend words to doublewords (32->64 bits) class XSWDInst pattern>: - RRForm_1<0b01100101010, OOL, IOL, - "xswd\t$rDst, $rSrc", IntegerOp, - pattern>; + RRForm_1<0b01100101010, OOL, IOL, "xswd\t$rDst, $rSrc", + IntegerOp, pattern>; class XSWDVecInst: XSWDInst<(outs VECREG:$rDst), (ins VECREG:$rSrc), @@ -1411,6 +1429,18 @@ class ORCvtGPRCReg: ORCvtForm<(outs rclass:$rT), (ins GPRC:$rA)>; + +class ORCvtFormR32Reg: + ORCvtForm<(outs rclass:$rT), (ins R32C:$rA)>; + +class ORCvtFormRegR32: + ORCvtForm<(outs R32C:$rT), (ins rclass:$rA)>; + +class ORCvtFormR64Reg: + ORCvtForm<(outs rclass:$rT), (ins R64C:$rA)>; + +class ORCvtFormRegR64: + ORCvtForm<(outs R64C:$rT), (ins rclass:$rA)>; class ORCvtGPRCVec: ORCvtForm<(outs VECREG:$rT), (ins GPRC:$rA)>; @@ -1481,6 +1511,24 @@ // Conversion from vector to GPRC def vec_i128: ORCvtGPRCVec; + + // Conversion from register to R32C: + def r16_r32: ORCvtFormRegR32; + def r8_r32: ORCvtFormRegR32; + + // Conversion from R32C to register + def r32_r16: ORCvtFormR32Reg; + def r32_r8: ORCvtFormR32Reg; + + // Conversion from register to R64C: + def r32_r64: ORCvtFormR64Reg; + def r16_r64: ORCvtFormR64Reg; + def r8_r64: ORCvtFormR64Reg; + + // Conversion from R64C to register + def r64_r32: ORCvtFormRegR64; + def r64_r16: ORCvtFormRegR64; + def r64_r8: ORCvtFormRegR64; } defm OR : BitwiseOr; @@ -2682,7 +2730,7 @@ (ROTMIr32 R32C:$rA, uimm7:$val)>; //-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ -// ROTQMBYvec: This is a vector form merely so that when used in an +// ROTQMBY: This is a vector form merely so that when used in an // instruction pattern, type checking will succeed. This instruction assumes // that the user knew to negate $rB. //-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ @@ -2720,10 +2768,16 @@ ROTQMBYIInst<(outs VECREG:$rT), (ins VECREG:$rA, rotNeg7imm:$val), [/* no pattern */]>; -class ROTQMBYIRegInst: +class ROTQMBYIRegInst: ROTQMBYIInst<(outs rclass:$rT), (ins rclass:$rA, optype:$val), [/* no pattern */]>; +// 128-bit zero extension form: +class ROTQMBYIZExtInst: + ROTQMBYIInst<(outs GPRC:$rT), (ins rclass:$rA, optype:$val), + [/* no pattern */]>; + multiclass RotateQuadBytesImm { def v16i8: ROTQMBYIVecInst; @@ -2733,6 +2787,11 @@ def r128: ROTQMBYIRegInst; def r64: ROTQMBYIRegInst; + + def r128_zext_r8: ROTQMBYIZExtInst; + def r128_zext_r16: ROTQMBYIZExtInst; + def r128_zext_r32: ROTQMBYIZExtInst; + def r128_zext_r64: ROTQMBYIZExtInst; } defm ROTQMBYI : RotateQuadBytesImm; @@ -4339,6 +4398,13 @@ def : Pat<(i32 (sext R8C:$rSrc)), (XSHWr16 (XSBHr8 R8C:$rSrc))>; +// sext 8->64: Sign extend bytes to double word +def : Pat<(sext_inreg R64C:$rSrc, i8), + (XSWDr64_inreg (XSHWr64 (XSBHr64 R64C:$rSrc)))>; + +def : Pat<(i64 (sext R8C:$rSrc)), + (XSWDr64 (XSHWr16 (XSBHr8 R8C:$rSrc)))>; + // zext 8->16: Zero extend bytes to halfwords def : Pat<(i16 (zext R8C:$rSrc)), (ANDHIi8i16 R8C:$rSrc, 0xff)>; @@ -4347,14 +4413,29 @@ def : Pat<(i32 (zext R8C:$rSrc)), (ANDIi8i32 R8C:$rSrc, 0xff)>; -// anyext 8->16: Extend 8->16 bits, irrespective of sign +// zext 8->64: Zero extend bytes to double words +def : Pat<(i64 (zext R8C:$rSrc)), + (ORi64_v2i64 (SELBv4i32 (ROTQMBYv4i32 + (ORv4i32_i32 (ANDIi8i32 R8C:$rSrc, 0xff)), + 0x4), + (ILv4i32 0x0), + (FSMBIv4i32 0x0f0f)))>; + +// anyext 8->16: Extend 8->16 bits, irrespective of sign, preserves high bits def : Pat<(i16 (anyext R8C:$rSrc)), (ORHIi8i16 R8C:$rSrc, 0)>; -// anyext 8->32: Extend 8->32 bits, irrespective of sign +// anyext 8->32: Extend 8->32 bits, irrespective of sign, preserves high bits def : Pat<(i32 (anyext R8C:$rSrc)), (ORIi8i32 R8C:$rSrc, 0)>; +// sext 16->64: Sign extend halfword to double word +def : Pat<(sext_inreg R64C:$rSrc, i16), + (XSWDr64_inreg (XSHWr64 R64C:$rSrc))>; + +def : Pat<(sext R16C:$rSrc), + (XSWDr64 (XSHWr16 R16C:$rSrc))>; + // zext 16->32: Zero extend halfwords to words def : Pat<(i32 (zext R16C:$rSrc)), (ANDi16i32 R16C:$rSrc, (ILAr32 0xffff))>; @@ -4461,15 +4542,6 @@ (SPUlo tconstpool:$in, 0)), (IOHLlo (ILHUhi tconstpool:$in), tconstpool:$in)>; -/* -def : Pat<(SPUindirect R32C:$sp, i32ImmSExt10:$imm), - (AIr32 R32C:$sp, i32ImmSExt10:$imm)>; - -def : Pat<(SPUindirect R32C:$sp, imm:$imm), - (Ar32 R32C:$sp, - (IOHLr32 (ILHUr32 (HI16 imm:$imm)), (LO16 imm:$imm)))>; - */ - def : Pat<(add (SPUhi tglobaladdr:$in, 0), (SPUlo tglobaladdr:$in, 0)), (IOHLlo (ILHUhi tglobaladdr:$in), tglobaladdr:$in)>; @@ -4488,3 +4560,5 @@ include "SPUMathInstr.td" // 64-bit "instructions"/support include "SPU64InstrInfo.td" +// 128-bit "instructions"/support +include "SPU128InstrInfo.td" Modified: llvm/trunk/test/CodeGen/CellSPU/i64ops.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/i64ops.ll?rev=61784&r1=61783&r2=61784&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/i64ops.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/i64ops.ll Mon Jan 5 21:36:14 2009 @@ -1,6 +1,8 @@ ; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s -; RUN: grep xswd %t1.s | count 1 -; RUN: grep shufb %t1.s | count 2 +; RUN: grep xswd %t1.s | count 3 +; RUN: grep xsbh %t1.s | count 1 +; RUN: grep xshw %t1.s | count 2 +; RUN: grep shufb %t1.s | count 4 ; RUN: grep cg %t1.s | count 1 ; RUN: grep addx %t1.s | count 1 @@ -8,11 +10,31 @@ 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" +define i64 @sext_i64_i8(i8 %a) nounwind { + %1 = sext i8 %a to i64 + ret i64 %1 +} + +define i64 @sext_i64_i16(i16 %a) nounwind { + %1 = sext i16 %a to i64 + ret i64 %1 +} + define i64 @sext_i64_i32(i32 %a) nounwind { %1 = sext i32 %a to i64 ret i64 %1 } +define i64 @zext_i64_i8(i8 %a) nounwind { + %1 = zext i8 %a to i64 + ret i64 %1 +} + +define i64 @zext_i64_i16(i16 %a) nounwind { + %1 = zext i16 %a to i64 + ret i64 %1 +} + define i64 @zext_i64_i32(i32 %a) nounwind { %1 = zext i32 %a to i64 ret i64 %1 Modified: llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.c URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.c?rev=61784&r1=61783&r2=61784&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.c (original) +++ llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.c Mon Jan 5 21:36:14 2009 @@ -1,20 +1,12 @@ #include - -#define TRUE_VAL (!0) -#define FALSE_VAL 0 -#define ARR_SIZE(arr) (sizeof(arr)/sizeof(arr[0])) - -typedef unsigned long long int uint64_t; -typedef long long int int64_t; - -/* ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- */ +#include "i64operations.h" int64_t tval_a = 1234567890003LL; int64_t tval_b = 2345678901235LL; int64_t tval_c = 1234567890001LL; int64_t tval_d = 10001LL; int64_t tval_e = 10000LL; -int64_t tval_f = -1068103409991LL; +uint64_t tval_f = 0xffffff0750135eb9; /* ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- */ @@ -132,44 +124,6 @@ /* ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- */ -struct harness_int64_pred { - const char *fmt_string; - int64_t *lhs; - int64_t *rhs; - int64_t *select_a; - int64_t *select_b; - int expected; - int64_t *select_expected; -}; - -struct harness_uint64_pred { - const char *fmt_string; - uint64_t *lhs; - uint64_t *rhs; - uint64_t *select_a; - uint64_t *select_b; - int expected; - uint64_t *select_expected; -}; - -struct int64_pred_s { - const char *name; - int (*predfunc) (int64_t, int64_t); - int64_t (*selfunc) (int64_t, int64_t, int64_t, int64_t); - struct harness_int64_pred *tests; - int n_tests; -}; - -struct uint64_pred_s { - const char *name; - int (*predfunc) (uint64_t, uint64_t); - uint64_t (*selfunc) (uint64_t, uint64_t, uint64_t, uint64_t); - struct harness_uint64_pred *tests; - int n_tests; -}; - -/* ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- */ - struct harness_int64_pred int64_tests_eq[] = { {"a %s a", &tval_a, &tval_a, &tval_c, &tval_d, TRUE_VAL, &tval_c}, {"a %s b", &tval_a, &tval_b, &tval_c, &tval_d, FALSE_VAL, &tval_d}, @@ -304,8 +258,9 @@ int j, failed = 0; for (j = 0; j < pred->n_tests; ++j) { - int pred_result = - (*pred->predfunc) (*pred->tests[j].lhs, *pred->tests[j].rhs); + int pred_result; + + pred_result = (*pred->predfunc) (*pred->tests[j].lhs, *pred->tests[j].rhs); if (pred_result != pred->tests[j].expected) { char str[64]; @@ -313,27 +268,39 @@ sprintf(str, pred->tests[j].fmt_string, pred->name); printf("%s: returned value is %d, expecting %d\n", str, pred_result, pred->tests[j].expected); - printf(" lhs = %19lld (0x%016llx)\n", *pred->tests[j].lhs, *pred->tests[j].lhs); - printf(" rhs = %19lld (0x%016llx)\n", *pred->tests[j].rhs, *pred->tests[j].rhs); + printf(" lhs = %19lld (0x%016llx)\n", *pred->tests[j].lhs, + *pred->tests[j].lhs); + printf(" rhs = %19lld (0x%016llx)\n", *pred->tests[j].rhs, + *pred->tests[j].rhs); ++failed; } else { - int64_t selresult = (pred->selfunc) (*pred->tests[j].lhs, *pred->tests[j].rhs, - *pred->tests[j].select_a, *pred->tests[j].select_b); + int64_t selresult; + + selresult = (pred->selfunc) (*pred->tests[j].lhs, *pred->tests[j].rhs, + *pred->tests[j].select_a, + *pred->tests[j].select_b); + if (selresult != *pred->tests[j].select_expected) { char str[64]; sprintf(str, pred->tests[j].fmt_string, pred->name); printf("%s select: returned value is %d, expecting %d\n", str, pred_result, pred->tests[j].expected); - printf(" lhs = %19lld (0x%016llx)\n", *pred->tests[j].lhs, *pred->tests[j].lhs); - printf(" rhs = %19lld (0x%016llx)\n", *pred->tests[j].rhs, *pred->tests[j].rhs); - printf(" true = %19lld (0x%016llx)\n", *pred->tests[j].select_a, *pred->tests[j].select_a); - printf(" false = %19lld (0x%016llx)\n", *pred->tests[j].select_b, *pred->tests[j].select_b); + printf(" lhs = %19lld (0x%016llx)\n", *pred->tests[j].lhs, + *pred->tests[j].lhs); + printf(" rhs = %19lld (0x%016llx)\n", *pred->tests[j].rhs, + *pred->tests[j].rhs); + printf(" true = %19lld (0x%016llx)\n", *pred->tests[j].select_a, + *pred->tests[j].select_a); + printf(" false = %19lld (0x%016llx)\n", *pred->tests[j].select_b, + *pred->tests[j].select_b); ++failed; } } } + printf(" %d tests performed, should be %d.\n", j, pred->n_tests); + return failed; } @@ -343,77 +310,240 @@ int j, failed = 0; for (j = 0; j < pred->n_tests; ++j) { - int pred_result = (*pred->predfunc) (*pred->tests[j].lhs, *pred->tests[j].rhs); + int pred_result; + pred_result = (*pred->predfunc) (*pred->tests[j].lhs, *pred->tests[j].rhs); if (pred_result != pred->tests[j].expected) { char str[64]; sprintf(str, pred->tests[j].fmt_string, pred->name); printf("%s: returned value is %d, expecting %d\n", str, pred_result, pred->tests[j].expected); - printf(" lhs = %19llu (0x%016llx)\n", *pred->tests[j].lhs, *pred->tests[j].lhs); - printf(" rhs = %19llu (0x%016llx)\n", *pred->tests[j].rhs, *pred->tests[j].rhs); + printf(" lhs = %19llu (0x%016llx)\n", *pred->tests[j].lhs, + *pred->tests[j].lhs); + printf(" rhs = %19llu (0x%016llx)\n", *pred->tests[j].rhs, + *pred->tests[j].rhs); ++failed; } else { - uint64_t selresult = (pred->selfunc) (*pred->tests[j].lhs, *pred->tests[j].rhs, - *pred->tests[j].select_a, *pred->tests[j].select_b); + uint64_t selresult; + + selresult = (pred->selfunc) (*pred->tests[j].lhs, *pred->tests[j].rhs, + *pred->tests[j].select_a, + *pred->tests[j].select_b); if (selresult != *pred->tests[j].select_expected) { char str[64]; sprintf(str, pred->tests[j].fmt_string, pred->name); printf("%s select: returned value is %d, expecting %d\n", str, pred_result, pred->tests[j].expected); - printf(" lhs = %19llu (0x%016llx)\n", *pred->tests[j].lhs, *pred->tests[j].lhs); - printf(" rhs = %19llu (0x%016llx)\n", *pred->tests[j].rhs, *pred->tests[j].rhs); - printf(" true = %19llu (0x%016llx)\n", *pred->tests[j].select_a, *pred->tests[j].select_a); - printf(" false = %19llu (0x%016llx)\n", *pred->tests[j].select_b, *pred->tests[j].select_b); + printf(" lhs = %19llu (0x%016llx)\n", *pred->tests[j].lhs, + *pred->tests[j].lhs); + printf(" rhs = %19llu (0x%016llx)\n", *pred->tests[j].rhs, + *pred->tests[j].rhs); + printf(" true = %19llu (0x%016llx)\n", *pred->tests[j].select_a, + *pred->tests[j].select_a); + printf(" false = %19llu (0x%016llx)\n", *pred->tests[j].select_b, + *pred->tests[j].select_b); ++failed; } } - } + printf(" %d tests performed, should be %d.\n", j, pred->n_tests); + return failed; } /* ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- */ +int +test_i64_sext_i32(int in, int64_t expected) { + int64_t result = (int64_t) in; + + if (result != expected) { + char str[64]; + sprintf(str, "i64_sext_i32(%d) returns %lld\n", in, result); + return 1; + } + + return 0; +} + +int +test_i64_sext_i16(short in, int64_t expected) { + int64_t result = (int64_t) in; + + if (result != expected) { + char str[64]; + sprintf(str, "i64_sext_i16(%hd) returns %lld\n", in, result); + return 1; + } + + return 0; +} + +int +test_i64_sext_i8(signed char in, int64_t expected) { + int64_t result = (int64_t) in; + + if (result != expected) { + char str[64]; + sprintf(str, "i64_sext_i8(%d) returns %lld\n", in, result); + return 1; + } + + return 0; +} + +int +test_i64_zext_i32(unsigned int in, uint64_t expected) { + uint64_t result = (uint64_t) in; + + if (result != expected) { + char str[64]; + sprintf(str, "i64_zext_i32(%u) returns %llu\n", in, result); + return 1; + } + + return 0; +} + +int +test_i64_zext_i16(unsigned short in, uint64_t expected) { + uint64_t result = (uint64_t) in; + + if (result != expected) { + char str[64]; + sprintf(str, "i64_zext_i16(%hu) returns %llu\n", in, result); + return 1; + } + + return 0; +} + +int +test_i64_zext_i8(unsigned char in, uint64_t expected) { + uint64_t result = (uint64_t) in; + + if (result != expected) { + char str[64]; + sprintf(str, "i64_zext_i8(%u) returns %llu\n", in, result); + return 1; + } + + return 0; +} + +/* ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- */ + +int64_t +i64_shl_const(int64_t a) { + return a << 10; +} + +int64_t +i64_shl(int64_t a, int amt) { + return a << amt; +} + uint64_t -i64_shl_const(uint64_t a) -{ +u64_shl_const(uint64_t a) { return a << 10; } uint64_t -i64_shl(uint64_t a, int amt) -{ +u64_shl(uint64_t a, int amt) { return a << amt; } +int64_t +i64_srl_const(int64_t a) { + return a >> 10; +} + +int64_t +i64_srl(int64_t a, int amt) { + return a >> amt; +} + uint64_t -i64_srl_const(uint64_t a) -{ +u64_srl_const(uint64_t a) { return a >> 10; } uint64_t -i64_srl(uint64_t a, int amt) -{ +u64_srl(uint64_t a, int amt) { return a >> amt; } int64_t -i64_sra_const(int64_t a) -{ +i64_sra_const(int64_t a) { return a >> 10; } int64_t -i64_sra(int64_t a, int amt) -{ +i64_sra(int64_t a, int amt) { + return a >> amt; +} + +uint64_t +u64_sra_const(uint64_t a) { + return a >> 10; +} + +uint64_t +u64_sra(uint64_t a, int amt) { return a >> amt; } +int +test_u64_constant_shift(const char *func_name, uint64_t (*func)(uint64_t), uint64_t a, uint64_t expected) { + uint64_t result = (*func)(a); + + if (result != expected) { + printf("%s(0x%016llx) returns 0x%016llx, expected 0x%016llx\n", func_name, a, result, expected); + return 1; + } + + return 0; +} + +int +test_i64_constant_shift(const char *func_name, int64_t (*func)(int64_t), int64_t a, int64_t expected) { + int64_t result = (*func)(a); + + if (result != expected) { + printf("%s(0x%016llx) returns 0x%016llx, expected 0x%016llx\n", func_name, a, result, expected); + return 1; + } + + return 0; +} + +int +test_u64_variable_shift(const char *func_name, uint64_t (*func)(uint64_t, int), uint64_t a, unsigned int b, uint64_t expected) { + uint64_t result = (*func)(a, b); + + if (result != expected) { + printf("%s(0x%016llx, %d) returns 0x%016llx, expected 0x%016llx\n", func_name, a, b, result, expected); + return 1; + } + + return 0; +} + +int +test_i64_variable_shift(const char *func_name, int64_t (*func)(int64_t, int), int64_t a, unsigned int b, int64_t expected) { + int64_t result = (*func)(a, b); + + if (result != expected) { + printf("%s(0x%016llx, %d) returns 0x%016llx, expected 0x%016llx\n", func_name, a, b, result, expected); + return 1; + } + + return 0; +} + /* ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- */ int @@ -423,12 +553,12 @@ const char *something_failed = " %d tests failed.\n"; const char *all_tests_passed = " All tests passed.\n"; - printf("a = %16lld (0x%016llx)\n", tval_a, tval_a); - printf("b = %16lld (0x%016llx)\n", tval_b, tval_b); - printf("c = %16lld (0x%016llx)\n", tval_c, tval_c); - printf("d = %16lld (0x%016llx)\n", tval_d, tval_d); - printf("e = %16lld (0x%016llx)\n", tval_e, tval_e); - printf("f = %16lld (0x%016llx)\n", tval_f, tval_f); + printf("tval_a = %20lld (0x%020llx)\n", tval_a, tval_a); + printf("tval_b = %20lld (0x%020llx)\n", tval_b, tval_b); + printf("tval_c = %20lld (0x%020llx)\n", tval_c, tval_c); + printf("tval_d = %20lld (0x%020llx)\n", tval_d, tval_d); + printf("tval_e = %20lld (0x%020llx)\n", tval_e, tval_e); + printf("tval_f = %20llu (0x%020llx)\n", tval_f, tval_f); printf("----------------------------------------\n"); for (i = 0; i < ARR_SIZE(int64_preds); ++i) { @@ -453,22 +583,70 @@ printf("----------------------------------------\n"); } - printf("a = 0x%016llx\n", tval_a); - printf("i64_shl_const(a) = 0x%016llx\n", i64_shl_const(tval_a)); - printf("i64_shl(a) = 0x%016llx\n", i64_shl(tval_a, 10)); - printf("i64_srl_const(a) = 0x%016llx\n", i64_srl_const(tval_a)); - printf("i64_srl(a) = 0x%016llx\n", i64_srl(tval_a, 10)); - printf("i64_sra_const(a) = 0x%016llx\n", i64_sra_const(tval_a)); - printf("i64_sra(a) = 0x%016llx\n", i64_sra(tval_a, 10)); + /*----------------------------------------------------------------------*/ + + puts("signed/zero-extend tests:"); + + failed = 0; + failed += test_i64_sext_i32(-1, -1LL); + failed += test_i64_sext_i32(10, 10LL); + failed += test_i64_sext_i32(0x7fffffff, 0x7fffffffLL); + failed += test_i64_sext_i16(-1, -1LL); + failed += test_i64_sext_i16(10, 10LL); + failed += test_i64_sext_i16(0x7fff, 0x7fffLL); + failed += test_i64_sext_i8(-1, -1LL); + failed += test_i64_sext_i8(10, 10LL); + failed += test_i64_sext_i8(0x7f, 0x7fLL); + + failed += test_i64_zext_i32(0xffffffff, 0x00000000ffffffffLLU); + failed += test_i64_zext_i32(0x01234567, 0x0000000001234567LLU); + failed += test_i64_zext_i16(0xffff, 0x000000000000ffffLLU); + failed += test_i64_zext_i16(0x569a, 0x000000000000569aLLU); + failed += test_i64_zext_i8(0xff, 0x00000000000000ffLLU); + failed += test_i64_zext_i8(0xa0, 0x00000000000000a0LLU); + + if (failed > 0) { + printf(" %d tests failed.\n", failed); + } else { + printf(" All tests passed.\n"); + } + printf("----------------------------------------\n"); - printf("f = 0x%016llx\n", tval_f); - printf("i64_shl_const(f) = 0x%016llx\n", i64_shl_const(tval_f)); - printf("i64_shl(f) = 0x%016llx\n", i64_shl(tval_f, 10)); - printf("i64_srl_const(f) = 0x%016llx\n", i64_srl_const(tval_f)); - printf("i64_srl(f) = 0x%016llx\n", i64_srl(tval_f, 10)); - printf("i64_sra_const(f) = 0x%016llx\n", i64_sra_const(tval_f)); - printf("i64_sra(f) = 0x%016llx\n", i64_sra(tval_f, 10)); + failed = 0; + puts("signed left/right shift tests:"); + failed += test_i64_constant_shift("i64_shl_const", i64_shl_const, tval_a, 0x00047dc7ec114c00LL); + failed += test_i64_variable_shift("i64_shl", i64_shl, tval_a, 10, 0x00047dc7ec114c00LL); + failed += test_i64_constant_shift("i64_srl_const", i64_srl_const, tval_a, 0x0000000047dc7ec1LL); + failed += test_i64_variable_shift("i64_srl", i64_srl, tval_a, 10, 0x0000000047dc7ec1LL); + failed += test_i64_constant_shift("i64_sra_const", i64_sra_const, tval_a, 0x0000000047dc7ec1LL); + failed += test_i64_variable_shift("i64_sra", i64_sra, tval_a, 10, 0x0000000047dc7ec1LL); + + if (failed > 0) { + printf(" %d tests ailed.\n", failed); + } else { + printf(" All tests passed.\n"); + } + + printf("----------------------------------------\n"); + + failed = 0; + puts("unsigned left/right shift tests:"); + failed += test_u64_constant_shift("u64_shl_const", u64_shl_const, tval_f, 0xfffc1d404d7ae400LL); + failed += test_u64_variable_shift("u64_shl", u64_shl, tval_f, 10, 0xfffc1d404d7ae400LL); + failed += test_u64_constant_shift("u64_srl_const", u64_srl_const, tval_f, 0x003fffffc1d404d7LL); + failed += test_u64_variable_shift("u64_srl", u64_srl, tval_f, 10, 0x003fffffc1d404d7LL); + failed += test_i64_constant_shift("i64_sra_const", i64_sra_const, tval_f, 0xffffffffc1d404d7LL); + failed += test_i64_variable_shift("i64_sra", i64_sra, tval_f, 10, 0xffffffffc1d404d7LL); + failed += test_u64_constant_shift("u64_sra_const", u64_sra_const, tval_f, 0x003fffffc1d404d7LL); + failed += test_u64_variable_shift("u64_sra", u64_sra, tval_f, 10, 0x003fffffc1d404d7LL); + + if (failed > 0) { + printf(" %d tests ailed.\n", failed); + } else { + printf(" All tests passed.\n"); + } + printf("----------------------------------------\n"); return 0; Added: llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.h?rev=61784&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.h (added) +++ llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.h Mon Jan 5 21:36:14 2009 @@ -0,0 +1,43 @@ +#define TRUE_VAL (!0) +#define FALSE_VAL 0 +#define ARR_SIZE(arr) (sizeof(arr)/sizeof(arr[0])) + +typedef unsigned long long int uint64_t; +typedef long long int int64_t; + +/* ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- */ +struct harness_int64_pred { + const char *fmt_string; + int64_t *lhs; + int64_t *rhs; + int64_t *select_a; + int64_t *select_b; + int expected; + int64_t *select_expected; +}; + +struct harness_uint64_pred { + const char *fmt_string; + uint64_t *lhs; + uint64_t *rhs; + uint64_t *select_a; + uint64_t *select_b; + int expected; + uint64_t *select_expected; +}; + +struct int64_pred_s { + const char *name; + int (*predfunc) (int64_t, int64_t); + int64_t (*selfunc) (int64_t, int64_t, int64_t, int64_t); + struct harness_int64_pred *tests; + int n_tests; +}; + +struct uint64_pred_s { + const char *name; + int (*predfunc) (uint64_t, uint64_t); + uint64_t (*selfunc) (uint64_t, uint64_t, uint64_t, uint64_t); + struct harness_uint64_pred *tests; + int n_tests; +}; From scottm at aero.org Mon Jan 5 21:51:14 2009 From: scottm at aero.org (Scott Michel) Date: Tue, 06 Jan 2009 03:51:14 -0000 Subject: [llvm-commits] [llvm] r61785 - /llvm/trunk/lib/Target/CellSPU/README.txt Message-ID: <200901060351.n063pEQq018192@zion.cs.uiuc.edu> Author: pingbak Date: Mon Jan 5 21:51:14 2009 New Revision: 61785 URL: http://llvm.org/viewvc/llvm-project?rev=61785&view=rev Log: CellSPU: Update the README Modified: llvm/trunk/lib/Target/CellSPU/README.txt Modified: llvm/trunk/lib/Target/CellSPU/README.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/README.txt?rev=61785&r1=61784&r2=61785&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/README.txt (original) +++ llvm/trunk/lib/Target/CellSPU/README.txt Mon Jan 5 21:51:14 2009 @@ -34,16 +34,27 @@ --------------------------------------------------------------------------- -The unofficially official status page (because it's not easy to get an -officially blessed external web page from either IBM Austin or Aerospace): +TODO: +* Create a machine pass for performing dual-pipeline scheduling specifically + for CellSPU, handle inserting branch prediction instructions. - http://sites.google.com/site/llvmcellspu/ +* i32 instructions: -TODO: -* Finish branch instructions, branch prediction + * i32 division (work-in-progress) + +* i64 support (see i64operations.c test harness): + + * shifts and comparison operators: done + * sign and zero extension: done + * addition: done + * subtraction: needed + * multiplication: work-in-progress + +* i128 support: - These instructions were started, but only insofar as to get llvm-gcc-4.2's - crtbegin.ll working (which doesn't.) + * zero extension: done + * sign extension: needed + * arithmetic operators (add, sub, mul, div): needed * Double floating point support From resistor at mac.com Tue Jan 6 01:53:33 2009 From: resistor at mac.com (Owen Anderson) Date: Tue, 06 Jan 2009 07:53:33 -0000 Subject: [llvm-commits] [llvm] r61802 - /llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp Message-ID: <200901060753.n067rXqB026545@zion.cs.uiuc.edu> Author: resistor Date: Tue Jan 6 01:53:32 2009 New Revision: 61802 URL: http://llvm.org/viewvc/llvm-project?rev=61802&view=rev Log: The phi construction algorithm used for interval reconstruction is complicated by two address instructions. We need to keep track of things we've processed AS USES independetly of whether we've processed them as defs. This fixes all known miscompilations when reconstruction is turned on. Modified: llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp Modified: llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp?rev=61802&r1=61801&r2=61802&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp (original) +++ llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp Tue Jan 6 01:53:32 2009 @@ -175,6 +175,7 @@ VNInfo* PerformPHIConstruction(MachineBasicBlock::iterator use, MachineBasicBlock* MBB, LiveInterval* LI, + SmallPtrSet& Visited, DenseMap >& Defs, DenseMap >& Uses, DenseMap& NewVNs, @@ -593,6 +594,7 @@ MachineBasicBlock::iterator use, MachineBasicBlock* MBB, LiveInterval* LI, + SmallPtrSet& Visited, DenseMap >& Defs, DenseMap >& Uses, DenseMap& NewVNs, @@ -600,7 +602,9 @@ DenseMap& Phis, bool toplevel, bool intrablock) { // Return memoized result if it's available. - if (intrablock && NewVNs.count(use)) + if (toplevel && Visited.count(use) && NewVNs.count(use)) + return NewVNs[use]; + else if (!toplevel && intrablock && NewVNs.count(use)) return NewVNs[use]; else if (!intrablock && LiveOut.count(MBB)) return LiveOut[MBB]; @@ -624,8 +628,8 @@ if (MBB->pred_size() == 1) { Phis[MBB] = ret = PerformPHIConstruction((*MBB->pred_begin())->end(), - *(MBB->pred_begin()), LI, Defs, - Uses, NewVNs, LiveOut, Phis, + *(MBB->pred_begin()), LI, Visited, + Defs, Uses, NewVNs, LiveOut, Phis, false, false); unsigned EndIndex = 0; if (intrablock) { @@ -646,9 +650,9 @@ DenseMap IncomingVNs; for (MachineBasicBlock::pred_iterator PI = MBB->pred_begin(), PE = MBB->pred_end(); PI != PE; ++PI) { - VNInfo* Incoming = PerformPHIConstruction((*PI)->end(), *PI, LI, Defs, - Uses, NewVNs, LiveOut, Phis, - false, false); + VNInfo* Incoming = PerformPHIConstruction((*PI)->end(), *PI, LI, + Visited, Defs, Uses, NewVNs, + LiveOut, Phis, false, false); if (Incoming != 0) IncomingVNs[*PI] = Incoming; } @@ -732,7 +736,7 @@ // Now, recursively phi construct the VNInfo for the use we found, // and then extend it to include the instruction we care about - ret = PerformPHIConstruction(walker, MBB, LI, Defs, Uses, + ret = PerformPHIConstruction(walker, MBB, LI, Visited, Defs, Uses, NewVNs, LiveOut, Phis, false, true); // FIXME: Need to set kills properly for inter-block stuff. @@ -789,7 +793,7 @@ if (foundDef) ret = NewVNs[walker]; else - ret = PerformPHIConstruction(walker, MBB, LI, Defs, Uses, + ret = PerformPHIConstruction(walker, MBB, LI, Visited, Defs, Uses, NewVNs, LiveOut, Phis, false, true); if (foundUse && LI->isKill(ret, StartIndex)) @@ -803,8 +807,11 @@ // Memoize results so we don't have to recompute them. if (!intrablock) LiveOut[MBB] = ret; - else NewVNs[use] = ret; - + else { + NewVNs[use] = ret; + Visited.insert(use); + } + return ret; } @@ -831,7 +838,14 @@ unsigned DefIdx = LIs->getInstructionIndex(&*DI); DefIdx = LiveIntervals::getDefIndex(DefIdx); - VNInfo* NewVN = LI->getNextValue(DefIdx, /*FIXME*/ 0, Alloc); + VNInfo* NewVN = LI->getNextValue(DefIdx, 0, Alloc); + + // If the def is a move, set the copy field. + unsigned source, dest; + if (TII->isMoveInstr(*DI, source, dest)) + if (dest == LI->reg) + NewVN->copy = &*DI; + NewVNs[&*DI] = NewVN; } @@ -845,9 +859,10 @@ // the way. DenseMap LiveOut; DenseMap Phis; + SmallPtrSet Visited; for (MachineRegisterInfo::use_iterator UI = MRI->use_begin(LI->reg), UE = MRI->use_end(); UI != UE; ++UI) { - PerformPHIConstruction(&*UI, UI->getParent(), LI, Defs, + PerformPHIConstruction(&*UI, UI->getParent(), LI, Visited, Defs, Uses, NewVNs, LiveOut, Phis, true, true); } @@ -1116,7 +1131,6 @@ } RepairLiveInterval(CurrLI, ValNo, DefMI, RestoreIdx); - ++NumSplits; ++NumRemats; return true; From brukman at gmail.com Tue Jan 6 10:31:45 2009 From: brukman at gmail.com (Misha Brukman) Date: Tue, 6 Jan 2009 11:31:45 -0500 Subject: [llvm-commits] [llvm] r61540 - in /llvm/trunk/utils/unittest/googletest: Makefile README.LLVM gtest-all.cc gtest-death-test.cc gtest-internal-inl.h gtest-test-part.cc gtest.cc gtest_main.cc include/gtest/internal/gtest-internal-inl.h In-Reply-To: References: <200901010205.n0125isk030712@zion.cs.uiuc.edu> <4962301F.2010600@cs.uiuc.edu> <49627E64.2060108@cs.uiuc.edu> Message-ID: 2009/1/5 Misha Brukman > 2009/1/5 John Criswell > >> Misha Brukman wrote: >> > 2009/1/5 John Criswell > criswell at cs.uiuc.edu>> >> > 1) Can you move the copyright/license information to a LICENSE.TXT file >> > and add an entry in llvm/LICENSE.TXT? This is the established convention >> > for third party licenses and makes it easier to find what code has >> > additional licenses. >> > >> > It was already listed in llvm/LICENSE.TXT and referred to the file >> COPYING in this directory, but since you insist, I renamed it to LICENSE.TXT >> . >> > >> Sorry. I didn't notice the new text in the top level LICENSE.TXT file. >> >> Thanks for renaming the COPYING file. >> >> > 2) The code doesn't compile on my Linux machine. I get the following >> > errors with g++ 4.1.2.: >> > >> > >> /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-port.h:327:21: >> > warning: tr1/tuple: No such file or directory >> > >> /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-param-util-generated.h:2670: >> > error: 'tr1' is not a member of 'std' >> > >> /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-param-util-generated.h:2670: >> > error: 'tr1' is not a member of 'std' >> > >> /home/vadve/criswell/src/llvm22/utils/unittest/googletest/include/gtest/internal/gtest-param-util-generated.h:2670: >> > error: template argument 1 is invalid >> > >> > Do you know what the problem might be? >> > >> > Hmm, this might mean we need to run gtest's configure script to let it >> define the pre-processor tokens appropriately. I'll look into this. >> > FWIW, unittests compile and run fine under gcc 4.1.1, but I don't have >> gcc 4.1.2 installed locally. >> > >> Do you still have access to our research machines? If so, you should be >> able to log into our newer machines (maute.cs.uiuc.edu and >> gravity.cs.uiuc.edu) and use /usr/bin/g++4. >> > > Yes, I do. I just looked into gtest source code, and it doesn't look like > it needs any preprocessor tokens to get tr1 to work. > > I tried using /usr/bin/g++4 on this simple one-line file and it failed to > compile, saying the header wasn't found: > > ------8<------ > #include > ------8<------ > > This tells me that the g++ on your system might not be installed correctly, > because it works for me with gcc-4.1.1 and also because that is the location > of the header in libstdc++: > > > http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/include/tr1/tuple?view=log > > so it might be that this RedHat package was badly configured/installed and > might need to go on the list of "broken versions of GCC" for LLVM. > One more note: gcc has been shipping (a subset of) TR1 since gcc-4.0, so any release past that should support compiling that one-line file: - New containers such as tuple, array, unordered_set, unordered_map, unordered_multiset, unordered_multimap. More info here: http://gcc.gnu.org/gcc-4.0/changes.html . -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090106/87e406bf/attachment.html From lattner at apple.com Tue Jan 6 12:57:05 2009 From: lattner at apple.com (Tanya Lattner) Date: Tue, 6 Jan 2009 10:57:05 -0800 Subject: [llvm-commits] [llvm] r61784 - in /llvm/trunk: lib/Target/CellSPU/SPU128InstrInfo.td lib/Target/CellSPU/SPU64InstrInfo.td lib/Target/CellSPU/SPUCallingConv.td lib/Target/CellSPU/SPUISelLowering.cpp lib/Target/CellSPU/SPUInstrInfo.cpp lib/Target/CellSPU/SPUInstrInfo.td test/CodeGen/CellSPU/i64ops.ll test/CodeGen/CellSPU/useful-harnesses/i64operations.c test/CodeGen/CellSPU/useful-harnesses/i64operations.h In-Reply-To: <200901060336.n063aEit017704@zion.cs.uiuc.edu> References: <200901060336.n063aEit017704@zion.cs.uiuc.edu> Message-ID: <64A8BAB1-6005-496A-9B1D-AC1931FBE50E@apple.com> Scott, We no longer put author names in the files themselves. http://llvm.org/docs/DeveloperPolicy.html#attribution Thanks, Tanya On Jan 5, 2009, at 7:36 PM, Scott Michel wrote: > Author: pingbak > Date: Mon Jan 5 21:36:14 2009 > New Revision: 61784 > > URL: http://llvm.org/viewvc/llvm-project?rev=61784&view=rev > Log: > CellSPU: > - Fix bugs 3194, 3195: i128 load/stores produce correct code > (although, we > need to ensure that i128 is 16-byte aligned in real life), and 128 > zero- > extends are supported. > - New td file: SPU128InstrInfo.td: this is where all new i128 > support should > be put in the future. > - Continue to hammer on i64 operations and test cases; ensure that > the only > remaining problem will be i64 mul. > > Added: > llvm/trunk/lib/Target/CellSPU/SPU128InstrInfo.td > llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.h > Modified: > llvm/trunk/lib/Target/CellSPU/SPU64InstrInfo.td > llvm/trunk/lib/Target/CellSPU/SPUCallingConv.td > 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/i64ops.ll > llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.c > > Added: llvm/trunk/lib/Target/CellSPU/SPU128InstrInfo.td > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPU128InstrInfo.td?rev=61784&view=auto > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/Target/CellSPU/SPU128InstrInfo.td (added) > +++ llvm/trunk/lib/Target/CellSPU/SPU128InstrInfo.td Mon Jan 5 > 21:36:14 2009 > @@ -0,0 +1,22 @@ > +//===--- SPU128InstrInfo.td - Cell SPU 128-bit operations -*- > tablegen -*--===// > +// > +// Cell SPU 128-bit operations > +// > +// Primary author: Scott Michel (scottm at aero.org) > +// > = > = > = > ----------------------------------------------------------------------= > ==// > + > +// zext 32->128: Zero extend 32-bit to 128-bit > +def : Pat<(i128 (zext R32C:$rSrc)), > + (ROTQMBYIr128_zext_r32 R32C:$rSrc, 12)>; > + > +// zext 64->128: Zero extend 64-bit to 128-bit > +def : Pat<(i128 (zext R64C:$rSrc)), > + (ROTQMBYIr128_zext_r64 R64C:$rSrc, 8)>; > + > +// zext 16->128: Zero extend 16-bit to 128-bit > +def : Pat<(i128 (zext R16C:$rSrc)), > + (ROTQMBYIr128_zext_r32 (ANDi16i32 R16C:$rSrc, (ILAr32 > 0xffff)), 12)>; > + > +// zext 8->128: Zero extend 8-bit to 128-bit > +def : Pat<(i128 (zext R8C:$rSrc)), > + (ROTQMBYIr128_zext_r32 (ANDIi8i32 R8C:$rSrc, 0xf), 12)>; > > Modified: llvm/trunk/lib/Target/CellSPU/SPU64InstrInfo.td > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPU64InstrInfo.td?rev=61784&r1=61783&r2=61784&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/Target/CellSPU/SPU64InstrInfo.td (original) > +++ llvm/trunk/lib/Target/CellSPU/SPU64InstrInfo.td Mon Jan 5 > 21:36:14 2009 > @@ -48,8 +48,8 @@ > // is in a 32-bit register that contains a select mask pattern > (i.e., gather > // bits result): > > -def : Pat<(select R32C:$rC, R64C:$rB, R64C:$rA), > - (SELBr64_cond R64C:$rA, R64C:$rB, (FSMr32 R32C:$rC))>; > +def : Pat<(select R32C:$rCond, R64C:$rFalse, R64C:$rTrue), > + (SELBr64_cond R64C:$rTrue, R64C:$rFalse, (FSMr32 R32C: > $rCond))>; > > //-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- > ~-~-~ > // The i64 seteq fragment that does the scalar->vector conversion and > > Modified: llvm/trunk/lib/Target/CellSPU/SPUCallingConv.td > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUCallingConv.td?rev=61784&r1=61783&r2=61784&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/Target/CellSPU/SPUCallingConv.td (original) > +++ llvm/trunk/lib/Target/CellSPU/SPUCallingConv.td Mon Jan 5 > 21:36:14 2009 > @@ -21,10 +21,11 @@ > > // Return-value convention for Cell SPU: Everything can be passed > back via $3: > def RetCC_SPU : CallingConv<[ > - CCIfType<[i8], CCAssignToReg<[R3]>>, > - CCIfType<[i16], CCAssignToReg<[R3]>>, > - CCIfType<[i32], CCAssignToReg<[R3]>>, > - CCIfType<[i64], CCAssignToReg<[R3]>>, > + CCIfType<[i8], CCAssignToReg<[R3]>>, > + CCIfType<[i16], CCAssignToReg<[R3]>>, > + CCIfType<[i32], CCAssignToReg<[R3]>>, > + CCIfType<[i64], CCAssignToReg<[R3]>>, > + CCIfType<[i128], CCAssignToReg<[R3]>>, > CCIfType<[f32, f64], CCAssignToReg<[R3]>>, > CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], > CCAssignToReg<[R3]>> > ]>; > > Modified: llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp?rev=61784&r1=61783&r2=61784&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp (original) > +++ llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp Mon Jan 5 > 21:36:14 2009 > @@ -114,7 +114,7 @@ > setOperationAction(ISD::ConstantFP, MVT::f64, Custom); > > // SPU's loads and stores have to be custom lowered: > - for (unsigned sctype = (unsigned) MVT::i8; sctype < (unsigned) > MVT::f128; > + for (unsigned sctype = (unsigned) MVT::i8; sctype < (unsigned) > MVT::i128; > ++sctype) { > MVT VT = (MVT::SimpleValueType)sctype; > > @@ -947,6 +947,9 @@ > case MVT::i64: > ArgRegClass = &SPU::R64CRegClass; > break; > + case MVT::i128: > + ArgRegClass = &SPU::GPRCRegClass; > + break; > case MVT::f32: > ArgRegClass = &SPU::R32FPRegClass; > break; > @@ -1070,6 +1073,8 @@ > > switch (Arg.getValueType().getSimpleVT()) { > default: assert(0 && "Unexpected ValueType for argument!"); > + case MVT::i8: > + case MVT::i16: > case MVT::i32: > case MVT::i64: > case MVT::i128: > @@ -1220,6 +1225,11 @@ > ResultVals[0] = Chain.getValue(0); > NumResults = 1; > break; > + case MVT::i128: > + Chain = DAG.getCopyFromReg(Chain, SPU::R3, MVT::i128, > InFlag).getValue(1); > + ResultVals[0] = Chain.getValue(0); > + NumResults = 1; > + break; > case MVT::f32: > case MVT::f64: > Chain = DAG.getCopyFromReg(Chain, SPU::R3, TheCall- > >getValueType(0), > @@ -2182,24 +2192,48 @@ > MVT Op0VT = Op0.getValueType(); > MVT Op0VecVT = MVT::getVectorVT(Op0VT, (128 / > Op0VT.getSizeInBits())); > > - assert(Op0VT == MVT::i32 > - && "CellSPU: Zero/sign extending something other than > i32"); > - > - DEBUG(cerr << "CellSPU.LowerI64Math: lowering zero/sign/any > extend\n"); > - > SDValue PromoteScalar = > DAG.getNode(SPUISD::PREFSLOT2VEC, Op0VecVT, Op0); > > // Use a shuffle to zero extend the i32 to i64 directly: > - SDValue shufMask = DAG.getNode(ISD::BUILD_VECTOR, Op0VecVT, > - DAG.getConstant(0x80808080, MVT::i32), > DAG.getConstant(0x00010203, > - MVT::i32), DAG.getConstant(0x80808080, MVT::i32), > DAG.getConstant( > - 0x08090a0b, MVT::i32)); > - SDValue zextShuffle = DAG.getNode(SPUISD::SHUFB, Op0VecVT, > PromoteScalar, > - PromoteScalar, shufMask); > + SDValue shufMask; > > - return DAG.getNode(SPUISD::VEC2PREFSLOT, VT, > DAG.getNode(ISD::BIT_CONVERT, > - VecVT, zextShuffle)); > + switch (Op0VT.getSimpleVT()) { > + default: > + cerr << "CellSPU LowerI64Math: Unhandled zero/any extend MVT > \n"; > + abort(); > + /*NOTREACHED*/ > + break; > + case MVT::i32: > + shufMask = DAG.getNode(ISD::BUILD_VECTOR, MVT::v4i32, > + DAG.getConstant(0x80808080, MVT::i32), > + DAG.getConstant(0x00010203, MVT::i32), > + DAG.getConstant(0x80808080, MVT::i32), > + DAG.getConstant(0x08090a0b, MVT::i32)); > + break; > + > + case MVT::i16: > + shufMask = DAG.getNode(ISD::BUILD_VECTOR, MVT::v4i32, > + DAG.getConstant(0x80808080, MVT::i32), > + DAG.getConstant(0x80800203, MVT::i32), > + DAG.getConstant(0x80808080, MVT::i32), > + DAG.getConstant(0x80800a0b, MVT::i32)); > + break; > + > + case MVT::i8: > + shufMask = DAG.getNode(ISD::BUILD_VECTOR, MVT::v4i32, > + DAG.getConstant(0x80808080, MVT::i32), > + DAG.getConstant(0x80808003, MVT::i32), > + DAG.getConstant(0x80808080, MVT::i32), > + DAG.getConstant(0x8080800b, MVT::i32)); > + break; > + } > + > + SDValue zextShuffle = DAG.getNode(SPUISD::SHUFB, Op0VecVT, > + PromoteScalar, PromoteScalar, > shufMask); > + > + return DAG.getNode(SPUISD::VEC2PREFSLOT, VT, > + DAG.getNode(ISD::BIT_CONVERT, VecVT, > zextShuffle)); > } > > case ISD::ADD: { > > Modified: llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp?rev=61784&r1=61783&r2=61784&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp (original) > +++ llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp Mon Jan 5 > 21:36:14 2009 > @@ -130,7 +130,32 @@ > case SPU::ORi32_v4i32: > case SPU::ORi64_v2i64: > case SPU::ORf32_v4f32: > - case SPU::ORf64_v2f64: { > + case SPU::ORf64_v2f64: > + case SPU::ORi128_r64: > + case SPU::ORi128_f64: > + case SPU::ORi128_r32: > + 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::ORr16_r32: > + case SPU::ORr8_r32: > + case SPU::ORr32_r16: > + case SPU::ORr32_r8: > + case SPU::ORr32_r64: > + case SPU::ORr16_r64: > + case SPU::ORr8_r64: > + case SPU::ORr64_r32: > + case SPU::ORr64_r16: > + case SPU::ORr64_r8: > + { > assert(MI.getNumOperands() == 2 && > MI.getOperand(0).isReg() && > MI.getOperand(1).isReg() && > > Modified: llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td?rev=61784&r1=61783&r2=61784&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td (original) > +++ llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td Mon Jan 5 > 21:36:14 2009 > @@ -1140,48 +1140,66 @@ > XSBHInst<(outs VECREG:$rDst), (ins VECREG:$rSrc), > [(set (v8i16 VECREG:$rDst), (sext (vectype VECREG:$rSrc)))]>; > > -class XSBHInRegInst: > +class XSBHInRegInst pattern>: > XSBHInst<(outs rclass:$rDst), (ins rclass:$rSrc), > - [(set rclass:$rDst, (sext_inreg rclass:$rSrc, i8))]>; > + pattern>; > > multiclass ExtendByteHalfword { > - def v16i8: XSBHVecInst; > - def r16: XSBHInRegInst; > - def r8: XSBHInst<(outs R16C:$rDst), (ins R8C:$rSrc), > - [(set R16C:$rDst, (sext R8C:$rSrc))]>; > + def v16i8: XSBHVecInst; > + def r8: XSBHInst<(outs R16C:$rDst), (ins R8C:$rSrc), > + [(set R16C:$rDst, (sext R8C:$rSrc))]>; > + def r16: XSBHInRegInst + [(set R16C:$rDst, (sext_inreg R16C: > $rSrc, i8))]>; > > // 32-bit form for XSBH: used to sign extend 8-bit quantities to > 16-bit > // quantities to 32-bit quantities via a 32-bit register (see the > sext 8->32 > // pattern below). Intentionally doesn't match a pattern because > we want the > // sext 8->32 pattern to do the work for us, namely because we > need the extra > // XSHWr32. > - def r32: XSBHInRegInst; > + def r32: XSBHInRegInst; > + > + // Same as the 32-bit version, but for i64 > + def r64: XSBHInRegInst; > } > > defm XSBH : ExtendByteHalfword; > > // Sign extend halfwords to words: > -def XSHWvec: > - RRForm_1<0b01101101010, (outs VECREG:$rDest), (ins VECREG:$rSrc), > - "xshw\t$rDest, $rSrc", IntegerOp, > - [(set (v4i32 VECREG:$rDest), (sext (v8i16 VECREG:$rSrc)))]>; > - > -def XSHWr32: > - RRForm_1<0b01101101010, (outs R32C:$rDst), (ins R32C:$rSrc), > - "xshw\t$rDst, $rSrc", IntegerOp, > - [(set R32C:$rDst, (sext_inreg R32C:$rSrc, i16))]>; > - > -def XSHWr16: > - RRForm_1<0b01101101010, (outs R32C:$rDst), (ins R16C:$rSrc), > - "xshw\t$rDst, $rSrc", IntegerOp, > - [(set R32C:$rDst, (sext R16C:$rSrc))]>; > + > +class XSHWInst pattern>: > + RRForm_1<0b01101101010, OOL, IOL, "xshw\t$rDest, $rSrc", > + IntegerOp, pattern>; > + > +class XSHWVecInst: > + XSHWInst<(outs VECREG:$rDest), (ins VECREG:$rSrc), > + [(set (out_vectype VECREG:$rDest), > + (sext (in_vectype VECREG:$rSrc)))]>; > + > +class XSHWInRegInst pattern>: > + XSHWInst<(outs rclass:$rDest), (ins rclass:$rSrc), > + pattern>; > + > +class XSHWRegInst: > + XSHWInst<(outs rclass:$rDest), (ins R16C:$rSrc), > + [(set rclass:$rDest, (sext R16C:$rSrc))]>; > + > +multiclass ExtendHalfwordWord { > + def v4i32: XSHWVecInst; > + > + def r16: XSHWRegInst; > + > + def r32: XSHWInRegInst + [(set R32C:$rDest, (sext_inreg R32C: > $rSrc, i16))]>; > + def r64: XSHWInRegInst; > +} > + > +defm XSHW : ExtendHalfwordWord; > > // Sign-extend words to doublewords (32->64 bits) > > class XSWDInst pattern>: > - RRForm_1<0b01100101010, OOL, IOL, > - "xswd\t$rDst, $rSrc", IntegerOp, > - pattern>; > + RRForm_1<0b01100101010, OOL, IOL, "xswd\t$rDst, $rSrc", > + IntegerOp, pattern>; > > class XSWDVecInst: > XSWDInst<(outs VECREG:$rDst), (ins VECREG:$rSrc), > @@ -1411,6 +1429,18 @@ > > class ORCvtGPRCReg: > ORCvtForm<(outs rclass:$rT), (ins GPRC:$rA)>; > + > +class ORCvtFormR32Reg: > + ORCvtForm<(outs rclass:$rT), (ins R32C:$rA)>; > + > +class ORCvtFormRegR32: > + ORCvtForm<(outs R32C:$rT), (ins rclass:$rA)>; > + > +class ORCvtFormR64Reg: > + ORCvtForm<(outs rclass:$rT), (ins R64C:$rA)>; > + > +class ORCvtFormRegR64: > + ORCvtForm<(outs R64C:$rT), (ins rclass:$rA)>; > > class ORCvtGPRCVec: > ORCvtForm<(outs VECREG:$rT), (ins GPRC:$rA)>; > @@ -1481,6 +1511,24 @@ > > // Conversion from vector to GPRC > def vec_i128: ORCvtGPRCVec; > + > + // Conversion from register to R32C: > + def r16_r32: ORCvtFormRegR32; > + def r8_r32: ORCvtFormRegR32; > + > + // Conversion from R32C to register > + def r32_r16: ORCvtFormR32Reg; > + def r32_r8: ORCvtFormR32Reg; > + > + // Conversion from register to R64C: > + def r32_r64: ORCvtFormR64Reg; > + def r16_r64: ORCvtFormR64Reg; > + def r8_r64: ORCvtFormR64Reg; > + > + // Conversion from R64C to register > + def r64_r32: ORCvtFormRegR64; > + def r64_r16: ORCvtFormRegR64; > + def r64_r8: ORCvtFormRegR64; > } > > defm OR : BitwiseOr; > @@ -2682,7 +2730,7 @@ > (ROTMIr32 R32C:$rA, uimm7:$val)>; > > //-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- > ~-~ > -// ROTQMBYvec: This is a vector form merely so that when used in an > +// ROTQMBY: This is a vector form merely so that when used in an > // instruction pattern, type checking will succeed. This instruction > assumes > // that the user knew to negate $rB. > //-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- > ~-~ > @@ -2720,10 +2768,16 @@ > ROTQMBYIInst<(outs VECREG:$rT), (ins VECREG:$rA, rotNeg7imm:$val), > [/* no pattern */]>; > > -class ROTQMBYIRegInst ValueType inttype, PatLeaf pred>: > +class ROTQMBYIRegInst ValueType inttype, > + PatLeaf pred>: > ROTQMBYIInst<(outs rclass:$rT), (ins rclass:$rA, optype:$val), > [/* no pattern */]>; > > +// 128-bit zero extension form: > +class ROTQMBYIZExtInst PatLeaf pred>: > + ROTQMBYIInst<(outs GPRC:$rT), (ins rclass:$rA, optype:$val), > + [/* no pattern */]>; > + > multiclass RotateQuadBytesImm > { > def v16i8: ROTQMBYIVecInst; > @@ -2733,6 +2787,11 @@ > > def r128: ROTQMBYIRegInst; > def r64: ROTQMBYIRegInst; > + > + def r128_zext_r8: ROTQMBYIZExtInst; > + def r128_zext_r16: ROTQMBYIZExtInst; > + def r128_zext_r32: ROTQMBYIZExtInst; > + def r128_zext_r64: ROTQMBYIZExtInst; > } > > defm ROTQMBYI : RotateQuadBytesImm; > @@ -4339,6 +4398,13 @@ > def : Pat<(i32 (sext R8C:$rSrc)), > (XSHWr16 (XSBHr8 R8C:$rSrc))>; > > +// sext 8->64: Sign extend bytes to double word > +def : Pat<(sext_inreg R64C:$rSrc, i8), > + (XSWDr64_inreg (XSHWr64 (XSBHr64 R64C:$rSrc)))>; > + > +def : Pat<(i64 (sext R8C:$rSrc)), > + (XSWDr64 (XSHWr16 (XSBHr8 R8C:$rSrc)))>; > + > // zext 8->16: Zero extend bytes to halfwords > def : Pat<(i16 (zext R8C:$rSrc)), > (ANDHIi8i16 R8C:$rSrc, 0xff)>; > @@ -4347,14 +4413,29 @@ > def : Pat<(i32 (zext R8C:$rSrc)), > (ANDIi8i32 R8C:$rSrc, 0xff)>; > > -// anyext 8->16: Extend 8->16 bits, irrespective of sign > +// zext 8->64: Zero extend bytes to double words > +def : Pat<(i64 (zext R8C:$rSrc)), > + (ORi64_v2i64 (SELBv4i32 (ROTQMBYv4i32 > + (ORv4i32_i32 (ANDIi8i32 R8C: > $rSrc, 0xff)), > + 0x4), > + (ILv4i32 0x0), > + (FSMBIv4i32 0x0f0f)))>; > + > +// anyext 8->16: Extend 8->16 bits, irrespective of sign, preserves > high bits > def : Pat<(i16 (anyext R8C:$rSrc)), > (ORHIi8i16 R8C:$rSrc, 0)>; > > -// anyext 8->32: Extend 8->32 bits, irrespective of sign > +// anyext 8->32: Extend 8->32 bits, irrespective of sign, preserves > high bits > def : Pat<(i32 (anyext R8C:$rSrc)), > (ORIi8i32 R8C:$rSrc, 0)>; > > +// sext 16->64: Sign extend halfword to double word > +def : Pat<(sext_inreg R64C:$rSrc, i16), > + (XSWDr64_inreg (XSHWr64 R64C:$rSrc))>; > + > +def : Pat<(sext R16C:$rSrc), > + (XSWDr64 (XSHWr16 R16C:$rSrc))>; > + > // zext 16->32: Zero extend halfwords to words > def : Pat<(i32 (zext R16C:$rSrc)), > (ANDi16i32 R16C:$rSrc, (ILAr32 0xffff))>; > @@ -4461,15 +4542,6 @@ > (SPUlo tconstpool:$in, 0)), > (IOHLlo (ILHUhi tconstpool:$in), tconstpool:$in)>; > > -/* > -def : Pat<(SPUindirect R32C:$sp, i32ImmSExt10:$imm), > - (AIr32 R32C:$sp, i32ImmSExt10:$imm)>; > - > -def : Pat<(SPUindirect R32C:$sp, imm:$imm), > - (Ar32 R32C:$sp, > - (IOHLr32 (ILHUr32 (HI16 imm:$imm)), (LO16 imm: > $imm)))>; > - */ > - > def : Pat<(add (SPUhi tglobaladdr:$in, 0), (SPUlo tglobaladdr:$in, > 0)), > (IOHLlo (ILHUhi tglobaladdr:$in), tglobaladdr:$in)>; > > @@ -4488,3 +4560,5 @@ > include "SPUMathInstr.td" > // 64-bit "instructions"/support > include "SPU64InstrInfo.td" > +// 128-bit "instructions"/support > +include "SPU128InstrInfo.td" > > Modified: llvm/trunk/test/CodeGen/CellSPU/i64ops.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/i64ops.ll?rev=61784&r1=61783&r2=61784&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/test/CodeGen/CellSPU/i64ops.ll (original) > +++ llvm/trunk/test/CodeGen/CellSPU/i64ops.ll Mon Jan 5 21:36:14 2009 > @@ -1,6 +1,8 @@ > ; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s > -; RUN: grep xswd %t1.s | count 1 > -; RUN: grep shufb %t1.s | count 2 > +; RUN: grep xswd %t1.s | count 3 > +; RUN: grep xsbh %t1.s | count 1 > +; RUN: grep xshw %t1.s | count 2 > +; RUN: grep shufb %t1.s | count 4 > ; RUN: grep cg %t1.s | count 1 > ; RUN: grep addx %t1.s | count 1 > > @@ -8,11 +10,31 @@ > 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" > > +define i64 @sext_i64_i8(i8 %a) nounwind { > + %1 = sext i8 %a to i64 > + ret i64 %1 > +} > + > +define i64 @sext_i64_i16(i16 %a) nounwind { > + %1 = sext i16 %a to i64 > + ret i64 %1 > +} > + > define i64 @sext_i64_i32(i32 %a) nounwind { > %1 = sext i32 %a to i64 > ret i64 %1 > } > > +define i64 @zext_i64_i8(i8 %a) nounwind { > + %1 = zext i8 %a to i64 > + ret i64 %1 > +} > + > +define i64 @zext_i64_i16(i16 %a) nounwind { > + %1 = zext i16 %a to i64 > + ret i64 %1 > +} > + > define i64 @zext_i64_i32(i32 %a) nounwind { > %1 = zext i32 %a to i64 > ret i64 %1 > > Modified: llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/ > i64operations.c > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.c?rev=61784&r1=61783&r2=61784&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.c > (original) > +++ llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.c > Mon Jan 5 21:36:14 2009 > @@ -1,20 +1,12 @@ > #include > - > -#define TRUE_VAL (!0) > -#define FALSE_VAL 0 > -#define ARR_SIZE(arr) (sizeof(arr)/sizeof(arr[0])) > - > -typedef unsigned long long int uint64_t; > -typedef long long int int64_t; > - > -/* ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- > ~-~-~-~-~- */ > +#include "i64operations.h" > > int64_t tval_a = 1234567890003LL; > int64_t tval_b = 2345678901235LL; > int64_t tval_c = 1234567890001LL; > int64_t tval_d = 10001LL; > int64_t tval_e = 10000LL; > -int64_t tval_f = -1068103409991LL; > +uint64_t tval_f = 0xffffff0750135eb9; > > /* ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- > ~-~-~-~- */ > > @@ -132,44 +124,6 @@ > > /* ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- > ~-~-~-~- */ > > -struct harness_int64_pred { > - const char *fmt_string; > - int64_t *lhs; > - int64_t *rhs; > - int64_t *select_a; > - int64_t *select_b; > - int expected; > - int64_t *select_expected; > -}; > - > -struct harness_uint64_pred { > - const char *fmt_string; > - uint64_t *lhs; > - uint64_t *rhs; > - uint64_t *select_a; > - uint64_t *select_b; > - int expected; > - uint64_t *select_expected; > -}; > - > -struct int64_pred_s { > - const char *name; > - int (*predfunc) (int64_t, int64_t); > - int64_t (*selfunc) (int64_t, int64_t, int64_t, int64_t); > - struct harness_int64_pred *tests; > - int n_tests; > -}; > - > -struct uint64_pred_s { > - const char *name; > - int (*predfunc) (uint64_t, uint64_t); > - uint64_t (*selfunc) (uint64_t, uint64_t, uint64_t, > uint64_t); > - struct harness_uint64_pred *tests; > - int n_tests; > -}; > - > -/* ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- > ~-~-~-~-~- */ > - > struct harness_int64_pred int64_tests_eq[] = { > {"a %s a", &tval_a, &tval_a, &tval_c, &tval_d, TRUE_VAL, &tval_c}, > {"a %s b", &tval_a, &tval_b, &tval_c, &tval_d, FALSE_VAL, &tval_d}, > @@ -304,8 +258,9 @@ > int j, failed = 0; > > for (j = 0; j < pred->n_tests; ++j) { > - int pred_result = > - (*pred->predfunc) (*pred->tests[j].lhs, *pred->tests[j].rhs); > + int pred_result; > + > + pred_result = (*pred->predfunc) (*pred->tests[j].lhs, *pred- > >tests[j].rhs); > > if (pred_result != pred->tests[j].expected) { > char str[64]; > @@ -313,27 +268,39 @@ > sprintf(str, pred->tests[j].fmt_string, pred->name); > printf("%s: returned value is %d, expecting %d\n", str, > pred_result, pred->tests[j].expected); > - printf(" lhs = %19lld (0x%016llx)\n", *pred->tests[j].lhs, > *pred->tests[j].lhs); > - printf(" rhs = %19lld (0x%016llx)\n", *pred->tests[j].rhs, > *pred->tests[j].rhs); > + printf(" lhs = %19lld (0x%016llx)\n", *pred->tests[j].lhs, > + *pred->tests[j].lhs); > + printf(" rhs = %19lld (0x%016llx)\n", *pred->tests[j].rhs, > + *pred->tests[j].rhs); > ++failed; > } else { > - int64_t selresult = (pred->selfunc) (*pred- > >tests[j].lhs, *pred->tests[j].rhs, > - *pred->tests[j].select_a, *pred->tests[j].select_b); > + int64_t selresult; > + > + selresult = (pred->selfunc) (*pred->tests[j].lhs, *pred- > >tests[j].rhs, > + *pred->tests[j].select_a, > + *pred->tests[j].select_b); > + > if (selresult != *pred->tests[j].select_expected) { > char str[64]; > > sprintf(str, pred->tests[j].fmt_string, pred->name); > printf("%s select: returned value is %d, expecting %d\n", str, > pred_result, pred->tests[j].expected); > - printf(" lhs = %19lld (0x%016llx)\n", *pred->tests[j].lhs, > *pred->tests[j].lhs); > - printf(" rhs = %19lld (0x%016llx)\n", *pred->tests[j].rhs, > *pred->tests[j].rhs); > - printf(" true = %19lld (0x%016llx)\n", *pred->tests[j].select_a, > *pred->tests[j].select_a); > - printf(" false = %19lld (0x%016llx)\n", *pred->tests[j].select_b, > *pred->tests[j].select_b); > + printf(" lhs = %19lld (0x%016llx)\n", *pred->tests[j].lhs, > + *pred->tests[j].lhs); > + printf(" rhs = %19lld (0x%016llx)\n", *pred->tests[j].rhs, > + *pred->tests[j].rhs); > + printf(" true = %19lld (0x%016llx)\n", *pred->tests[j].select_a, > + *pred->tests[j].select_a); > + printf(" false = %19lld (0x%016llx)\n", *pred->tests[j].select_b, > + *pred->tests[j].select_b); > ++failed; > } > } > } > > + printf(" %d tests performed, should be %d.\n", j, pred->n_tests); > + > return failed; > } > > @@ -343,77 +310,240 @@ > int j, failed = 0; > > for (j = 0; j < pred->n_tests; ++j) { > - int pred_result = (*pred->predfunc) (*pred- > >tests[j].lhs, *pred->tests[j].rhs); > + int pred_result; > > + pred_result = (*pred->predfunc) (*pred->tests[j].lhs, *pred- > >tests[j].rhs); > if (pred_result != pred->tests[j].expected) { > char str[64]; > > sprintf(str, pred->tests[j].fmt_string, pred->name); > printf("%s: returned value is %d, expecting %d\n", str, > pred_result, pred->tests[j].expected); > - printf(" lhs = %19llu (0x%016llx)\n", *pred->tests[j].lhs, > *pred->tests[j].lhs); > - printf(" rhs = %19llu (0x%016llx)\n", *pred->tests[j].rhs, > *pred->tests[j].rhs); > + printf(" lhs = %19llu (0x%016llx)\n", *pred->tests[j].lhs, > + *pred->tests[j].lhs); > + printf(" rhs = %19llu (0x%016llx)\n", *pred->tests[j].rhs, > + *pred->tests[j].rhs); > ++failed; > } else { > - uint64_t selresult = (pred->selfunc) (*pred- > >tests[j].lhs, *pred->tests[j].rhs, > - *pred->tests[j].select_a, *pred->tests[j].select_b); > + uint64_t selresult; > + > + selresult = (pred->selfunc) (*pred->tests[j].lhs, *pred- > >tests[j].rhs, > + *pred->tests[j].select_a, > + *pred->tests[j].select_b); > if (selresult != *pred->tests[j].select_expected) { > char str[64]; > > sprintf(str, pred->tests[j].fmt_string, pred->name); > printf("%s select: returned value is %d, expecting %d\n", str, > pred_result, pred->tests[j].expected); > - printf(" lhs = %19llu (0x%016llx)\n", *pred->tests[j].lhs, > *pred->tests[j].lhs); > - printf(" rhs = %19llu (0x%016llx)\n", *pred->tests[j].rhs, > *pred->tests[j].rhs); > - printf(" true = %19llu (0x%016llx)\n", *pred->tests[j].select_a, > *pred->tests[j].select_a); > - printf(" false = %19llu (0x%016llx)\n", *pred->tests[j].select_b, > *pred->tests[j].select_b); > + printf(" lhs = %19llu (0x%016llx)\n", *pred->tests[j].lhs, > + *pred->tests[j].lhs); > + printf(" rhs = %19llu (0x%016llx)\n", *pred->tests[j].rhs, > + *pred->tests[j].rhs); > + printf(" true = %19llu (0x%016llx)\n", *pred->tests[j].select_a, > + *pred->tests[j].select_a); > + printf(" false = %19llu (0x%016llx)\n", *pred->tests[j].select_b, > + *pred->tests[j].select_b); > ++failed; > } > } > - > } > > + printf(" %d tests performed, should be %d.\n", j, pred->n_tests); > + > return failed; > } > > /* ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- > ~-~-~-~- */ > > +int > +test_i64_sext_i32(int in, int64_t expected) { > + int64_t result = (int64_t) in; > + > + if (result != expected) { > + char str[64]; > + sprintf(str, "i64_sext_i32(%d) returns %lld\n", in, result); > + return 1; > + } > + > + return 0; > +} > + > +int > +test_i64_sext_i16(short in, int64_t expected) { > + int64_t result = (int64_t) in; > + > + if (result != expected) { > + char str[64]; > + sprintf(str, "i64_sext_i16(%hd) returns %lld\n", in, result); > + return 1; > + } > + > + return 0; > +} > + > +int > +test_i64_sext_i8(signed char in, int64_t expected) { > + int64_t result = (int64_t) in; > + > + if (result != expected) { > + char str[64]; > + sprintf(str, "i64_sext_i8(%d) returns %lld\n", in, result); > + return 1; > + } > + > + return 0; > +} > + > +int > +test_i64_zext_i32(unsigned int in, uint64_t expected) { > + uint64_t result = (uint64_t) in; > + > + if (result != expected) { > + char str[64]; > + sprintf(str, "i64_zext_i32(%u) returns %llu\n", in, result); > + return 1; > + } > + > + return 0; > +} > + > +int > +test_i64_zext_i16(unsigned short in, uint64_t expected) { > + uint64_t result = (uint64_t) in; > + > + if (result != expected) { > + char str[64]; > + sprintf(str, "i64_zext_i16(%hu) returns %llu\n", in, result); > + return 1; > + } > + > + return 0; > +} > + > +int > +test_i64_zext_i8(unsigned char in, uint64_t expected) { > + uint64_t result = (uint64_t) in; > + > + if (result != expected) { > + char str[64]; > + sprintf(str, "i64_zext_i8(%u) returns %llu\n", in, result); > + return 1; > + } > + > + return 0; > +} > + > +/* ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- > ~-~-~-~-~- */ > + > +int64_t > +i64_shl_const(int64_t a) { > + return a << 10; > +} > + > +int64_t > +i64_shl(int64_t a, int amt) { > + return a << amt; > +} > + > uint64_t > -i64_shl_const(uint64_t a) > -{ > +u64_shl_const(uint64_t a) { > return a << 10; > } > > uint64_t > -i64_shl(uint64_t a, int amt) > -{ > +u64_shl(uint64_t a, int amt) { > return a << amt; > } > > +int64_t > +i64_srl_const(int64_t a) { > + return a >> 10; > +} > + > +int64_t > +i64_srl(int64_t a, int amt) { > + return a >> amt; > +} > + > uint64_t > -i64_srl_const(uint64_t a) > -{ > +u64_srl_const(uint64_t a) { > return a >> 10; > } > > uint64_t > -i64_srl(uint64_t a, int amt) > -{ > +u64_srl(uint64_t a, int amt) { > return a >> amt; > } > > int64_t > -i64_sra_const(int64_t a) > -{ > +i64_sra_const(int64_t a) { > return a >> 10; > } > > int64_t > -i64_sra(int64_t a, int amt) > -{ > +i64_sra(int64_t a, int amt) { > + return a >> amt; > +} > + > +uint64_t > +u64_sra_const(uint64_t a) { > + return a >> 10; > +} > + > +uint64_t > +u64_sra(uint64_t a, int amt) { > return a >> amt; > } > > +int > +test_u64_constant_shift(const char *func_name, uint64_t (*func) > (uint64_t), uint64_t a, uint64_t expected) { > + uint64_t result = (*func)(a); > + > + if (result != expected) { > + printf("%s(0x%016llx) returns 0x%016llx, expected 0x%016llx\n", > func_name, a, result, expected); > + return 1; > + } > + > + return 0; > +} > + > +int > +test_i64_constant_shift(const char *func_name, int64_t (*func) > (int64_t), int64_t a, int64_t expected) { > + int64_t result = (*func)(a); > + > + if (result != expected) { > + printf("%s(0x%016llx) returns 0x%016llx, expected 0x%016llx\n", > func_name, a, result, expected); > + return 1; > + } > + > + return 0; > +} > + > +int > +test_u64_variable_shift(const char *func_name, uint64_t (*func) > (uint64_t, int), uint64_t a, unsigned int b, uint64_t expected) { > + uint64_t result = (*func)(a, b); > + > + if (result != expected) { > + printf("%s(0x%016llx, %d) returns 0x%016llx, expected 0x%016llx > \n", func_name, a, b, result, expected); > + return 1; > + } > + > + return 0; > +} > + > +int > +test_i64_variable_shift(const char *func_name, int64_t (*func) > (int64_t, int), int64_t a, unsigned int b, int64_t expected) { > + int64_t result = (*func)(a, b); > + > + if (result != expected) { > + printf("%s(0x%016llx, %d) returns 0x%016llx, expected 0x%016llx > \n", func_name, a, b, result, expected); > + return 1; > + } > + > + return 0; > +} > + > /* ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- > ~-~-~-~- */ > > int > @@ -423,12 +553,12 @@ > const char *something_failed = " %d tests failed.\n"; > const char *all_tests_passed = " All tests passed.\n"; > > - printf("a = %16lld (0x%016llx)\n", tval_a, tval_a); > - printf("b = %16lld (0x%016llx)\n", tval_b, tval_b); > - printf("c = %16lld (0x%016llx)\n", tval_c, tval_c); > - printf("d = %16lld (0x%016llx)\n", tval_d, tval_d); > - printf("e = %16lld (0x%016llx)\n", tval_e, tval_e); > - printf("f = %16lld (0x%016llx)\n", tval_f, tval_f); > + printf("tval_a = %20lld (0x%020llx)\n", tval_a, tval_a); > + printf("tval_b = %20lld (0x%020llx)\n", tval_b, tval_b); > + printf("tval_c = %20lld (0x%020llx)\n", tval_c, tval_c); > + printf("tval_d = %20lld (0x%020llx)\n", tval_d, tval_d); > + printf("tval_e = %20lld (0x%020llx)\n", tval_e, tval_e); > + printf("tval_f = %20llu (0x%020llx)\n", tval_f, tval_f); > printf("----------------------------------------\n"); > > for (i = 0; i < ARR_SIZE(int64_preds); ++i) { > @@ -453,22 +583,70 @@ > printf("----------------------------------------\n"); > } > > - printf("a = 0x%016llx\n", tval_a); > - printf("i64_shl_const(a) = 0x%016llx\n", i64_shl_const(tval_a)); > - printf("i64_shl(a) = 0x%016llx\n", i64_shl(tval_a, 10)); > - printf("i64_srl_const(a) = 0x%016llx\n", i64_srl_const(tval_a)); > - printf("i64_srl(a) = 0x%016llx\n", i64_srl(tval_a, 10)); > - printf("i64_sra_const(a) = 0x%016llx\n", i64_sra_const(tval_a)); > - printf("i64_sra(a) = 0x%016llx\n", i64_sra(tval_a, 10)); > + / > *----------------------------------------------------------------------*/ > + > + puts("signed/zero-extend tests:"); > + > + failed = 0; > + failed += test_i64_sext_i32(-1, -1LL); > + failed += test_i64_sext_i32(10, 10LL); > + failed += test_i64_sext_i32(0x7fffffff, 0x7fffffffLL); > + failed += test_i64_sext_i16(-1, -1LL); > + failed += test_i64_sext_i16(10, 10LL); > + failed += test_i64_sext_i16(0x7fff, 0x7fffLL); > + failed += test_i64_sext_i8(-1, -1LL); > + failed += test_i64_sext_i8(10, 10LL); > + failed += test_i64_sext_i8(0x7f, 0x7fLL); > + > + failed += test_i64_zext_i32(0xffffffff, 0x00000000ffffffffLLU); > + failed += test_i64_zext_i32(0x01234567, 0x0000000001234567LLU); > + failed += test_i64_zext_i16(0xffff, 0x000000000000ffffLLU); > + failed += test_i64_zext_i16(0x569a, 0x000000000000569aLLU); > + failed += test_i64_zext_i8(0xff, 0x00000000000000ffLLU); > + failed += test_i64_zext_i8(0xa0, 0x00000000000000a0LLU); > + > + if (failed > 0) { > + printf(" %d tests failed.\n", failed); > + } else { > + printf(" All tests passed.\n"); > + } > + > printf("----------------------------------------\n"); > > - printf("f = 0x%016llx\n", tval_f); > - printf("i64_shl_const(f) = 0x%016llx\n", i64_shl_const(tval_f)); > - printf("i64_shl(f) = 0x%016llx\n", i64_shl(tval_f, 10)); > - printf("i64_srl_const(f) = 0x%016llx\n", i64_srl_const(tval_f)); > - printf("i64_srl(f) = 0x%016llx\n", i64_srl(tval_f, 10)); > - printf("i64_sra_const(f) = 0x%016llx\n", i64_sra_const(tval_f)); > - printf("i64_sra(f) = 0x%016llx\n", i64_sra(tval_f, 10)); > + failed = 0; > + puts("signed left/right shift tests:"); > + failed += test_i64_constant_shift("i64_shl_const", i64_shl_const, > tval_a, 0x00047dc7ec114c00LL); > + failed += test_i64_variable_shift("i64_shl", i64_shl, > tval_a, 10, 0x00047dc7ec114c00LL); > + failed += test_i64_constant_shift("i64_srl_const", i64_srl_const, > tval_a, 0x0000000047dc7ec1LL); > + failed += test_i64_variable_shift("i64_srl", i64_srl, > tval_a, 10, 0x0000000047dc7ec1LL); > + failed += test_i64_constant_shift("i64_sra_const", i64_sra_const, > tval_a, 0x0000000047dc7ec1LL); > + failed += test_i64_variable_shift("i64_sra", i64_sra, > tval_a, 10, 0x0000000047dc7ec1LL); > + > + if (failed > 0) { > + printf(" %d tests ailed.\n", failed); > + } else { > + printf(" All tests passed.\n"); > + } > + > + printf("----------------------------------------\n"); > + > + failed = 0; > + puts("unsigned left/right shift tests:"); > + failed += test_u64_constant_shift("u64_shl_const", > u64_shl_const, tval_f, 0xfffc1d404d7ae400LL); > + failed += test_u64_variable_shift("u64_shl", > u64_shl, tval_f, 10, 0xfffc1d404d7ae400LL); > + failed += test_u64_constant_shift("u64_srl_const", > u64_srl_const, tval_f, 0x003fffffc1d404d7LL); > + failed += test_u64_variable_shift("u64_srl", > u64_srl, tval_f, 10, 0x003fffffc1d404d7LL); > + failed += test_i64_constant_shift("i64_sra_const", > i64_sra_const, tval_f, 0xffffffffc1d404d7LL); > + failed += test_i64_variable_shift("i64_sra", > i64_sra, tval_f, 10, 0xffffffffc1d404d7LL); > + failed += test_u64_constant_shift("u64_sra_const", > u64_sra_const, tval_f, 0x003fffffc1d404d7LL); > + failed += test_u64_variable_shift("u64_sra", > u64_sra, tval_f, 10, 0x003fffffc1d404d7LL); > + > + if (failed > 0) { > + printf(" %d tests ailed.\n", failed); > + } else { > + printf(" All tests passed.\n"); > + } > + > printf("----------------------------------------\n"); > > return 0; > > Added: llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/ > i64operations.h > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.h?rev=61784&view=auto > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.h > (added) > +++ llvm/trunk/test/CodeGen/CellSPU/useful-harnesses/i64operations.h > Mon Jan 5 21:36:14 2009 > @@ -0,0 +1,43 @@ > +#define TRUE_VAL (!0) > +#define FALSE_VAL 0 > +#define ARR_SIZE(arr) (sizeof(arr)/sizeof(arr[0])) > + > +typedef unsigned long long int uint64_t; > +typedef long long int int64_t; > + > +/* ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- > ~-~-~-~-~- */ > +struct harness_int64_pred { > + const char *fmt_string; > + int64_t *lhs; > + int64_t *rhs; > + int64_t *select_a; > + int64_t *select_b; > + int expected; > + int64_t *select_expected; > +}; > + > +struct harness_uint64_pred { > + const char *fmt_string; > + uint64_t *lhs; > + uint64_t *rhs; > + uint64_t *select_a; > + uint64_t *select_b; > + int expected; > + uint64_t *select_expected; > +}; > + > +struct int64_pred_s { > + const char *name; > + int (*predfunc) (int64_t, int64_t); > + int64_t (*selfunc) (int64_t, int64_t, int64_t, int64_t); > + struct harness_int64_pred *tests; > + int n_tests; > +}; > + > +struct uint64_pred_s { > + const char *name; > + int (*predfunc) (uint64_t, uint64_t); > + uint64_t (*selfunc) (uint64_t, uint64_t, uint64_t, > uint64_t); > + struct harness_uint64_pred *tests; > + int n_tests; > +}; > > > _______________________________________________ > 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 Jan 6 13:13:55 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 06 Jan 2009 19:13:55 -0000 Subject: [llvm-commits] [llvm] r61819 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901061913.n06JDuVQ030480@zion.cs.uiuc.edu> Author: void Date: Tue Jan 6 13:13:55 2009 New Revision: 61819 URL: http://llvm.org/viewvc/llvm-project?rev=61819&view=rev Log: Forgot that this was needed for Linux. This should fix the builds. Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61819&r1=61818&r2=61819&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Tue Jan 6 13:13:55 2009 @@ -3653,10 +3653,10 @@ Asm->EOL("FDE CIE offset"); - EmitReference("eh_func_begin", EHFrameInfo.Number, true); + EmitReference("eh_func_begin", EHFrameInfo.Number, true, true); Asm->EOL("FDE initial location"); EmitDifference("eh_func_end", EHFrameInfo.Number, - "eh_func_begin", EHFrameInfo.Number); + "eh_func_begin", EHFrameInfo.Number, true); Asm->EOL("FDE address range"); // If there is a personality and landing pads then point to the language From dpatel at apple.com Tue Jan 6 15:07:31 2009 From: dpatel at apple.com (Devang Patel) Date: Tue, 06 Jan 2009 21:07:31 -0000 Subject: [llvm-commits] [llvm] r61822 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901062107.n06L7VYw003044@zion.cs.uiuc.edu> Author: dpatel Date: Tue Jan 6 15:07:30 2009 New Revision: 61822 URL: http://llvm.org/viewvc/llvm-project?rev=61822&view=rev Log: Set up DwarfDebug using DebugInfo API. Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61822&r1=61821&r2=61822&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Tue Jan 6 15:07:30 2009 @@ -3291,6 +3291,39 @@ delete Values[j]; } + /// SetDebugInfo - Create global DIEs and emit initial debug info sections. + /// This is inovked by the target AsmPrinter. + void SetDebugInfo() { + // FIXME - Check if the module has debug info or not. + // Create all the compile unit DIEs. + ConstructCompileUnits(); + + // Create DIEs for each of the externally visible global variables. + ConstructGlobalVariableDIEs(); + + // Create DIEs for each of the externally visible subprograms. + ConstructSubprograms(); + + // Prime section data. + SectionMap.insert(TAI->getTextSection()); + + // Print out .file directives to specify files for .loc directives. These + // are printed out early so that they precede any .loc directives. + if (TAI->hasDotLocAndDotFile()) { + for (unsigned i = 1, e = SrcFiles.size(); i <= e; ++i) { + sys::Path FullPath(Directories[SrcFiles[i].getDirectoryID()]); + bool AppendOk = FullPath.appendComponent(SrcFiles[i].getName()); + assert(AppendOk && "Could not append filename to directory!"); + AppendOk = false; + Asm->EmitFile(i, FullPath.toString()); + Asm->EOL(); + } + } + + // Emit initial sections + EmitInitial(); + } + /// SetModuleInfo - Set machine module information when it's known that pass /// manager has created it. Set by the target AsmPrinter. void SetModuleInfo(MachineModuleInfo *mmi) { From criswell at cs.uiuc.edu Tue Jan 6 15:16:02 2009 From: criswell at cs.uiuc.edu (John Criswell) Date: Tue, 6 Jan 2009 15:16:02 -0600 Subject: [llvm-commits] CVS: llvm-www/Users.html Message-ID: <200901062116.n06LG2gX006610@maute.cs.uiuc.edu> Changes in directory llvm-www: Users.html updated: 1.47 -> 1.48 --- Log message: Added the MicroBlaze research project from The University of Kansas. --- Diffs of the changes: (+10 -1) Users.html | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletion(-) Index: llvm-www/Users.html diff -u llvm-www/Users.html:1.47 llvm-www/Users.html:1.48 --- llvm-www/Users.html:1.47 Mon Dec 15 09:24:56 2008 +++ llvm-www/Users.html Tue Jan 6 15:15:08 2009 @@ -285,6 +285,15 @@ Microarchitecture research + + + + The University of Kansas + + Wesley Peck + MicroBlaze backend for use on Xilinx FPGAs + +
@@ -412,6 +421,6 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!">
LLVM Development List
- Last modified: $Date: 2008/12/15 15:24:56 $ + Last modified: $Date: 2009/01/06 21:15:08 $ From baldrick at free.fr Tue Jan 6 16:26:39 2009 From: baldrick at free.fr (Duncan Sands) Date: Tue, 06 Jan 2009 22:26:39 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r61826 - in /llvm-gcc-4.2/trunk/gcc: cgraphunit.c passes.c tree-pass.h Message-ID: <200901062226.n06MQdOw021047@zion.cs.uiuc.edu> Author: baldrick Date: Tue Jan 6 16:26:39 2009 New Revision: 61826 URL: http://llvm.org/viewvc/llvm-project?rev=61826&view=rev Log: Completely disable the gcc inliner: experiments seem to show that running the early inliner is not helping performance. While there, enable pass_fold_builtins which looks like it was not actually being run though the intention was clearly that it should be. Modified: llvm-gcc-4.2/trunk/gcc/cgraphunit.c llvm-gcc-4.2/trunk/gcc/passes.c llvm-gcc-4.2/trunk/gcc/tree-pass.h 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=61826&r1=61825&r2=61826&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/cgraphunit.c (original) +++ llvm-gcc-4.2/trunk/gcc/cgraphunit.c Tue Jan 6 16:26:39 2009 @@ -1595,6 +1595,8 @@ return false; } +/* LLVM LOCAL begin */ +#ifndef ENABLE_LLVM static void ipa_passes (void) { @@ -1604,6 +1606,8 @@ execute_ipa_pass_list (all_ipa_passes); bitmap_obstack_release (NULL); } +#endif +/* LLVM LOCAL end */ /* Perform simple optimizations based on callgraph. */ @@ -1641,9 +1645,13 @@ dump_cgraph (cgraph_dump_file); } + /* LLVM LOCAL begin */ +#ifndef ENABLE_LLVM /* Don't run the IPA passes if there was any error or sorry messages. */ if (errorcount == 0 && sorrycount == 0) ipa_passes (); +#endif + /* LLVM LOCAL end */ /* This pass remove bodies of extern inline functions we never inlined. Do this later so other IPA passes see what is really going on. */ Modified: llvm-gcc-4.2/trunk/gcc/passes.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/passes.c?rev=61826&r1=61825&r2=61826&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/passes.c (original) +++ llvm-gcc-4.2/trunk/gcc/passes.c Tue Jan 6 16:26:39 2009 @@ -333,10 +333,11 @@ /* The root of the compilation pass tree, once constructed. */ -struct tree_opt_pass *all_passes, *all_ipa_passes, *all_lowering_passes; /* LLVM LOCAL begin */ #ifdef ENABLE_LLVM -struct tree_opt_pass *all_extra_lowering_passes; +struct tree_opt_pass *all_lowering_passes, *all_extra_lowering_passes; +#else +struct tree_opt_pass *all_passes, *all_ipa_passes, *all_lowering_passes; #endif /* LLVM LOCAL end */ @@ -479,21 +480,21 @@ struct tree_opt_pass **p; #define NEXT_PASS(PASS) (p = next_pass_1 (p, &PASS)) + /* LLVM LOCAL begin */ +#ifndef ENABLE_LLVM /* Interprocedural optimization passes. */ p = &all_ipa_passes; - /* LLVM local begin */ - NEXT_PASS (pass_early_ipa_inline); /* PR2353. */ -#ifndef ENABLE_LLVM + NEXT_PASS (pass_early_ipa_inline); NEXT_PASS (pass_early_local_passes); NEXT_PASS (pass_ipa_cp); NEXT_PASS (pass_ipa_inline); NEXT_PASS (pass_ipa_reference); - NEXT_PASS (pass_ipa_pure_const); + NEXT_PASS (pass_ipa_pure_const); NEXT_PASS (pass_ipa_type_escape); NEXT_PASS (pass_ipa_pta); -#endif - /* LLVM local end */ *p = NULL; +#endif + /* LLVM LOCAL end */ /* All passes needed to lower the function into shape optimizers can operate on. */ @@ -524,6 +525,7 @@ NEXT_PASS (pass_fixup_cfg); NEXT_PASS (pass_init_datastructures); NEXT_PASS (pass_expand_omp); + NEXT_PASS (pass_fold_builtins); NEXT_PASS (pass_free_datastructures); *p = NULL; #endif @@ -610,13 +612,7 @@ NEXT_PASS (pass_object_sizes); NEXT_PASS (pass_store_ccp); NEXT_PASS (pass_store_copy_prop); - -#endif - /* LLVM LOCAL end */ NEXT_PASS (pass_fold_builtins); - /* LLVM LOCAL begin */ -#ifndef ENABLE_LLVM - /* FIXME: May alias should a TODO but for 4.0.0, we add may_alias right after fold builtins which can create arbitrary GIMPLE. */ @@ -768,14 +764,18 @@ NEXT_PASS (pass_final); *p = NULL; #endif - /* LLVM local end */ + /* LLVM LOCAL end */ #undef NEXT_PASS /* Register the passes with the tree dump code. */ + /* LLVM LOCAL begin */ +#ifndef ENABLE_LLVM register_dump_files (all_ipa_passes, true, PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh | PROP_cfg); +#endif + /* LLVM LOCAL end */ register_dump_files (all_lowering_passes, false, PROP_gimple_any); /* LLVM LOCAL begin */ #ifdef ENABLE_LLVM Modified: llvm-gcc-4.2/trunk/gcc/tree-pass.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/tree-pass.h?rev=61826&r1=61825&r2=61826&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/tree-pass.h (original) +++ llvm-gcc-4.2/trunk/gcc/tree-pass.h Tue Jan 6 16:26:39 2009 @@ -399,10 +399,11 @@ extern struct tree_opt_pass pass_rtl_seqabstr; /* The root of the compilation pass tree, once constructed. */ -extern struct tree_opt_pass *all_passes, *all_ipa_passes, *all_lowering_passes; /* LLVM LOCAL begin */ #ifdef ENABLE_LLVM -extern struct tree_opt_pass *all_extra_lowering_passes; +extern struct tree_opt_pass *all_lowering_passes, *all_extra_lowering_passes; +#else +extern struct tree_opt_pass *all_passes, *all_ipa_passes, *all_lowering_passes; #endif /* LLVM LOCAL end */ From gohman at apple.com Tue Jan 6 16:53:53 2009 From: gohman at apple.com (Dan Gohman) Date: Tue, 06 Jan 2009 22:53:53 -0000 Subject: [llvm-commits] [llvm] r61828 - in /llvm/trunk: lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp test/CodeGen/Generic/pr3288.ll Message-ID: <200901062253.n06Mrrog022161@zion.cs.uiuc.edu> Author: djg Date: Tue Jan 6 16:53:52 2009 New Revision: 61828 URL: http://llvm.org/viewvc/llvm-project?rev=61828&view=rev Log: Fix a bug in ComputeLinearIndex computation handling multi-level aggregate types. Don't increment the current index after reaching the end of a struct, as it will already be pointing at one-past-the end. This fixes PR3288. Added: llvm/trunk/test/CodeGen/Generic/pr3288.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=61828&r1=61827&r2=61828&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp Tue Jan 6 16:53:52 2009 @@ -63,7 +63,7 @@ cl::init(0)); /// ComputeLinearIndex - Given an LLVM IR aggregate type and a sequence -/// insertvalue or extractvalue indices that identify a member, return +/// of insertvalue or extractvalue indices that identify a member, return /// the linearized index of the start of the member. /// static unsigned ComputeLinearIndex(const TargetLowering &TLI, const Type *Ty, @@ -84,6 +84,7 @@ return ComputeLinearIndex(TLI, *EI, Indices+1, IndicesEnd, CurIndex); CurIndex = ComputeLinearIndex(TLI, *EI, 0, 0, CurIndex); } + return CurIndex; } // Given an array type, recursively traverse the elements. else if (const ArrayType *ATy = dyn_cast(Ty)) { @@ -93,6 +94,7 @@ return ComputeLinearIndex(TLI, EltTy, Indices+1, IndicesEnd, CurIndex); CurIndex = ComputeLinearIndex(TLI, EltTy, 0, 0, CurIndex); } + return CurIndex; } // We haven't found the type we're looking for, so keep searching. return CurIndex + 1; Added: llvm/trunk/test/CodeGen/Generic/pr3288.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/pr3288.ll?rev=61828&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/Generic/pr3288.ll (added) +++ llvm/trunk/test/CodeGen/Generic/pr3288.ll Tue Jan 6 16:53:52 2009 @@ -0,0 +1,67 @@ +; RUN: llvm-as < %s | llc +; PR3288 + +define void @a() { + %i = insertvalue [2 x [2 x i32]] undef, [2 x i32] undef, 1 + ret void +} +define void @b() { + %i = insertvalue {{i32,float},{i16,double}} undef, {i16,double} undef, 1 + ret void +} +define void @c() { + %i = insertvalue [2 x [2 x i32]] zeroinitializer, [2 x i32] zeroinitializer, 1 + ret void +} +define void @d() { + %i = insertvalue {{i32,float},{i16,double}} zeroinitializer, {i16,double} zeroinitializer, 1 + ret void +} +define void @e() { + %i = insertvalue [2 x [2 x i32]] undef, [2 x i32] undef, 0 + ret void +} +define void @f() { + %i = insertvalue {{i32,float},{i16,double}} undef, {i32,float} undef, 0 + ret void +} +define void @g() { + %i = insertvalue [2 x [2 x i32]] zeroinitializer, [2 x i32] zeroinitializer, 0 + ret void +} +define void @h() { + %i = insertvalue {{i32,float},{i16,double}} zeroinitializer, {i32,float} zeroinitializer, 0 + ret void +} +define void @ax() { + %i = insertvalue [2 x [2 x i32]] undef, i32 undef, 1, 1 + ret void +} +define void @bx() { + %i = insertvalue {{i32,float},{i16,double}} undef, double undef, 1, 1 + ret void +} +define void @cx() { + %i = insertvalue [2 x [2 x i32]] zeroinitializer, i32 zeroinitializer, 1, 1 + ret void +} +define void @dx() { + %i = insertvalue {{i32,float},{i16,double}} zeroinitializer, double zeroinitializer, 1, 1 + ret void +} +define void @ex() { + %i = insertvalue [2 x [2 x i32]] undef, i32 undef, 0, 1 + ret void +} +define void @fx() { + %i = insertvalue {{i32,float},{i16,double}} undef, float undef, 0, 1 + ret void +} +define void @gx() { + %i = insertvalue [2 x [2 x i32]] zeroinitializer, i32 zeroinitializer, 0, 1 + ret void +} +define void @hx() { + %i = insertvalue {{i32,float},{i16,double}} zeroinitializer, float zeroinitializer, 0, 1 + ret void +} From scottm at aero.org Tue Jan 6 17:10:38 2009 From: scottm at aero.org (Scott Michel) Date: Tue, 06 Jan 2009 23:10:38 -0000 Subject: [llvm-commits] [llvm] r61829 - in /llvm/trunk/lib/Target/CellSPU: SPUCallingConv.td SPUISelLowering.cpp SPUISelLowering.h SPUInstrInfo.td SPUNodes.td SPURegisterInfo.td SPUSubtarget.h Message-ID: <200901062310.n06NAd78022746@zion.cs.uiuc.edu> Author: pingbak Date: Tue Jan 6 17:10:38 2009 New Revision: 61829 URL: http://llvm.org/viewvc/llvm-project?rev=61829&view=rev Log: CellSPU: - Add preliminary support for v2i32; load/store generates the right code but there's a lot work to be done to make this vector type operational. Modified: llvm/trunk/lib/Target/CellSPU/SPUCallingConv.td llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td llvm/trunk/lib/Target/CellSPU/SPUNodes.td llvm/trunk/lib/Target/CellSPU/SPURegisterInfo.td llvm/trunk/lib/Target/CellSPU/SPUSubtarget.h Modified: llvm/trunk/lib/Target/CellSPU/SPUCallingConv.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUCallingConv.td?rev=61829&r1=61828&r2=61829&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUCallingConv.td (original) +++ llvm/trunk/lib/Target/CellSPU/SPUCallingConv.td Tue Jan 6 17:10:38 2009 @@ -21,13 +21,14 @@ // Return-value convention for Cell SPU: Everything can be passed back via $3: def RetCC_SPU : CallingConv<[ - CCIfType<[i8], CCAssignToReg<[R3]>>, - CCIfType<[i16], CCAssignToReg<[R3]>>, - CCIfType<[i32], CCAssignToReg<[R3]>>, - CCIfType<[i64], CCAssignToReg<[R3]>>, - CCIfType<[i128], CCAssignToReg<[R3]>>, + CCIfType<[i8], CCAssignToReg<[R3]>>, + CCIfType<[i16], CCAssignToReg<[R3]>>, + CCIfType<[i32], CCAssignToReg<[R3]>>, + CCIfType<[i64], CCAssignToReg<[R3]>>, + CCIfType<[i128], CCAssignToReg<[R3]>>, CCIfType<[f32, f64], CCAssignToReg<[R3]>>, - CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], CCAssignToReg<[R3]>> + CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], CCAssignToReg<[R3]>>, + CCIfType<[v2i32], CCAssignToReg<[R3]>> ]>; Modified: llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp?rev=61829&r1=61828&r2=61829&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp (original) +++ llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp Tue Jan 6 17:10:38 2009 @@ -327,6 +327,9 @@ addRegisterClass(MVT::v4f32, SPU::VECREGRegisterClass); addRegisterClass(MVT::v2f64, SPU::VECREGRegisterClass); + // "Odd size" vector classes that we're willing to support: + addRegisterClass(MVT::v2i32, SPU::VECREGRegisterClass); + for (unsigned i = (unsigned)MVT::FIRST_VECTOR_VALUETYPE; i <= (unsigned)MVT::LAST_VECTOR_VALUETYPE; ++i) { MVT VT = (MVT::SimpleValueType)i; @@ -417,7 +420,6 @@ node_names[(unsigned) SPUISD::CARRY_GENERATE] = "SPUISD::CARRY_GENERATE"; node_names[(unsigned) SPUISD::SUB_EXTENDED] = "SPUISD::SUB_EXTENDED"; node_names[(unsigned) SPUISD::BORROW_GENERATE] = "SPUISD::BORROW_GENERATE"; - node_names[(unsigned) SPUISD::SEXT32TO64] = "SPUISD::SEXT32TO64"; } std::map::iterator i = node_names.find(Opcode); @@ -1029,8 +1031,7 @@ return DAG.getConstant((int)C->getZExtValue() >> 2, MVT::i32).getNode(); } -static -SDValue +static SDValue LowerCALL(SDValue Op, SelectionDAG &DAG, const SPUSubtarget *ST) { CallSDNode *TheCall = cast(Op.getNode()); SDValue Chain = TheCall->getChain(); @@ -1618,6 +1619,11 @@ SDValue T = DAG.getConstant(Value, VT.getVectorElementType()); return DAG.getNode(ISD::BUILD_VECTOR, VT, T, T, T, T); } + case MVT::v2i32: { + unsigned int Value = SplatBits; + SDValue T = DAG.getConstant(Value, VT.getVectorElementType()); + return DAG.getNode(ISD::BUILD_VECTOR, VT, T, T); + } case MVT::v2i64: { uint64_t val = SplatBits; uint32_t upper = uint32_t(val >> 32); @@ -2454,32 +2460,6 @@ return SDValue(); } -//! Lower ISD::SETCC -/*! - Lower i64 condition code handling. - */ - -static SDValue LowerSETCC(SDValue Op, SelectionDAG &DAG) { - MVT VT = Op.getValueType(); - SDValue lhs = Op.getOperand(0); - SDValue rhs = Op.getOperand(1); - SDValue condition = Op.getOperand(2); - - if (VT == MVT::i32 && lhs.getValueType() == MVT::i64) { - // Expand the i64 comparisons to what Cell can actually support, - // which is eq, ugt and sgt: -#if 0 - CondCodeSDNode *ccvalue = dyn_cast(condition); - - switch (ccvalue->get()) { - case - } -#endif - } - - return SDValue(); -} - //! Lower ISD::SELECT_CC /*! ISD::SELECT_CC can (generally) be implemented directly on the SPU using the @@ -2647,9 +2627,6 @@ case ISD::TRUNCATE: return LowerTRUNCATE(Op, DAG); - - case ISD::SETCC: - return LowerSETCC(Op, DAG); } return SDValue(); @@ -2971,7 +2948,6 @@ case SPUISD::ROTBYTES_LEFT: case SPUISD::SELECT_MASK: case SPUISD::SELB: - case SPUISD::SEXT32TO64: #endif } } Modified: llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h?rev=61829&r1=61828&r2=61829&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h (original) +++ llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h Tue Jan 6 17:10:38 2009 @@ -52,12 +52,10 @@ ROTBYTES_LEFT_BITS, ///< Rotate bytes left by bit shift count SELECT_MASK, ///< Select Mask (FSM, FSMB, FSMH, FSMBI) SELB, ///< Select bits -> (b & mask) | (a & ~mask) - GATHER_BITS, ///< Gather bits from bytes/words/halfwords ADD_EXTENDED, ///< Add extended, with carry CARRY_GENERATE, ///< Carry generate for ADD_EXTENDED SUB_EXTENDED, ///< Subtract extended, with borrow BORROW_GENERATE, ///< Borrow generate for SUB_EXTENDED - SEXT32TO64, ///< Sign-extended 32-bit const -> 64-bits LAST_SPUISD ///< Last user-defined instruction }; } Modified: llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td?rev=61829&r1=61828&r2=61829&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td (original) +++ llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td Tue Jan 6 17:10:38 2009 @@ -71,6 +71,8 @@ def v4f32: LoadDFormVec; def v2f64: LoadDFormVec; + def v2i32: LoadDFormVec; + def r128: LoadDForm; def r64: LoadDForm; def r32: LoadDForm; @@ -103,6 +105,8 @@ def v4f32: LoadAFormVec; def v2f64: LoadAFormVec; + def v2i32: LoadAFormVec; + def r128: LoadAForm; def r64: LoadAForm; def r32: LoadAForm; @@ -135,6 +139,8 @@ def v4f32: LoadXFormVec; def v2f64: LoadXFormVec; + def v2i32: LoadXFormVec; + def r128: LoadXForm; def r64: LoadXForm; def r32: LoadXForm; @@ -183,6 +189,8 @@ def v4f32: StoreDFormVec; def v2f64: StoreDFormVec; + def v2i32: StoreDFormVec; + def r128: StoreDForm; def r64: StoreDForm; def r32: StoreDForm; @@ -213,6 +221,8 @@ def v4f32: StoreAFormVec; def v2f64: StoreAFormVec; + def v2i32: StoreAFormVec; + def r128: StoreAForm; def r64: StoreAForm; def r32: StoreAForm; @@ -245,6 +255,8 @@ def v4f32: StoreXFormVec; def v2f64: StoreXFormVec; + def v2i32: StoreXFormVec; + def r128: StoreXForm; def r64: StoreXForm; def r32: StoreXForm; @@ -1044,11 +1056,11 @@ class GBBRegInst: GBBInst<(outs rclass:$rT), (ins VECREG:$rA), - [(set rclass:$rT, (SPUgatherbits (vectype VECREG:$rA)))]>; + [/* no pattern */]>; class GBBVecInst: GBBInst<(outs VECREG:$rT), (ins VECREG:$rA), - [(set (vectype VECREG:$rT), (SPUgatherbits (vectype VECREG:$rA)))]>; + [/* no pattern */]>; multiclass GatherBitsFromBytes { def v16i8_r32: GBBRegInst; @@ -1070,12 +1082,11 @@ class GBHRegInst: GBHInst<(outs rclass:$rT), (ins VECREG:$rA), - [(set rclass:$rT, (SPUgatherbits (vectype VECREG:$rA)))]>; + [/* no pattern */]>; class GBHVecInst: GBHInst<(outs VECREG:$rT), (ins VECREG:$rA), - [(set (vectype VECREG:$rT), - (SPUgatherbits (vectype VECREG:$rA)))]>; + [/* no pattern */]>; multiclass GatherBitsHalfword { def v8i16_r32: GBHRegInst; @@ -1097,12 +1108,11 @@ class GBRegInst: GBInst<(outs rclass:$rT), (ins VECREG:$rA), - [(set rclass:$rT, (SPUgatherbits (vectype VECREG:$rA)))]>; + [/* no pattern */]>; class GBVecInst: GBInst<(outs VECREG:$rT), (ins VECREG:$rA), - [(set (vectype VECREG:$rT), - (SPUgatherbits (vectype VECREG:$rA)))]>; + [/* no pattern */]>; multiclass GatherBitsWord { def v4i32_r32: GBRegInst; Modified: llvm/trunk/lib/Target/CellSPU/SPUNodes.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUNodes.td?rev=61829&r1=61828&r2=61829&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUNodes.td (original) +++ llvm/trunk/lib/Target/CellSPU/SPUNodes.td Tue Jan 6 17:10:38 2009 @@ -61,13 +61,6 @@ def SPUvecshift_type: SDTypeProfile<1, 2, [ SDTCisSameAs<0, 1>, SDTCisInt<2>]>; -// SPU gather bits: -// This instruction looks at each vector (word|halfword|byte) slot's low bit -// and forms a mask in the low order bits of the first word's preferred slot. -def SPUgatherbits_type: SDTypeProfile<1, 1, [ - /* no type constraints defined */ -]>; - //===----------------------------------------------------------------------===// // Synthetic/pseudo-instructions //===----------------------------------------------------------------------===// @@ -115,9 +108,6 @@ // SPU select bits instruction def SPUselb: SDNode<"SPUISD::SELB", SPUselb_type, []>; -// SPU gather bits instruction: -def SPUgatherbits: SDNode<"SPUISD::GATHER_BITS", SPUgatherbits_type, []>; - def SDTprefslot2vec: SDTypeProfile<1, 1, []>; def SPUprefslot2vec: SDNode<"SPUISD::PREFSLOT2VEC", SDTprefslot2vec, []>; Modified: llvm/trunk/lib/Target/CellSPU/SPURegisterInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPURegisterInfo.td?rev=61829&r1=61828&r2=61829&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPURegisterInfo.td (original) +++ llvm/trunk/lib/Target/CellSPU/SPURegisterInfo.td Tue Jan 6 17:10:38 2009 @@ -393,7 +393,9 @@ } // The SPU's registers as vector registers: -def VECREG : RegisterClass<"SPU", [v16i8,v8i16,v4i32,v4f32,v2i64,v2f64], 128, +def VECREG : RegisterClass<"SPU", + [v16i8,v8i16,v2i32,v4i32,v4f32,v2i64,v2f64], + 128, [ /* volatile register */ R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, Modified: llvm/trunk/lib/Target/CellSPU/SPUSubtarget.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUSubtarget.h?rev=61829&r1=61828&r2=61829&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUSubtarget.h (original) +++ llvm/trunk/lib/Target/CellSPU/SPUSubtarget.h Tue Jan 6 17:10:38 2009 @@ -85,7 +85,7 @@ /// properties of this subtarget. const char *getTargetDataString() const { return "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-a:0:128-v128:128:128" + "-i16:16:128-i8:8:128-i1:8:128-a:0:128-v64:128:128-v128:128:128" "-s:128:128"; } }; From gohman at apple.com Tue Jan 6 17:34:46 2009 From: gohman at apple.com (Dan Gohman) Date: Tue, 06 Jan 2009 23:34:46 -0000 Subject: [llvm-commits] [llvm] r61830 - in /llvm/trunk: lib/Target/X86/X86InstrInfo.cpp test/CodeGen/X86/2to3-inc64.ll Message-ID: <200901062334.n06NYk68023714@zion.cs.uiuc.edu> Author: djg Date: Tue Jan 6 17:34:46 2009 New Revision: 61830 URL: http://llvm.org/viewvc/llvm-project?rev=61830&view=rev Log: Revert r42653 and forward-port the code that lets INC64_32r be converted to LEA64_32r in x86's convertToThreeAddress. This replaces code like this: movl %esi, %edi inc %edi with this: lea 1(%rsi), %edi which appears to be beneficial. Added: llvm/trunk/test/CodeGen/X86/2to3-inc64.ll Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=61830&r1=61829&r2=61830&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Tue Jan 6 17:34:46 2009 @@ -1108,7 +1108,8 @@ switch (MIOpc) { default: return 0; case X86::INC64r: - case X86::INC32r: { + case X86::INC32r: + case X86::INC64_32r: { assert(MI->getNumOperands() >= 2 && "Unknown inc instruction!"); unsigned Opc = MIOpc == X86::INC64r ? X86::LEA64r : (is64Bit ? X86::LEA64_32r : X86::LEA32r); @@ -1126,7 +1127,8 @@ Src, isKill, 1); break; case X86::DEC64r: - case X86::DEC32r: { + case X86::DEC32r: + case X86::DEC64_32r: { assert(MI->getNumOperands() >= 2 && "Unknown dec instruction!"); unsigned Opc = MIOpc == X86::DEC64r ? X86::LEA64r : (is64Bit ? X86::LEA64_32r : X86::LEA32r); Added: llvm/trunk/test/CodeGen/X86/2to3-inc64.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2to3-inc64.ll?rev=61830&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/2to3-inc64.ll (added) +++ llvm/trunk/test/CodeGen/X86/2to3-inc64.ll Tue Jan 6 17:34:46 2009 @@ -0,0 +1,21 @@ +; RUN: llvm-as < %s | llc -march=x86-64 -o %t -f -stats -info-output-file - | \ +; RUN: grep {asm-printer} | grep {Number of machine instrs printed} | grep 5 +; RUN: grep {leal 1(\%rsi),} %t + +define fastcc zeroext i8 @fullGtU(i32 %i1, i32 %i2) nounwind { +entry: + %0 = add i32 %i2, 1 ; [#uses=1] + %1 = sext i32 %0 to i64 ; [#uses=1] + %2 = getelementptr i8* null, i64 %1 ; [#uses=1] + %3 = load i8* %2, align 1 ; [#uses=1] + %4 = icmp eq i8 0, %3 ; [#uses=1] + br i1 %4, label %bb3, label %bb34 + +bb3: ; preds = %entry + %5 = add i32 %i2, 4 ; [#uses=0] + ret i8 0 + +bb34: ; preds = %entry + ret i8 0 +} + From gohman at apple.com Tue Jan 6 17:48:11 2009 From: gohman at apple.com (Dan Gohman) Date: Tue, 06 Jan 2009 23:48:11 -0000 Subject: [llvm-commits] [llvm] r61831 - /llvm/trunk/test/CodeGen/X86/fold-pcmpeqd-2.ll Message-ID: <200901062348.n06NmBsf024200@zion.cs.uiuc.edu> Author: djg Date: Tue Jan 6 17:48:10 2009 New Revision: 61831 URL: http://llvm.org/viewvc/llvm-project?rev=61831&view=rev Log: Now that fold-pcmpeqd-0.ll is effectively testing that scheduling helps avoid the need for spilling, add a new testcase that tests that the pcmpeqd used for V_SETALLONES is changed to a constant-pool load as needed. Added: llvm/trunk/test/CodeGen/X86/fold-pcmpeqd-2.ll Added: llvm/trunk/test/CodeGen/X86/fold-pcmpeqd-2.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fold-pcmpeqd-2.ll?rev=61831&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/fold-pcmpeqd-2.ll (added) +++ llvm/trunk/test/CodeGen/X86/fold-pcmpeqd-2.ll Tue Jan 6 17:48:10 2009 @@ -0,0 +1,83 @@ +; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin | not grep pcmpeqd +; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin | grep pcmpeqd | count 1 + +; This testcase should need to spill the -1 value on x86-32, +; so it shouldn't use pcmpeqd to materialize an all-ones vector; it +; should use a constant-pool load instead. + + %struct.__ImageExecInfo = type <{ <4 x i32>, <4 x float>, <2 x i64>, i8*, i8*, i8*, i32, i32, i32, i32, i32 }> + %struct._cl_image_format_t = type <{ i32, i32, i32 }> + %struct._image2d_t = type <{ i8*, %struct._cl_image_format_t, i32, i32, i32, i32, i32, i32 }> + +define void @program_1(%struct._image2d_t* %dest, %struct._image2d_t* %t0, <4 x float> %p0, <4 x float> %p1, <4 x float> %p4, <4 x float> %p5, <4 x float> %p6) nounwind { +entry: + %tmp3.i = load i32* null ; [#uses=1] + %cmp = icmp slt i32 0, %tmp3.i ; [#uses=1] + br i1 %cmp, label %forcond, label %ifthen + +ifthen: ; preds = %entry + ret void + +forcond: ; preds = %entry + %tmp3.i536 = load i32* null ; [#uses=1] + %cmp12 = icmp slt i32 0, %tmp3.i536 ; [#uses=1] + br i1 %cmp12, label %forbody, label %afterfor + +forbody: ; preds = %forcond + %bitcast204.i104 = bitcast <4 x i32> zeroinitializer to <4 x float> ; <<4 x float>> [#uses=1] + %tmp78 = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> < float 1.280000e+02, float 1.280000e+02, float 1.280000e+02, float 1.280000e+02 >, <4 x float> zeroinitializer) nounwind ; <<4 x float>> [#uses=2] + %tmp79 = call <4 x i32> @llvm.x86.sse2.cvttps2dq(<4 x float> %tmp78) nounwind ; <<4 x i32>> [#uses=1] + %tmp80 = call <4 x float> @llvm.x86.sse2.cvtdq2ps(<4 x i32> %tmp79) nounwind ; <<4 x float>> [#uses=1] + %sub140.i = sub <4 x float> %tmp78, %tmp80 ; <<4 x float>> [#uses=2] + %mul166.i = mul <4 x float> zeroinitializer, %sub140.i ; <<4 x float>> [#uses=1] + %add167.i = add <4 x float> %mul166.i, < float 0x3FE62ACB60000000, float 0x3FE62ACB60000000, float 0x3FE62ACB60000000, float 0x3FE62ACB60000000 > ; <<4 x float>> [#uses=1] + %mul171.i = mul <4 x float> %add167.i, %sub140.i ; <<4 x float>> [#uses=1] + %add172.i = add <4 x float> %mul171.i, < float 0x3FF0000A40000000, float 0x3FF0000A40000000, float 0x3FF0000A40000000, float 0x3FF0000A40000000 > ; <<4 x float>> [#uses=1] + %bitcast176.i = bitcast <4 x float> %add172.i to <4 x i32> ; <<4 x i32>> [#uses=1] + %andnps178.i = and <4 x i32> %bitcast176.i, zeroinitializer ; <<4 x i32>> [#uses=1] + %bitcast179.i = bitcast <4 x i32> %andnps178.i to <4 x float> ; <<4 x float>> [#uses=1] + %mul186.i = mul <4 x float> %bitcast179.i, zeroinitializer ; <<4 x float>> [#uses=1] + %bitcast190.i = bitcast <4 x float> %mul186.i to <4 x i32> ; <<4 x i32>> [#uses=1] + %andnps192.i = and <4 x i32> %bitcast190.i, zeroinitializer ; <<4 x i32>> [#uses=1] + %xorps.i = xor <4 x i32> zeroinitializer, < i32 -1, i32 -1, i32 -1, i32 -1 > ; <<4 x i32>> [#uses=1] + %orps203.i = or <4 x i32> %andnps192.i, %xorps.i ; <<4 x i32>> [#uses=1] + %bitcast204.i = bitcast <4 x i32> %orps203.i to <4 x float> ; <<4 x float>> [#uses=1] + %mul310 = mul <4 x float> %bitcast204.i104, zeroinitializer ; <<4 x float>> [#uses=2] + %mul313 = mul <4 x float> %bitcast204.i, zeroinitializer ; <<4 x float>> [#uses=1] + %cmpunord.i11 = call <4 x float> @llvm.x86.sse.cmp.ps(<4 x float> zeroinitializer, <4 x float> zeroinitializer, i8 3) nounwind ; <<4 x float>> [#uses=1] + %bitcast6.i13 = bitcast <4 x float> %cmpunord.i11 to <4 x i32> ; <<4 x i32>> [#uses=2] + %andps.i14 = and <4 x i32> zeroinitializer, %bitcast6.i13 ; <<4 x i32>> [#uses=1] + %not.i16 = xor <4 x i32> %bitcast6.i13, < i32 -1, i32 -1, i32 -1, i32 -1 > ; <<4 x i32>> [#uses=1] + %andnps.i17 = and <4 x i32> zeroinitializer, %not.i16 ; <<4 x i32>> [#uses=1] + %orps.i18 = or <4 x i32> %andnps.i17, %andps.i14 ; <<4 x i32>> [#uses=1] + %bitcast17.i19 = bitcast <4 x i32> %orps.i18 to <4 x float> ; <<4 x float>> [#uses=1] + %tmp83 = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %mul310, <4 x float> zeroinitializer) nounwind ; <<4 x float>> [#uses=1] + %bitcast.i3 = bitcast <4 x float> %mul310 to <4 x i32> ; <<4 x i32>> [#uses=1] + %andps.i5 = and <4 x i32> %bitcast.i3, zeroinitializer ; <<4 x i32>> [#uses=1] + %bitcast11.i6 = bitcast <4 x float> %tmp83 to <4 x i32> ; <<4 x i32>> [#uses=1] + %not.i7 = xor <4 x i32> zeroinitializer, < i32 -1, i32 -1, i32 -1, i32 -1 > ; <<4 x i32>> [#uses=1] + %andnps.i8 = and <4 x i32> %bitcast11.i6, %not.i7 ; <<4 x i32>> [#uses=1] + %orps.i9 = or <4 x i32> %andnps.i8, %andps.i5 ; <<4 x i32>> [#uses=1] + %bitcast17.i10 = bitcast <4 x i32> %orps.i9 to <4 x float> ; <<4 x float>> [#uses=1] + %tmp84 = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %mul313, <4 x float> zeroinitializer) nounwind ; <<4 x float>> [#uses=1] + %bitcast6.i = bitcast <4 x float> zeroinitializer to <4 x i32> ; <<4 x i32>> [#uses=2] + %andps.i = and <4 x i32> zeroinitializer, %bitcast6.i ; <<4 x i32>> [#uses=1] + %bitcast11.i = bitcast <4 x float> %tmp84 to <4 x i32> ; <<4 x i32>> [#uses=1] + %not.i = xor <4 x i32> %bitcast6.i, < i32 -1, i32 -1, i32 -1, i32 -1 > ; <<4 x i32>> [#uses=1] + %andnps.i = and <4 x i32> %bitcast11.i, %not.i ; <<4 x i32>> [#uses=1] + %orps.i = or <4 x i32> %andnps.i, %andps.i ; <<4 x i32>> [#uses=1] + %bitcast17.i = bitcast <4 x i32> %orps.i to <4 x float> ; <<4 x float>> [#uses=1] + call void null(<4 x float> %bitcast17.i19, <4 x float> %bitcast17.i10, <4 x float> %bitcast17.i, <4 x float> zeroinitializer, %struct.__ImageExecInfo* null, <4 x i32> zeroinitializer) nounwind + unreachable + +afterfor: ; preds = %forcond + ret void +} + +declare <4 x float> @llvm.x86.sse.cmp.ps(<4 x float>, <4 x float>, i8) nounwind readnone + +declare <4 x float> @llvm.x86.sse2.cvtdq2ps(<4 x i32>) nounwind readnone + +declare <4 x i32> @llvm.x86.sse2.cvttps2dq(<4 x float>) nounwind readnone + +declare <4 x float> @llvm.x86.sse.min.ps(<4 x float>, <4 x float>) nounwind readnone From gohman at apple.com Tue Jan 6 17:48:50 2009 From: gohman at apple.com (Dan Gohman) Date: Tue, 6 Jan 2009 15:48:50 -0800 Subject: [llvm-commits] [llvm] r61778 - in /llvm/trunk: lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp test/CodeGen/X86/fold-pcmpeqd-0.ll In-Reply-To: <585971A0-F459-4BBD-ABDC-332067DE4449@apple.com> References: <200901060119.n061J495013461@zion.cs.uiuc.edu> <585971A0-F459-4BBD-ABDC-332067DE4449@apple.com> Message-ID: On Jan 5, 2009, at 5:52 PM, Chris Lattner wrote: > > On Jan 5, 2009, at 5:19 PM, Dan Gohman wrote: >> >> >> As a side effect, fold-pcmpeqd-0.ll is now scheduled better >> and it no longer requires spilling on x86-32. > > Nice! Can you contrive a testcase that still exercises the pcmpeqd -> > constant pool entry spilling logic? Sure. r61831. Dan From clattner at apple.com Tue Jan 6 17:49:48 2009 From: clattner at apple.com (Chris Lattner) Date: Tue, 6 Jan 2009 15:49:48 -0800 Subject: [llvm-commits] [llvm] r61778 - in /llvm/trunk: lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp test/CodeGen/X86/fold-pcmpeqd-0.ll In-Reply-To: References: <200901060119.n061J495013461@zion.cs.uiuc.edu> <585971A0-F459-4BBD-ABDC-332067DE4449@apple.com> Message-ID: <4AC0F1D6-6A8C-49D4-A63C-14B0D8C16EFD@apple.com> On Jan 6, 2009, at 3:48 PM, Dan Gohman wrote: > > On Jan 5, 2009, at 5:52 PM, Chris Lattner wrote: > >> >> On Jan 5, 2009, at 5:19 PM, Dan Gohman wrote: >>> >>> >>> As a side effect, fold-pcmpeqd-0.ll is now scheduled better >>> and it no longer requires spilling on x86-32. >> >> Nice! Can you contrive a testcase that still exercises the pcmpeqd >> -> >> constant pool entry spilling logic? > > Sure. r61831. Thanks Dan! -Chris From bob.wilson at apple.com Tue Jan 6 18:09:01 2009 From: bob.wilson at apple.com (Bob Wilson) Date: Wed, 07 Jan 2009 00:09:01 -0000 Subject: [llvm-commits] [llvm] r61834 - in /llvm/trunk: include/llvm/DerivedTypes.h include/llvm/Intrinsics.td lib/VMCore/Verifier.cpp utils/TableGen/CodeGenTarget.cpp utils/TableGen/IntrinsicEmitter.cpp Message-ID: <200901070009.n07091oG024927@zion.cs.uiuc.edu> Author: bwilson Date: Tue Jan 6 18:09:01 2009 New Revision: 61834 URL: http://llvm.org/viewvc/llvm-project?rev=61834&view=rev Log: Improve support for type-generic vector intrinsics by teaching TableGen how to handle LLVMMatchType intrinsic parameters, and by adding new subclasses of LLVMMatchType to match vector types with integral elements that are either twice as wide or half as wide as the elements of the matched type. Modified: llvm/trunk/include/llvm/DerivedTypes.h llvm/trunk/include/llvm/Intrinsics.td llvm/trunk/lib/VMCore/Verifier.cpp llvm/trunk/utils/TableGen/CodeGenTarget.cpp llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp Modified: llvm/trunk/include/llvm/DerivedTypes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DerivedTypes.h?rev=61834&r1=61833&r2=61834&view=diff ============================================================================== --- llvm/trunk/include/llvm/DerivedTypes.h (original) +++ llvm/trunk/include/llvm/DerivedTypes.h Tue Jan 6 18:09:01 2009 @@ -369,6 +369,26 @@ return VectorType::get(EltTy, VTy->getNumElements()); } + /// VectorType::getExtendedElementVectorType - This static method is like + /// getInteger except that the element types are twice as wide as the + /// elements in the input type. + /// + static VectorType *getExtendedElementVectorType(const VectorType *VTy) { + unsigned EltBits = VTy->getElementType()->getPrimitiveSizeInBits(); + const Type *EltTy = IntegerType::get(EltBits * 2); + return VectorType::get(EltTy, VTy->getNumElements()); + } + + /// VectorType::getTruncatedElementVectorType - This static method is like + /// getInteger except that the element types are half as wide as the + /// elements in the input type. + /// + static VectorType *getTruncatedElementVectorType(const VectorType *VTy) { + unsigned EltBits = VTy->getElementType()->getPrimitiveSizeInBits(); + const Type *EltTy = IntegerType::get(EltBits / 2); + return VectorType::get(EltTy, VTy->getNumElements()); + } + /// @brief Return the number of elements in the Vector type. inline unsigned getNumElements() const { return NumElements; } Modified: llvm/trunk/include/llvm/Intrinsics.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Intrinsics.td?rev=61834&r1=61833&r2=61834&view=diff ============================================================================== --- llvm/trunk/include/llvm/Intrinsics.td (original) +++ llvm/trunk/include/llvm/Intrinsics.td Tue Jan 6 18:09:01 2009 @@ -74,6 +74,13 @@ int Number = num; } +// Match the type of another intrinsic parameter that is expected to be +// an integral vector type, but change the element size to be twice as wide +// or half as wide as the other type. This is only useful when the intrinsic +// is overloaded, so the matched type should be declared as iAny. +class LLVMExtendedElementVectorType : LLVMMatchType; +class LLVMTruncatedElementVectorType : LLVMMatchType; + def llvm_void_ty : LLVMType; def llvm_anyint_ty : LLVMType; def llvm_anyfloat_ty : LLVMType; Modified: llvm/trunk/lib/VMCore/Verifier.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Verifier.cpp?rev=61834&r1=61833&r2=61834&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Verifier.cpp (original) +++ llvm/trunk/lib/VMCore/Verifier.cpp Tue Jan 6 18:09:01 2009 @@ -1313,6 +1313,11 @@ InstsInThisBlock.insert(&I); } +// Flags used by TableGen to mark intrinsic parameters with the +// LLVMExtendedElementVectorType and LLVMTruncatedElementVectorType classes. +static const unsigned ExtendedElementVectorType = 0x40000000; +static const unsigned TruncatedElementVectorType = 0x20000000; + /// visitIntrinsicFunction - Allow intrinsics to be verified in different ways. /// void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) { @@ -1376,13 +1381,34 @@ unsigned NumElts = 0; const Type *EltTy = Ty; - if (const VectorType *VTy = dyn_cast(Ty)) { + const VectorType *VTy = dyn_cast(Ty); + if (VTy) { EltTy = VTy->getElementType(); NumElts = VTy->getNumElements(); } if (VT < 0) { int Match = ~VT; + + // Check flags that indicate a type that is an integral vector type with + // elements that are larger or smaller than the elements of the matched + // type. + if ((Match & (ExtendedElementVectorType | + TruncatedElementVectorType)) != 0) { + if (!VTy) { + CheckFailed("Intrinsic parameter #" + utostr(ArgNo - 1) + " is not " + "a vector type.", F); + return false; + } + // Adjust the current Ty (in the opposite direction) rather than + // the type being matched against. + if ((Match & ExtendedElementVectorType) != 0) + Ty = VectorType::getTruncatedElementVectorType(VTy); + else + Ty = VectorType::getExtendedElementVectorType(VTy); + Match &= ~(ExtendedElementVectorType | TruncatedElementVectorType); + } + const Type *RetTy = FTy->getReturnType(); const StructType *ST = dyn_cast(RetTy); unsigned NumRets = 1; Modified: llvm/trunk/utils/TableGen/CodeGenTarget.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenTarget.cpp?rev=61834&r1=61833&r2=61834&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/CodeGenTarget.cpp (original) +++ llvm/trunk/utils/TableGen/CodeGenTarget.cpp Tue Jan 6 18:09:01 2009 @@ -483,7 +483,17 @@ for (unsigned i = 0, e = TypeList->getSize(); i != e; ++i) { Record *TyEl = TypeList->getElementAsRecord(i); assert(TyEl->isSubClassOf("LLVMType") && "Expected a type!"); - MVT::SimpleValueType VT = getValueType(TyEl->getValueAsDef("VT")); + MVT::SimpleValueType VT; + if (TyEl->isSubClassOf("LLVMMatchType")) { + VT = IS.RetVTs[TyEl->getValueAsInt("Number")]; + // It only makes sense to use the extended and truncated vector element + // variants with iAny types; otherwise, if the intrinsic is not + // overloaded, all the types can be specified directly. + assert(((!TyEl->isSubClassOf("LLVMExtendedElementVectorType") && + !TyEl->isSubClassOf("LLVMTruncatedElementVectorType")) || + VT == MVT::iAny) && "Expected iAny type"); + } else + VT = getValueType(TyEl->getValueAsDef("VT")); isOverloaded |= VT == MVT::iAny || VT == MVT::fAny || VT == MVT::iPTRAny; IS.RetVTs.push_back(VT); IS.RetTypeDefs.push_back(TyEl); @@ -497,7 +507,21 @@ for (unsigned i = 0, e = TypeList->getSize(); i != e; ++i) { Record *TyEl = TypeList->getElementAsRecord(i); assert(TyEl->isSubClassOf("LLVMType") && "Expected a type!"); - MVT::SimpleValueType VT = getValueType(TyEl->getValueAsDef("VT")); + MVT::SimpleValueType VT; + if (TyEl->isSubClassOf("LLVMMatchType")) { + unsigned MatchTy = TyEl->getValueAsInt("Number"); + if (MatchTy < IS.RetVTs.size()) + VT = IS.RetVTs[MatchTy]; + else + VT = IS.ParamVTs[MatchTy - IS.RetVTs.size()]; + // It only makes sense to use the extended and truncated vector element + // variants with iAny types; otherwise, if the intrinsic is not + // overloaded, all the types can be specified directly. + assert(((!TyEl->isSubClassOf("LLVMExtendedElementVectorType") && + !TyEl->isSubClassOf("LLVMTruncatedElementVectorType")) || + VT == MVT::iAny) && "Expected iAny type"); + } else + VT = getValueType(TyEl->getValueAsDef("VT")); isOverloaded |= VT == MVT::iAny || VT == MVT::fAny || VT == MVT::iPTRAny; IS.ParamVTs.push_back(VT); IS.ParamTypeDefs.push_back(TyEl); Modified: llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp?rev=61834&r1=61833&r2=61834&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp (original) +++ llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp Tue Jan 6 18:09:01 2009 @@ -167,7 +167,14 @@ if (ArgType->isSubClassOf("LLVMMatchType")) { unsigned Number = ArgType->getValueAsInt("Number"); assert(Number < ArgNo && "Invalid matching number!"); - OS << "Tys[" << Number << "]"; + if (ArgType->isSubClassOf("LLVMExtendedElementVectorType")) + OS << "VectorType::getExtendedElementVectorType" + << "(dyn_cast(Tys[" << Number << "]))"; + else if (ArgType->isSubClassOf("LLVMTruncatedElementVectorType")) + OS << "VectorType::getTruncatedElementVectorType" + << "(dyn_cast(Tys[" << Number << "]))"; + else + OS << "Tys[" << Number << "]"; } else if (VT == MVT::iAny || VT == MVT::fAny) { // NOTE: The ArgNo variable here is not the absolute argument number, it is // the index of the "arbitrary" type in the Tys array passed to the @@ -281,7 +288,12 @@ if (ArgType->isSubClassOf("LLVMMatchType")) { unsigned Number = ArgType->getValueAsInt("Number"); assert(Number < j && "Invalid matching number!"); - OS << "~" << Number; + if (ArgType->isSubClassOf("LLVMExtendedElementVectorType")) + OS << "~(ExtendedElementVectorType | " << Number << ")"; + else if (ArgType->isSubClassOf("LLVMTruncatedElementVectorType")) + OS << "~(TruncatedElementVectorType | " << Number << ")"; + else + OS << "~" << Number; } else { MVT::SimpleValueType VT = getValueType(ArgType->getValueAsDef("VT")); OS << getEnumName(VT); @@ -299,7 +311,12 @@ if (ArgType->isSubClassOf("LLVMMatchType")) { unsigned Number = ArgType->getValueAsInt("Number"); assert(Number < j + RetTys.size() && "Invalid matching number!"); - OS << "~" << Number; + if (ArgType->isSubClassOf("LLVMExtendedElementVectorType")) + OS << "~(ExtendedElementVectorType | " << Number << ")"; + else if (ArgType->isSubClassOf("LLVMTruncatedElementVectorType")) + OS << "~(TruncatedElementVectorType | " << Number << ")"; + else + OS << "~" << Number; } else { MVT::SimpleValueType VT = getValueType(ArgType->getValueAsDef("VT")); OS << getEnumName(VT); From gohman at apple.com Tue Jan 6 18:15:08 2009 From: gohman at apple.com (Dan Gohman) Date: Wed, 07 Jan 2009 00:15:08 -0000 Subject: [llvm-commits] [llvm] r61835 - in /llvm/trunk: lib/Target/X86/X86FastISel.cpp lib/Target/X86/X86ISelLowering.cpp lib/Target/X86/X86InstrInfo.cpp lib/Target/X86/X86InstrInfo.h lib/Target/X86/X86InstrInfo.td test/CodeGen/X86/add-with-overflow.ll test/CodeGen/X86/sub-with-overflow.ll Message-ID: <200901070015.n070F9oA025133@zion.cs.uiuc.edu> Author: djg Date: Tue Jan 6 18:15:08 2009 New Revision: 61835 URL: http://llvm.org/viewvc/llvm-project?rev=61835&view=rev Log: X86_COND_C and X86_COND_NC are alternate mnemonics for X86_COND_B and X86_COND_AE, respectively. Modified: llvm/trunk/lib/Target/X86/X86FastISel.cpp llvm/trunk/lib/Target/X86/X86ISelLowering.cpp llvm/trunk/lib/Target/X86/X86InstrInfo.cpp llvm/trunk/lib/Target/X86/X86InstrInfo.h llvm/trunk/lib/Target/X86/X86InstrInfo.td llvm/trunk/test/CodeGen/X86/add-with-overflow.ll llvm/trunk/test/CodeGen/X86/sub-with-overflow.ll Modified: llvm/trunk/lib/Target/X86/X86FastISel.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86FastISel.cpp?rev=61835&r1=61834&r2=61835&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86FastISel.cpp (original) +++ llvm/trunk/lib/Target/X86/X86FastISel.cpp Tue Jan 6 18:15:08 2009 @@ -758,11 +758,11 @@ // %obit = extractvalue { i32, i1 } %t, 1 // br i1 %obit, label %overflow, label %normal // - // The %sum and %obit are converted in an ADD and a SETO/SETC before + // The %sum and %obit are converted in an ADD and a SETO/SETB before // reaching the branch. Therefore, we search backwards through the MBB - // looking for the SETO/SETC instruction. If an instruction modifies the - // EFLAGS register before we reach the SETO/SETC instruction, then we can't - // convert the branch into a JO/JC instruction. + // looking for the SETO/SETB instruction. If an instruction modifies the + // EFLAGS register before we reach the SETO/SETB instruction, then we can't + // convert the branch into a JO/JB instruction. Value *Agg = EI->getAggregateOperand(); @@ -814,9 +814,9 @@ if (SetMI) { unsigned OpCode = SetMI->getOpcode(); - if (OpCode == X86::SETOr || OpCode == X86::SETCr) { + if (OpCode == X86::SETOr || OpCode == X86::SETBr) { BuildMI(MBB, TII.get((OpCode == X86::SETOr) ? - X86::JO : X86::JC)).addMBB(TrueMBB); + X86::JO : X86::JB)).addMBB(TrueMBB); FastEmitBranch(FalseMBB); MBB->addSuccessor(TrueMBB); return true; @@ -1086,7 +1086,7 @@ ResultReg = createResultReg(TLI.getRegClassFor(MVT::i8)); BuildMI(MBB, TII.get((Intrinsic == Intrinsic::sadd_with_overflow) ? - X86::SETOr : X86::SETCr), ResultReg); + X86::SETOr : X86::SETBr), ResultReg); return true; } } Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=61835&r1=61834&r2=61835&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original) +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Tue Jan 6 18:15:08 2009 @@ -5057,7 +5057,7 @@ RHS = DAG.getNode(ISD::ANY_EXTEND, LHS.getValueType(), RHS); SDValue BT = DAG.getNode(X86ISD::BT, MVT::i32, LHS, RHS); - unsigned Cond = CC == ISD::SETEQ ? X86::COND_NC : X86::COND_C; + unsigned Cond = CC == ISD::SETEQ ? X86::COND_AE : X86::COND_B; return DAG.getNode(X86ISD::SETCC, MVT::i8, DAG.getConstant(Cond, MVT::i8), BT); } @@ -5283,7 +5283,7 @@ switch (cast(CC)->getZExtValue()) { default: break; case X86::COND_O: - case X86::COND_C: + case X86::COND_B: // These can only come from an arithmetic instruction with overflow, // e.g. SADDO, UADDO. Cond = Cond.getNode()->getOperand(1); @@ -6243,7 +6243,7 @@ break; case ISD::UADDO: BaseOp = X86ISD::ADD; - Cond = X86::COND_C; + Cond = X86::COND_B; break; case ISD::SSUBO: BaseOp = X86ISD::SUB; @@ -6251,7 +6251,7 @@ break; case ISD::USUBO: BaseOp = X86ISD::SUB; - Cond = X86::COND_C; + Cond = X86::COND_B; break; case ISD::SMULO: BaseOp = X86ISD::SMUL; @@ -6259,7 +6259,7 @@ break; case ISD::UMULO: BaseOp = X86ISD::UMUL; - Cond = X86::COND_C; + Cond = X86::COND_B; break; } Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=61835&r1=61834&r2=61835&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Tue Jan 6 18:15:08 2009 @@ -282,13 +282,11 @@ { X86::SETAr, X86::SETAm, 0 }, { X86::SETBEr, X86::SETBEm, 0 }, { X86::SETBr, X86::SETBm, 0 }, - { X86::SETCr, X86::SETCm, 0 }, { X86::SETEr, X86::SETEm, 0 }, { X86::SETGEr, X86::SETGEm, 0 }, { X86::SETGr, X86::SETGm, 0 }, { X86::SETLEr, X86::SETLEm, 0 }, { X86::SETLr, X86::SETLm, 0 }, - { X86::SETNCr, X86::SETNCm, 0 }, { X86::SETNEr, X86::SETNEm, 0 }, { X86::SETNOr, X86::SETNOm, 0 }, { X86::SETNPr, X86::SETNPm, 0 }, @@ -1389,8 +1387,6 @@ case X86::JNP: return X86::COND_NP; case X86::JO: return X86::COND_O; case X86::JNO: return X86::COND_NO; - case X86::JC: return X86::COND_C; - case X86::JNC: return X86::COND_NC; } } @@ -1413,8 +1409,6 @@ case X86::COND_NP: return X86::JNP; case X86::COND_O: return X86::JO; case X86::COND_NO: return X86::JNO; - case X86::COND_C: return X86::JC; - case X86::COND_NC: return X86::JNC; } } @@ -1439,8 +1433,6 @@ case X86::COND_NP: return X86::COND_P; case X86::COND_O: return X86::COND_NO; case X86::COND_NO: return X86::COND_O; - case X86::COND_C: return X86::COND_NC; - case X86::COND_NC: return X86::COND_C; } } Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.h?rev=61835&r1=61834&r2=61835&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86InstrInfo.h (original) +++ llvm/trunk/lib/Target/X86/X86InstrInfo.h Tue Jan 6 18:15:08 2009 @@ -41,11 +41,9 @@ COND_NO = 10, COND_NP = 11, COND_NS = 12, - COND_NC = 13, - COND_O = 14, - COND_P = 15, - COND_S = 16, - COND_C = 17, + COND_O = 13, + COND_P = 14, + COND_S = 15, // Artificial condition codes. These are used by AnalyzeBranch // to indicate a block terminated with two conditional branches to Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.td?rev=61835&r1=61834&r2=61835&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86InstrInfo.td (original) +++ llvm/trunk/lib/Target/X86/X86InstrInfo.td Tue Jan 6 18:15:08 2009 @@ -236,24 +236,22 @@ // X86 specific condition code. These correspond to CondCode in // X86InstrInfo.h. They must be kept in synch. -def X86_COND_A : PatLeaf<(i8 0)>; -def X86_COND_AE : PatLeaf<(i8 1)>; -def X86_COND_B : PatLeaf<(i8 2)>; -def X86_COND_BE : PatLeaf<(i8 3)>; -def X86_COND_E : PatLeaf<(i8 4)>; -def X86_COND_G : PatLeaf<(i8 5)>; -def X86_COND_GE : PatLeaf<(i8 6)>; -def X86_COND_L : PatLeaf<(i8 7)>; -def X86_COND_LE : PatLeaf<(i8 8)>; -def X86_COND_NE : PatLeaf<(i8 9)>; +def X86_COND_A : PatLeaf<(i8 0)>; // alt. COND_NBE +def X86_COND_AE : PatLeaf<(i8 1)>; // alt. COND_NC +def X86_COND_B : PatLeaf<(i8 2)>; // alt. COND_C +def X86_COND_BE : PatLeaf<(i8 3)>; // alt. COND_NA +def X86_COND_E : PatLeaf<(i8 4)>; // alt. COND_Z +def X86_COND_G : PatLeaf<(i8 5)>; // alt. COND_NLE +def X86_COND_GE : PatLeaf<(i8 6)>; // alt. COND_NL +def X86_COND_L : PatLeaf<(i8 7)>; // alt. COND_NGE +def X86_COND_LE : PatLeaf<(i8 8)>; // alt. COND_NG +def X86_COND_NE : PatLeaf<(i8 9)>; // alt. COND_NZ def X86_COND_NO : PatLeaf<(i8 10)>; -def X86_COND_NP : PatLeaf<(i8 11)>; +def X86_COND_NP : PatLeaf<(i8 11)>; // alt. COND_PO def X86_COND_NS : PatLeaf<(i8 12)>; -def X86_COND_NC : PatLeaf<(i8 13)>; -def X86_COND_O : PatLeaf<(i8 14)>; -def X86_COND_P : PatLeaf<(i8 15)>; -def X86_COND_S : PatLeaf<(i8 16)>; -def X86_COND_C : PatLeaf<(i8 17)>; +def X86_COND_O : PatLeaf<(i8 13)>; +def X86_COND_P : PatLeaf<(i8 14)>; // alt. COND_PE +def X86_COND_S : PatLeaf<(i8 15)>; def i16immSExt8 : PatLeaf<(i16 imm), [{ // i16immSExt8 predicate - True if the 16-bit immediate fits in a 8-bit @@ -465,10 +463,6 @@ [(X86brcond bb:$dst, X86_COND_O, EFLAGS)]>, TB; def JNO : IBr<0x81, (ins brtarget:$dst), "jno\t$dst", [(X86brcond bb:$dst, X86_COND_NO, EFLAGS)]>, TB; -def JC : IBr<0x82, (ins brtarget:$dst), "jc\t$dst", - [(X86brcond bb:$dst, X86_COND_C, EFLAGS)]>, TB; -def JNC : IBr<0x83, (ins brtarget:$dst), "jnc\t$dst", - [(X86brcond bb:$dst, X86_COND_NC, EFLAGS)]>, TB; } // Uses = [EFLAGS] //===----------------------------------------------------------------------===// @@ -2534,27 +2528,6 @@ "setno\t$dst", [(store (X86setcc X86_COND_NO, EFLAGS), addr:$dst)]>, TB; // [mem8] = not overflow - -def SETCr : I<0x92, MRM0r, - (outs GR8 :$dst), (ins), - "setc\t$dst", - [(set GR8:$dst, (X86setcc X86_COND_C, EFLAGS))]>, - TB; // GR8 = carry -def SETCm : I<0x92, MRM0m, - (outs), (ins i8mem:$dst), - "setc\t$dst", - [(store (X86setcc X86_COND_C, EFLAGS), addr:$dst)]>, - TB; // [mem8] = carry -def SETNCr : I<0x93, MRM0r, - (outs GR8 :$dst), (ins), - "setnc\t$dst", - [(set GR8:$dst, (X86setcc X86_COND_NC, EFLAGS))]>, - TB; // GR8 = not carry -def SETNCm : I<0x93, MRM0m, - (outs), (ins i8mem:$dst), - "setnc\t$dst", - [(store (X86setcc X86_COND_NC, EFLAGS), addr:$dst)]>, - TB; // [mem8] = not carry } // Uses = [EFLAGS] Modified: llvm/trunk/test/CodeGen/X86/add-with-overflow.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/add-with-overflow.ll?rev=61835&r1=61834&r2=61835&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/add-with-overflow.ll (original) +++ llvm/trunk/test/CodeGen/X86/add-with-overflow.ll Tue Jan 6 18:15:08 2009 @@ -1,7 +1,7 @@ ; RUN: llvm-as < %s | llc -march=x86 | grep {jo} | count 2 -; RUN: llvm-as < %s | llc -march=x86 | grep {jc} | count 2 +; RUN: llvm-as < %s | llc -march=x86 | grep {jb} | count 2 ; RUN: llvm-as < %s | llc -march=x86 -fast | grep {jo} | count 2 -; RUN: llvm-as < %s | llc -march=x86 -fast | grep {jc} | count 2 +; RUN: llvm-as < %s | llc -march=x86 -fast | grep {jb} | count 2 @ok = internal constant [4 x i8] c"%d\0A\00" @no = internal constant [4 x i8] c"no\0A\00" Modified: llvm/trunk/test/CodeGen/X86/sub-with-overflow.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/sub-with-overflow.ll?rev=61835&r1=61834&r2=61835&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/sub-with-overflow.ll (original) +++ llvm/trunk/test/CodeGen/X86/sub-with-overflow.ll Tue Jan 6 18:15:08 2009 @@ -1,5 +1,5 @@ ; RUN: llvm-as < %s | llc -march=x86 | grep {jo} | count 1 -; RUN: llvm-as < %s | llc -march=x86 | grep {jc} | count 1 +; RUN: llvm-as < %s | llc -march=x86 | grep {jb} | count 1 @ok = internal constant [4 x i8] c"%d\0A\00" @no = internal constant [4 x i8] c"no\0A\00" From gohman at apple.com Tue Jan 6 18:35:11 2009 From: gohman at apple.com (Dan Gohman) Date: Wed, 07 Jan 2009 00:35:11 -0000 Subject: [llvm-commits] [llvm] r61836 - in /llvm/trunk/lib/Target/X86: X86Instr64bit.td X86InstrInfo.cpp X86InstrInfo.td Message-ID: <200901070035.n070ZBSL025710@zion.cs.uiuc.edu> Author: djg Date: Tue Jan 6 18:35:10 2009 New Revision: 61836 URL: http://llvm.org/viewvc/llvm-project?rev=61836&view=rev Log: Define instructions for cmovo and cmovno. Modified: llvm/trunk/lib/Target/X86/X86Instr64bit.td llvm/trunk/lib/Target/X86/X86InstrInfo.cpp llvm/trunk/lib/Target/X86/X86InstrInfo.td Modified: llvm/trunk/lib/Target/X86/X86Instr64bit.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Instr64bit.td?rev=61836&r1=61835&r2=61836&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86Instr64bit.td (original) +++ llvm/trunk/lib/Target/X86/X86Instr64bit.td Tue Jan 6 18:35:10 2009 @@ -1004,6 +1004,16 @@ "cmovnp\t{$src2, $dst|$dst, $src2}", [(set GR64:$dst, (X86cmov GR64:$src1, GR64:$src2, X86_COND_NP, EFLAGS))]>, TB; +def CMOVO64rr : RI<0x40, MRMSrcReg, // if overflow, GR64 = GR64 + (outs GR64:$dst), (ins GR64:$src1, GR64:$src2), + "cmovo\t{$src2, $dst|$dst, $src2}", + [(set GR64:$dst, (X86cmov GR64:$src1, GR64:$src2, + X86_COND_O, EFLAGS))]>, TB; +def CMOVNO64rr : RI<0x41, MRMSrcReg, // if !overflow, GR64 = GR64 + (outs GR64:$dst), (ins GR64:$src1, GR64:$src2), + "cmovno\t{$src2, $dst|$dst, $src2}", + [(set GR64:$dst, (X86cmov GR64:$src1, GR64:$src2, + X86_COND_NO, EFLAGS))]>, TB; } // isCommutable = 1 def CMOVB64rm : RI<0x42, MRMSrcMem, // if , TB; +def CMOVO64rm : RI<0x40, MRMSrcMem, // if overflow, GR64 = [mem64] + (outs GR64:$dst), (ins GR64:$src1, i64mem:$src2), + "cmovo\t{$src2, $dst|$dst, $src2}", + [(set GR64:$dst, (X86cmov GR64:$src1, (loadi64 addr:$src2), + X86_COND_O, EFLAGS))]>, TB; +def CMOVNO64rm : RI<0x41, MRMSrcMem, // if !overflow, GR64 = [mem64] + (outs GR64:$dst), (ins GR64:$src1, i64mem:$src2), + "cmovno\t{$src2, $dst|$dst, $src2}", + [(set GR64:$dst, (X86cmov GR64:$src1, (loadi64 addr:$src2), + X86_COND_NO, EFLAGS))]>, TB; } // isTwoAddress //===----------------------------------------------------------------------===// Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=61836&r1=61835&r2=61836&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Tue Jan 6 18:35:10 2009 @@ -499,6 +499,9 @@ { X86::CMOVNS16rr, X86::CMOVNS16rm }, { X86::CMOVNS32rr, X86::CMOVNS32rm }, { X86::CMOVNS64rr, X86::CMOVNS64rm }, + { X86::CMOVO16rr, X86::CMOVO16rm }, + { X86::CMOVO32rr, X86::CMOVO32rm }, + { X86::CMOVO64rr, X86::CMOVO64rm }, { X86::CMOVP16rr, X86::CMOVP16rm }, { X86::CMOVP32rr, X86::CMOVP32rm }, { X86::CMOVP64rr, X86::CMOVP64rm }, @@ -1308,7 +1311,13 @@ case X86::CMOVP64rr: case X86::CMOVNP16rr: case X86::CMOVNP32rr: - case X86::CMOVNP64rr: { + case X86::CMOVNP64rr: + case X86::CMOVO16rr: + case X86::CMOVO32rr: + case X86::CMOVO64rr: + case X86::CMOVNO16rr: + case X86::CMOVNO32rr: + case X86::CMOVNO64rr: { unsigned Opc = 0; switch (MI->getOpcode()) { default: break; @@ -1354,6 +1363,12 @@ case X86::CMOVNP16rr: Opc = X86::CMOVP16rr; break; case X86::CMOVNP32rr: Opc = X86::CMOVP32rr; break; case X86::CMOVNP64rr: Opc = X86::CMOVP64rr; break; + case X86::CMOVO16rr: Opc = X86::CMOVNO16rr; break; + case X86::CMOVO32rr: Opc = X86::CMOVNO32rr; break; + case X86::CMOVO64rr: Opc = X86::CMOVNO32rr; break; + case X86::CMOVNO16rr: Opc = X86::CMOVO16rr; break; + case X86::CMOVNO32rr: Opc = X86::CMOVO32rr; break; + case X86::CMOVNO64rr: Opc = X86::CMOVO64rr; break; } if (NewMI) { MachineFunction &MF = *MI->getParent()->getParent(); Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.td?rev=61836&r1=61835&r2=61836&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86InstrInfo.td (original) +++ llvm/trunk/lib/Target/X86/X86InstrInfo.td Tue Jan 6 18:35:10 2009 @@ -838,7 +838,6 @@ [(set GR32:$dst, (X86cmov GR32:$src1, GR32:$src2, X86_COND_B, EFLAGS))]>, TB; - def CMOVAE16rr: I<0x43, MRMSrcReg, // if >=u, GR16 = GR16 (outs GR16:$dst), (ins GR16:$src1, GR16:$src2), "cmovae\t{$src2, $dst|$dst, $src2}", @@ -995,14 +994,31 @@ [(set GR32:$dst, (X86cmov GR32:$src1, GR32:$src2, X86_COND_NP, EFLAGS))]>, TB; -} // isCommutable = 1 - -def CMOVNP32rm : I<0x4B, MRMSrcMem, // if !parity, GR32 = [mem32] - (outs GR32:$dst), (ins GR32:$src1, i32mem:$src2), - "cmovnp\t{$src2, $dst|$dst, $src2}", - [(set GR32:$dst, (X86cmov GR32:$src1, (loadi32 addr:$src2), - X86_COND_NP, EFLAGS))]>, +def CMOVO16rr : I<0x40, MRMSrcReg, // if overflow, GR16 = GR16 + (outs GR16:$dst), (ins GR16:$src1, GR16:$src2), + "cmovo\t{$src2, $dst|$dst, $src2}", + [(set GR16:$dst, (X86cmov GR16:$src1, GR16:$src2, + X86_COND_O, EFLAGS))]>, + TB, OpSize; +def CMOVO32rr : I<0x40, MRMSrcReg, // if overflow, GR32 = GR32 + (outs GR32:$dst), (ins GR32:$src1, GR32:$src2), + "cmovo\t{$src2, $dst|$dst, $src2}", + [(set GR32:$dst, (X86cmov GR32:$src1, GR32:$src2, + X86_COND_O, EFLAGS))]>, + TB; +def CMOVNO16rr : I<0x41, MRMSrcReg, // if !overflow, GR16 = GR16 + (outs GR16:$dst), (ins GR16:$src1, GR16:$src2), + "cmovno\t{$src2, $dst|$dst, $src2}", + [(set GR16:$dst, (X86cmov GR16:$src1, GR16:$src2, + X86_COND_NO, EFLAGS))]>, + TB, OpSize; +def CMOVNO32rr : I<0x41, MRMSrcReg, // if !overflow, GR32 = GR32 + (outs GR32:$dst), (ins GR32:$src1, GR32:$src2), + "cmovno\t{$src2, $dst|$dst, $src2}", + [(set GR32:$dst, (X86cmov GR32:$src1, GR32:$src2, + X86_COND_NO, EFLAGS))]>, TB; +} // isCommutable = 1 def CMOVB16rm : I<0x42, MRMSrcMem, // if , TB, OpSize; +def CMOVNP32rm : I<0x4B, MRMSrcMem, // if !parity, GR32 = [mem32] + (outs GR32:$dst), (ins GR32:$src1, i32mem:$src2), + "cmovnp\t{$src2, $dst|$dst, $src2}", + [(set GR32:$dst, (X86cmov GR32:$src1, (loadi32 addr:$src2), + X86_COND_NP, EFLAGS))]>, + TB; +def CMOVO16rm : I<0x40, MRMSrcMem, // if overflow, GR16 = [mem16] + (outs GR16:$dst), (ins GR16:$src1, i16mem:$src2), + "cmovo\t{$src2, $dst|$dst, $src2}", + [(set GR16:$dst, (X86cmov GR16:$src1, (loadi16 addr:$src2), + X86_COND_O, EFLAGS))]>, + TB, OpSize; +def CMOVO32rm : I<0x40, MRMSrcMem, // if overflow, GR32 = [mem32] + (outs GR32:$dst), (ins GR32:$src1, i32mem:$src2), + "cmovo\t{$src2, $dst|$dst, $src2}", + [(set GR32:$dst, (X86cmov GR32:$src1, (loadi32 addr:$src2), + X86_COND_O, EFLAGS))]>, + TB; +def CMOVNO16rm : I<0x41, MRMSrcMem, // if !overflow, GR16 = [mem16] + (outs GR16:$dst), (ins GR16:$src1, i16mem:$src2), + "cmovno\t{$src2, $dst|$dst, $src2}", + [(set GR16:$dst, (X86cmov GR16:$src1, (loadi16 addr:$src2), + X86_COND_NO, EFLAGS))]>, + TB, OpSize; +def CMOVNO32rm : I<0x41, MRMSrcMem, // if !overflow, GR32 = [mem32] + (outs GR32:$dst), (ins GR32:$src1, i32mem:$src2), + "cmovno\t{$src2, $dst|$dst, $src2}", + [(set GR32:$dst, (X86cmov GR32:$src1, (loadi32 addr:$src2), + X86_COND_NO, EFLAGS))]>, + TB; } // Uses = [EFLAGS] From kremenek at apple.com Tue Jan 6 18:40:41 2009 From: kremenek at apple.com (Ted Kremenek) Date: Wed, 07 Jan 2009 00:40:41 -0000 Subject: [llvm-commits] [llvm] r61838 - /llvm/tags/checker/checker-0.138/ Message-ID: <200901070040.n070efo1025868@zion.cs.uiuc.edu> Author: kremenek Date: Tue Jan 6 18:40:41 2009 New Revision: 61838 URL: http://llvm.org/viewvc/llvm-project?rev=61838&view=rev Log: Tagging checker-0.138. Added: llvm/tags/checker/checker-0.138/ - copied from r61837, llvm/trunk/ From gohman at apple.com Tue Jan 6 18:44:53 2009 From: gohman at apple.com (Dan Gohman) Date: Wed, 07 Jan 2009 00:44:53 -0000 Subject: [llvm-commits] [llvm] r61841 - /llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Message-ID: <200901070044.n070irWZ026038@zion.cs.uiuc.edu> Author: djg Date: Tue Jan 6 18:44:53 2009 New Revision: 61841 URL: http://llvm.org/viewvc/llvm-project?rev=61841&view=rev Log: Add load-folding table entries for cmovno too. Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=61841&r1=61840&r2=61841&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Tue Jan 6 18:44:53 2009 @@ -493,6 +493,9 @@ { X86::CMOVNE16rr, X86::CMOVNE16rm }, { X86::CMOVNE32rr, X86::CMOVNE32rm }, { X86::CMOVNE64rr, X86::CMOVNE64rm }, + { X86::CMOVNO16rr, X86::CMOVNO16rm }, + { X86::CMOVNO32rr, X86::CMOVNO32rm }, + { X86::CMOVNO64rr, X86::CMOVNO64rm }, { X86::CMOVNP16rr, X86::CMOVNP16rm }, { X86::CMOVNP32rr, X86::CMOVNP32rm }, { X86::CMOVNP64rr, X86::CMOVNP64rm }, From gohman at apple.com Tue Jan 6 19:00:24 2009 From: gohman at apple.com (Dan Gohman) Date: Wed, 07 Jan 2009 01:00:24 -0000 Subject: [llvm-commits] [llvm] r61842 - in /llvm/trunk: lib/Target/X86/X86Instr64bit.td lib/Target/X86/X86InstrInfo.td test/CodeGen/X86/commute-cmov.ll Message-ID: <200901070100.n0710Pdr026457@zion.cs.uiuc.edu> Author: djg Date: Tue Jan 6 19:00:24 2009 New Revision: 61842 URL: http://llvm.org/viewvc/llvm-project?rev=61842&view=rev Log: Add patterns to match conditional moves with loads folded into their left operand, rather than their right. Do this by commuting the operands and inverting the condition. Added: llvm/trunk/test/CodeGen/X86/commute-cmov.ll Modified: llvm/trunk/lib/Target/X86/X86Instr64bit.td llvm/trunk/lib/Target/X86/X86InstrInfo.td Modified: llvm/trunk/lib/Target/X86/X86Instr64bit.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Instr64bit.td?rev=61842&r1=61841&r2=61842&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86Instr64bit.td (original) +++ llvm/trunk/lib/Target/X86/X86Instr64bit.td Tue Jan 6 19:00:24 2009 @@ -1344,7 +1344,40 @@ def : Pat<(parallel (X86cmp GR64:$src1, 0), (implicit EFLAGS)), (TEST64rr GR64:$src1, GR64:$src1)>; - +// Conditional moves with folded loads with operands swapped and conditions +// inverted. +def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, X86_COND_B, EFLAGS), + (CMOVAE64rm GR64:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, X86_COND_AE, EFLAGS), + (CMOVB64rm GR64:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, X86_COND_E, EFLAGS), + (CMOVNE64rm GR64:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, X86_COND_NE, EFLAGS), + (CMOVE64rm GR64:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, X86_COND_BE, EFLAGS), + (CMOVA64rm GR64:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, X86_COND_A, EFLAGS), + (CMOVBE64rm GR64:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, X86_COND_L, EFLAGS), + (CMOVGE64rm GR64:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, X86_COND_GE, EFLAGS), + (CMOVL64rm GR64:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, X86_COND_LE, EFLAGS), + (CMOVG64rm GR64:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, X86_COND_G, EFLAGS), + (CMOVLE64rm GR64:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, X86_COND_P, EFLAGS), + (CMOVNP64rm GR64:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, X86_COND_NP, EFLAGS), + (CMOVP64rm GR64:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, X86_COND_S, EFLAGS), + (CMOVNS64rm GR64:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, X86_COND_NS, EFLAGS), + (CMOVS64rm GR64:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, X86_COND_O, EFLAGS), + (CMOVNO64rm GR64:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, X86_COND_NO, EFLAGS), + (CMOVO64rm GR64:$src2, addr:$src1)>; // Zero-extension def : Pat<(i64 (zext GR32:$src)), Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.td?rev=61842&r1=61841&r2=61842&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86InstrInfo.td (original) +++ llvm/trunk/lib/Target/X86/X86InstrInfo.td Tue Jan 6 19:00:24 2009 @@ -3078,6 +3078,73 @@ def : Pat<(parallel (X86cmp GR32:$src1, 0), (implicit EFLAGS)), (TEST32rr GR32:$src1, GR32:$src1)>; +// Conditional moves with folded loads with operands swapped and conditions +// inverted. +def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, X86_COND_B, EFLAGS), + (CMOVAE16rm GR16:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, X86_COND_B, EFLAGS), + (CMOVAE32rm GR32:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, X86_COND_AE, EFLAGS), + (CMOVB16rm GR16:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, X86_COND_AE, EFLAGS), + (CMOVB32rm GR32:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, X86_COND_E, EFLAGS), + (CMOVNE16rm GR16:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, X86_COND_E, EFLAGS), + (CMOVNE32rm GR32:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, X86_COND_NE, EFLAGS), + (CMOVE16rm GR16:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, X86_COND_NE, EFLAGS), + (CMOVE32rm GR32:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, X86_COND_BE, EFLAGS), + (CMOVA16rm GR16:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, X86_COND_BE, EFLAGS), + (CMOVA32rm GR32:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, X86_COND_A, EFLAGS), + (CMOVBE16rm GR16:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, X86_COND_A, EFLAGS), + (CMOVBE32rm GR32:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, X86_COND_L, EFLAGS), + (CMOVGE16rm GR16:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, X86_COND_L, EFLAGS), + (CMOVGE32rm GR32:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, X86_COND_GE, EFLAGS), + (CMOVL16rm GR16:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, X86_COND_GE, EFLAGS), + (CMOVL32rm GR32:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, X86_COND_LE, EFLAGS), + (CMOVG16rm GR16:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, X86_COND_LE, EFLAGS), + (CMOVG32rm GR32:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, X86_COND_G, EFLAGS), + (CMOVLE16rm GR16:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, X86_COND_G, EFLAGS), + (CMOVLE32rm GR32:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, X86_COND_P, EFLAGS), + (CMOVNP16rm GR16:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, X86_COND_P, EFLAGS), + (CMOVNP32rm GR32:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, X86_COND_NP, EFLAGS), + (CMOVP16rm GR16:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, X86_COND_NP, EFLAGS), + (CMOVP32rm GR32:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, X86_COND_S, EFLAGS), + (CMOVNS16rm GR16:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, X86_COND_S, EFLAGS), + (CMOVNS32rm GR32:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, X86_COND_NS, EFLAGS), + (CMOVS16rm GR16:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, X86_COND_NS, EFLAGS), + (CMOVS32rm GR32:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, X86_COND_O, EFLAGS), + (CMOVNO16rm GR16:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, X86_COND_O, EFLAGS), + (CMOVNO32rm GR32:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, X86_COND_NO, EFLAGS), + (CMOVO16rm GR16:$src2, addr:$src1)>; +def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, X86_COND_NO, EFLAGS), + (CMOVO32rm GR32:$src2, addr:$src1)>; + // zextload bool -> zextload byte def : Pat<(zextloadi8i1 addr:$src), (MOV8rm addr:$src)>; def : Pat<(zextloadi16i1 addr:$src), (MOVZX16rm8 addr:$src)>; Added: llvm/trunk/test/CodeGen/X86/commute-cmov.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/commute-cmov.ll?rev=61842&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/commute-cmov.ll (added) +++ llvm/trunk/test/CodeGen/X86/commute-cmov.ll Tue Jan 6 19:00:24 2009 @@ -0,0 +1,10 @@ +; RUN: llvm-as < %s | llc -march=x86 | grep {cmove 16(%esp)} + +define i32 @bar(i32 %x, i32 %n, i32 %w, i32 %v) nounwind readnone { +entry: + %0 = lshr i32 %x, %n ; [#uses=1] + %1 = and i32 %0, 1 ; [#uses=1] + %toBool = icmp eq i32 %1, 0 ; [#uses=1] + %.0 = select i1 %toBool, i32 12, i32 %v ; [#uses=1] + ret i32 %.0 +} From clattner at apple.com Tue Jan 6 19:13:24 2009 From: clattner at apple.com (Chris Lattner) Date: Tue, 6 Jan 2009 17:13:24 -0800 Subject: [llvm-commits] [llvm] r61834 - in /llvm/trunk: include/llvm/DerivedTypes.h include/llvm/Intrinsics.td lib/VMCore/Verifier.cpp utils/TableGen/CodeGenTarget.cpp utils/TableGen/IntrinsicEmitter.cpp In-Reply-To: <200901070009.n07091oG024927@zion.cs.uiuc.edu> References: <200901070009.n07091oG024927@zion.cs.uiuc.edu> Message-ID: <583D02A1-8D62-4456-A85E-7918A73CA69F@apple.com> On Jan 6, 2009, at 4:09 PM, Bob Wilson wrote: > Author: bwilson > Date: Tue Jan 6 18:09:01 2009 > New Revision: 61834 > > URL: http://llvm.org/viewvc/llvm-project?rev=61834&view=rev > Log: > Improve support for type-generic vector intrinsics by teaching > TableGen how > to handle LLVMMatchType intrinsic parameters, and by adding new > subclasses > of LLVMMatchType to match vector types with integral elements that are > either twice as wide or half as wide as the elements of the matched > type. > Thanks Bob! > + /// VectorType::getTruncatedElementVectorType - This static > method is like > + /// getInteger except that the element types are half as wide as > the > + /// elements in the input type. > + /// > + static VectorType *getTruncatedElementVectorType(const VectorType > *VTy) { > + unsigned EltBits = VTy->getElementType()- > >getPrimitiveSizeInBits(); > + const Type *EltTy = IntegerType::get(EltBits / 2); > + return VectorType::get(EltTy, VTy->getNumElements()); > + } Should this assert that EltBits is a multiple of 2? It would be nice for tblgen to reject cases where the size was not a multiple of two also. -Chris From sabre at nondot.org Tue Jan 6 19:48:08 2009 From: sabre at nondot.org (Chris Lattner) Date: Wed, 07 Jan 2009 01:48:08 -0000 Subject: [llvm-commits] [llvm] r61845 - /llvm/trunk/test/CodeGen/X86/testl-commute.ll Message-ID: <200901070148.n071m8Rt027846@zion.cs.uiuc.edu> Author: lattner Date: Tue Jan 6 19:48:08 2009 New Revision: 61845 URL: http://llvm.org/viewvc/llvm-project?rev=61845&view=rev Log: add a testcase. Added: llvm/trunk/test/CodeGen/X86/testl-commute.ll Added: llvm/trunk/test/CodeGen/X86/testl-commute.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/testl-commute.ll?rev=61845&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/testl-commute.ll (added) +++ llvm/trunk/test/CodeGen/X86/testl-commute.ll Tue Jan 6 19:48:08 2009 @@ -0,0 +1,56 @@ +; RUN: llvm-as < %s | llc | grep {testl.*\(%r.i\), %} | count 3 +; rdar://5671654 +; The loads should fold into the testl instructions, no matter how +; the inputs are commuted. + +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128" +target triple = "x86_64-apple-darwin7" + +define i32 @test(i32* %P, i32* %G) nounwind { +entry: + %0 = load i32* %P, align 4 ; [#uses=3] + %1 = load i32* %G, align 4 ; [#uses=1] + %2 = and i32 %1, %0 ; [#uses=1] + %3 = icmp eq i32 %2, 0 ; [#uses=1] + br i1 %3, label %bb1, label %bb + +bb: ; preds = %entry + %4 = tail call i32 @bar() nounwind ; [#uses=0] + ret i32 %0 + +bb1: ; preds = %entry + ret i32 %0 +} + +define i32 @test2(i32* %P, i32* %G) nounwind { +entry: + %0 = load i32* %P, align 4 ; [#uses=3] + %1 = load i32* %G, align 4 ; [#uses=1] + %2 = and i32 %0, %1 ; [#uses=1] + %3 = icmp eq i32 %2, 0 ; [#uses=1] + br i1 %3, label %bb1, label %bb + +bb: ; preds = %entry + %4 = tail call i32 @bar() nounwind ; [#uses=0] + ret i32 %0 + +bb1: ; preds = %entry + ret i32 %0 +} +define i32 @test3(i32* %P, i32* %G) nounwind { +entry: + %0 = load i32* %P, align 4 ; [#uses=3] + %1 = load i32* %G, align 4 ; [#uses=1] + %2 = and i32 %0, %1 ; [#uses=1] + %3 = icmp eq i32 %2, 0 ; [#uses=1] + br i1 %3, label %bb1, label %bb + +bb: ; preds = %entry + %4 = tail call i32 @bar() nounwind ; [#uses=0] + ret i32 %1 + +bb1: ; preds = %entry + ret i32 %1 +} + +declare i32 @bar() From evan.cheng at apple.com Tue Jan 6 20:08:58 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 07 Jan 2009 02:08:58 -0000 Subject: [llvm-commits] [llvm] r61847 - in /llvm/trunk: include/llvm/CodeGen/LiveIntervalAnalysis.h lib/CodeGen/LiveIntervalAnalysis.cpp lib/CodeGen/SimpleRegisterCoalescing.cpp test/CodeGen/X86/phys_subreg_coalesce.ll Message-ID: <200901070208.n0728wb4028591@zion.cs.uiuc.edu> Author: evancheng Date: Tue Jan 6 20:08:57 2009 New Revision: 61847 URL: http://llvm.org/viewvc/llvm-project?rev=61847&view=rev Log: The coalescer does not coalesce a virtual register to a physical register if any of the physical register's sub-register live intervals overlaps with the virtual register. This is overly conservative. It prevents a extract_subreg from being coalesced away: v1024 = EDI // not killed = = EDI One possible solution is for the coalescer to examine the sub-register live intervals in the same manner as the physical register. Another possibility is to examine defs and uses (when needed) of sub-registers. Both solutions are too expensive. For now, look for "short virtual intervals" and scan instructions to look for conflict instead. This is a small win on x86-64. e.g. It shaves 403.gcc by ~80 instructions. Added: llvm/trunk/test/CodeGen/X86/phys_subreg_coalesce.ll Modified: llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp Modified: llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h?rev=61847&r1=61846&r2=61847&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h (original) +++ llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h Tue Jan 6 20:08:57 2009 @@ -24,6 +24,7 @@ #include "llvm/CodeGen/LiveInterval.h" #include "llvm/ADT/BitVector.h" #include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallVector.h" #include "llvm/Support/Allocator.h" #include @@ -256,6 +257,12 @@ bool conflictsWithPhysRegDef(const LiveInterval &li, VirtRegMap &vrm, unsigned reg); + /// conflictsWithPhysRegRef - Similar to conflictsWithPhysRegRef except + /// it can check use as well. + bool conflictsWithPhysRegRef(LiveInterval &li, unsigned Reg, + bool CheckUse, + SmallPtrSet &JoinedCopies); + /// findLiveInMBBs - Given a live range, if the value of the range /// is live in any MBB returns true as well as the list of basic blocks /// in which the value is live. Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=61847&r1=61846&r2=61847&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Tue Jan 6 20:08:57 2009 @@ -323,6 +323,47 @@ return false; } +/// conflictsWithPhysRegRef - Similar to conflictsWithPhysRegRef except +/// it can check use as well. +bool LiveIntervals::conflictsWithPhysRegRef(LiveInterval &li, + unsigned Reg, bool CheckUse, + SmallPtrSet &JoinedCopies) { + for (LiveInterval::Ranges::const_iterator + I = li.ranges.begin(), E = li.ranges.end(); I != E; ++I) { + for (unsigned index = getBaseIndex(I->start), + end = getBaseIndex(I->end-1) + InstrSlots::NUM; index != end; + index += InstrSlots::NUM) { + // Skip deleted instructions. + MachineInstr *MI = 0; + while (index != end) { + MI = getInstructionFromIndex(index); + if (MI) + break; + index += InstrSlots::NUM; + } + if (index == end) break; + + if (JoinedCopies.count(MI)) + continue; + for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { + MachineOperand& MO = MI->getOperand(i); + if (!MO.isReg()) + continue; + if (MO.isUse() && !CheckUse) + continue; + unsigned PhysReg = MO.getReg(); + if (PhysReg == 0 || TargetRegisterInfo::isVirtualRegister(PhysReg)) + continue; + if (tri_->isSubRegister(Reg, PhysReg)) + return true; + } + } + } + + return false; +} + + void LiveIntervals::printRegName(unsigned reg) const { if (TargetRegisterInfo::isPhysicalRegister(reg)) cerr << tri_->getName(reg); @@ -794,10 +835,15 @@ if (!VNI->copy) return 0; - if (VNI->copy->getOpcode() == TargetInstrInfo::EXTRACT_SUBREG) - return VNI->copy->getOperand(1).getReg(); - if (VNI->copy->getOpcode() == TargetInstrInfo::INSERT_SUBREG) + if (VNI->copy->getOpcode() == TargetInstrInfo::EXTRACT_SUBREG) { + // If it's extracting out of a physical register, return the sub-register. + unsigned Reg = VNI->copy->getOperand(1).getReg(); + if (TargetRegisterInfo::isPhysicalRegister(Reg)) + Reg = tri_->getSubReg(Reg, VNI->copy->getOperand(2).getImm()); + return Reg; + } else if (VNI->copy->getOpcode() == TargetInstrInfo::INSERT_SUBREG) return VNI->copy->getOperand(2).getReg(); + unsigned SrcReg, DstReg; if (tii_->isMoveInstr(*VNI->copy, SrcReg, DstReg)) return SrcReg; Modified: llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp?rev=61847&r1=61846&r2=61847&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp (original) +++ llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp Tue Jan 6 20:08:57 2009 @@ -1276,8 +1276,8 @@ // preference. unsigned Length = li_->getApproximateInstructionCount(JoinVInt); if (Length > Threshold && - (((float)std::distance(mri_->use_begin(JoinVReg), - mri_->use_end()) / Length) < (1.0 / Threshold))) { + (((float)std::distance(mri_->use_begin(JoinVReg), mri_->use_end()) + / Length) < (1.0 / Threshold))) { JoinVInt.preference = JoinPReg; ++numAborts; DOUT << "\tMay tie down a physical register, abort!\n"; @@ -1334,7 +1334,7 @@ assert(TargetRegisterInfo::isVirtualRegister(SrcReg) && "LiveInterval::join didn't work right!"); - // If we're about to merge live ranges into a physical register live range, + // If we're about to merge live ranges into a physical register live interval, // we have to update any aliased register's live ranges to indicate that they // have clobbered values for this range. if (TargetRegisterInfo::isPhysicalRegister(DstReg)) { @@ -1712,8 +1712,9 @@ /// physreg, this method always canonicalizes LHS to be it. The output /// "RHS" will not have been modified, so we can use this information /// below to update aliases. -bool SimpleRegisterCoalescing::JoinIntervals(LiveInterval &LHS, - LiveInterval &RHS, bool &Swapped) { +bool +SimpleRegisterCoalescing::JoinIntervals(LiveInterval &LHS, LiveInterval &RHS, + bool &Swapped) { // Compute the final value assignment, assuming that the live ranges can be // coalesced. SmallVector LHSValNoAssignments; @@ -1721,26 +1722,43 @@ DenseMap LHSValsDefinedFromRHS; DenseMap RHSValsDefinedFromLHS; SmallVector NewVNInfo; - + // If a live interval is a physical register, conservatively check if any // of its sub-registers is overlapping the live interval of the virtual // register. If so, do not coalesce. if (TargetRegisterInfo::isPhysicalRegister(LHS.reg) && *tri_->getSubRegisters(LHS.reg)) { - for (const unsigned* SR = tri_->getSubRegisters(LHS.reg); *SR; ++SR) - if (li_->hasInterval(*SR) && RHS.overlaps(li_->getInterval(*SR))) { - DOUT << "Interfere with sub-register "; - DEBUG(li_->getInterval(*SR).print(DOUT, tri_)); + // If it's coalescing a virtual register to a physical register, estimate + // its live interval length. This is the *cost* of scanning an entire live + // interval. If the cost is low, we'll do an exhaustive check instead. + if (RHS.containsOneValue() && + li_->getApproximateInstructionCount(RHS) <= 10) { + // Perform a more exhaustive check for some common cases. + if (li_->conflictsWithPhysRegRef(RHS, LHS.reg, true, JoinedCopies)) return false; - } + } else { + for (const unsigned* SR = tri_->getSubRegisters(LHS.reg); *SR; ++SR) + if (li_->hasInterval(*SR) && RHS.overlaps(li_->getInterval(*SR))) { + DOUT << "Interfere with sub-register "; + DEBUG(li_->getInterval(*SR).print(DOUT, tri_)); + return false; + } + } } else if (TargetRegisterInfo::isPhysicalRegister(RHS.reg) && *tri_->getSubRegisters(RHS.reg)) { - for (const unsigned* SR = tri_->getSubRegisters(RHS.reg); *SR; ++SR) - if (li_->hasInterval(*SR) && LHS.overlaps(li_->getInterval(*SR))) { - DOUT << "Interfere with sub-register "; - DEBUG(li_->getInterval(*SR).print(DOUT, tri_)); + if (LHS.containsOneValue() && + li_->getApproximateInstructionCount(LHS) <= 10) { + // Perform a more exhaustive check for some common cases. + if (li_->conflictsWithPhysRegRef(LHS, RHS.reg, false, JoinedCopies)) return false; - } + } else { + for (const unsigned* SR = tri_->getSubRegisters(RHS.reg); *SR; ++SR) + if (li_->hasInterval(*SR) && LHS.overlaps(li_->getInterval(*SR))) { + DOUT << "Interfere with sub-register "; + DEBUG(li_->getInterval(*SR).print(DOUT, tri_)); + return false; + } + } } // Compute ultimate value numbers for the LHS and RHS values. @@ -1755,7 +1773,7 @@ VNInfo *RHSValNoInfo = NULL; VNInfo *RHSValNoInfo0 = RHS.getValNumInfo(0); unsigned RHSSrcReg = li_->getVNInfoSourceReg(RHSValNoInfo0); - if ((RHSSrcReg == 0 || RHSSrcReg != LHS.reg)) { + if (RHSSrcReg == 0 || RHSSrcReg != LHS.reg) { // If RHS is not defined as a copy from the LHS, we can use simpler and // faster checks to see if the live ranges are coalescable. This joiner // can't swap the LHS/RHS intervals though. Added: llvm/trunk/test/CodeGen/X86/phys_subreg_coalesce.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/phys_subreg_coalesce.ll?rev=61847&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/phys_subreg_coalesce.ll (added) +++ llvm/trunk/test/CodeGen/X86/phys_subreg_coalesce.ll Tue Jan 6 20:08:57 2009 @@ -0,0 +1,24 @@ +; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin9 -mattr=+sse2 | not grep movl + + %struct.dpoint = type { double, double } + +define %struct.dpoint @midpoint(i64 %p1.0, i64 %p2.0) nounwind readnone { +entry: + %0 = trunc i64 %p1.0 to i32 ; [#uses=1] + %1 = sitofp i32 %0 to double ; [#uses=1] + %2 = trunc i64 %p2.0 to i32 ; [#uses=1] + %3 = sitofp i32 %2 to double ; [#uses=1] + %4 = add double %1, %3 ; [#uses=1] + %5 = mul double %4, 5.000000e-01 ; [#uses=1] + %6 = lshr i64 %p1.0, 32 ; [#uses=1] + %7 = trunc i64 %6 to i32 ; [#uses=1] + %8 = sitofp i32 %7 to double ; [#uses=1] + %9 = lshr i64 %p2.0, 32 ; [#uses=1] + %10 = trunc i64 %9 to i32 ; [#uses=1] + %11 = sitofp i32 %10 to double ; [#uses=1] + %12 = add double %8, %11 ; [#uses=1] + %13 = mul double %12, 5.000000e-01 ; [#uses=1] + %mrv3 = insertvalue %struct.dpoint undef, double %5, 0 ; <%struct.dpoint> [#uses=1] + %mrv4 = insertvalue %struct.dpoint %mrv3, double %13, 1 ; <%struct.dpoint> [#uses=1] + ret %struct.dpoint %mrv4 +} From sabre at nondot.org Wed Jan 7 00:25:09 2009 From: sabre at nondot.org (Chris Lattner) Date: Wed, 07 Jan 2009 06:25:09 -0000 Subject: [llvm-commits] [llvm] r61849 - /llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Message-ID: <200901070625.n076P93G003382@zion.cs.uiuc.edu> Author: lattner Date: Wed Jan 7 00:25:07 2009 New Revision: 61849 URL: http://llvm.org/viewvc/llvm-project?rev=61849&view=rev Log: Use the hasAllZeroIndices predicate to simplify some code, no functionality change. 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=61849&r1=61848&r2=61849&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Wed Jan 7 00:25:07 2009 @@ -377,23 +377,8 @@ } // If this GEP is to the start of the aggregate, check for memcpys. - if (Idx == 0) { - bool IsStartOfAggregateGEP = true; - for (unsigned i = 3, e = GEPI->getNumOperands(); i != e; ++i) { - if (!isa(GEPI->getOperand(i))) { - IsStartOfAggregateGEP = false; - break; - } - if (!cast(GEPI->getOperand(i))->isZero()) { - IsStartOfAggregateGEP = false; - break; - } - } - - if (IsStartOfAggregateGEP) - RewriteBitCastUserOfAlloca(GEPI, AI, ElementAllocas); - } - + if (Idx == 0 && GEPI->hasAllZeroIndices()) + RewriteBitCastUserOfAlloca(GEPI, AI, ElementAllocas); // Move all of the users over to the new GEP. GEPI->replaceAllUsesWith(RepValue); @@ -431,15 +416,8 @@ // Using pointer arithmetic to navigate the array. return MarkUnsafe(Info); - if (AreAllZeroIndices) { - for (unsigned i = 2, e = GEP->getNumOperands(); i != e; ++i) { - if (!isa(GEP->getOperand(i)) || - !cast(GEP->getOperand(i))->isZero()) { - AreAllZeroIndices = false; - break; - } - } - } + if (AreAllZeroIndices) + AreAllZeroIndices = GEP->hasAllZeroIndices(); } isSafeElementUse(GEP, AreAllZeroIndices, AI, Info); if (Info.isUnsafe) return; @@ -662,7 +640,7 @@ // It is likely that OtherPtr is a bitcast, if so, remove it. if (BitCastInst *BC = dyn_cast(OtherPtr)) OtherPtr = BC->getOperand(0); - // All zero GEPs are effectively casts + // All zero GEPs are effectively bitcasts. if (GetElementPtrInst *GEP = dyn_cast(OtherPtr)) if (GEP->hasAllZeroIndices()) OtherPtr = GEP->getOperand(0); @@ -1062,7 +1040,7 @@ isa(GEP->getOperand(2)) && cast(GEP->getOperand(1))->isZero()) { // We are stepping into an element, e.g. a structure or an array: - // GEP Ptr, int 0, uint C + // GEP Ptr, i32 0, i32 Cst const Type *AggTy = PTy->getElementType(); unsigned Idx = cast(GEP->getOperand(2))->getZExtValue(); From sabre at nondot.org Wed Jan 7 00:34:28 2009 From: sabre at nondot.org (Chris Lattner) Date: Wed, 07 Jan 2009 06:34:28 -0000 Subject: [llvm-commits] [llvm] r61850 - /llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Message-ID: <200901070634.n076YTVQ003653@zion.cs.uiuc.edu> Author: lattner Date: Wed Jan 7 00:34:28 2009 New Revision: 61850 URL: http://llvm.org/viewvc/llvm-project?rev=61850&view=rev Log: Get TargetData once up front and cache as an ivar instead of requerying it all over the place. 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=61850&r1=61849&r2=61850&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Wed Jan 7 00:34:28 2009 @@ -70,6 +70,8 @@ } private: + TargetData *TD; + /// AllocaInfo - When analyzing uses of an alloca instruction, this captures /// information about the uses. All these fields are initialized to false /// and set to true when something is learned. @@ -136,6 +138,8 @@ bool SROA::runOnFunction(Function &F) { + TD = &getAnalysis(); + bool Changed = performPromotion(F); while (1) { bool LocalChange = performScalarRepl(F); @@ -199,8 +203,6 @@ if (AllocationInst *A = dyn_cast(I)) WorkList.push_back(A); - const TargetData &TD = getAnalysis(); - // Process the worklist bool Changed = false; while (!WorkList.empty()) { @@ -233,7 +235,7 @@ isa(AI->getAllocatedType())) && AI->getAllocatedType()->isSized() && // Do not promote any struct whose size is larger than "128" bytes. - TD.getABITypeSize(AI->getAllocatedType()) < SRThreshold && + TD->getABITypeSize(AI->getAllocatedType()) < SRThreshold && // Do not promote any struct into more than "32" separate vars. getNumSAElements(AI->getAllocatedType()) < SRThreshold/4) { // Check that all of the users of the allocation are capable of being @@ -551,9 +553,8 @@ if (!Length) return MarkUnsafe(Info); // If not the whole aggregate, give up. - const TargetData &TD = getAnalysis(); if (Length->getZExtValue() != - TD.getABITypeSize(AI->getType()->getElementType())) + TD->getABITypeSize(AI->getType()->getElementType())) return MarkUnsafe(Info); // We only know about memcpy/memset/memmove. @@ -593,7 +594,6 @@ void SROA::RewriteBitCastUserOfAlloca(Instruction *BCInst, AllocationInst *AI, SmallVector &NewElts) { Constant *Zero = Constant::getNullValue(Type::Int32Ty); - const TargetData &TD = getAnalysis(); Value::use_iterator UI = BCInst->use_begin(), UE = BCInst->use_end(); while (UI != UE) { @@ -697,7 +697,7 @@ ValTy = VTy->getElementType(); // Construct an integer with the right value. - unsigned EltSize = TD.getTypeSizeInBits(ValTy); + unsigned EltSize = TD->getTypeSizeInBits(ValTy); APInt OneVal(EltSize, CI->getZExtValue()); APInt TotalVal(OneVal); // Set each byte. @@ -738,7 +738,7 @@ OtherElt = new BitCastInst(OtherElt, BytePtrTy,OtherElt->getNameStr(), MI); - unsigned EltSize = TD.getABITypeSize(EltTy); + unsigned EltSize = TD->getABITypeSize(EltTy); // Finally, insert the meminst for this element. if (isa(MI) || isa(MI)) { @@ -832,7 +832,7 @@ // types, but may actually be used. In these cases, we refuse to promote the // struct. if (Info.isMemCpySrc && Info.isMemCpyDst && - HasPadding(AI->getType()->getElementType(), getAnalysis())) + HasPadding(AI->getType()->getElementType(), *TD)) return 0; // If we require cleanup, return 1, otherwise return 3. @@ -967,10 +967,9 @@ return false; } -/// getUIntAtLeastAsBigAs - Return an unsigned integer type that is at least -/// as big as the specified type. If there is no suitable type, this returns -/// null. -const Type *getUIntAtLeastAsBigAs(unsigned NumBits) { +/// getIntAtLeastAsBigAs - Return an integer type that is at least as big as the +/// specified type. If there is no suitable type, this returns null. +const Type *getIntAtLeastAsBigAs(unsigned NumBits) { if (NumBits > 64) return 0; if (NumBits > 32) return Type::Int64Ty; if (NumBits > 16) return Type::Int32Ty; @@ -986,7 +985,6 @@ /// const Type *SROA::CanConvertToScalar(Value *V, bool &IsNotTrivial) { const Type *UsedType = Type::VoidTy; // No uses, no forced type. - const TargetData &TD = getAnalysis(); const PointerType *PTy = cast(V->getType()); for (Value::use_iterator UI = V->use_begin(), E = V->use_end(); UI!=E; ++UI) { @@ -998,7 +996,7 @@ if (!LI->getType()->isSingleValueType()) return 0; - if (MergeInType(LI->getType(), UsedType, TD)) + if (MergeInType(LI->getType(), UsedType, *TD)) return 0; } else if (StoreInst *SI = dyn_cast(User)) { @@ -1012,17 +1010,17 @@ // NOTE: We could handle storing of FP imms into integers here! - if (MergeInType(SI->getOperand(0)->getType(), UsedType, TD)) + if (MergeInType(SI->getOperand(0)->getType(), UsedType, *TD)) return 0; } else if (BitCastInst *CI = dyn_cast(User)) { IsNotTrivial = true; const Type *SubTy = CanConvertToScalar(CI, IsNotTrivial); - if (!SubTy || MergeInType(SubTy, UsedType, TD)) return 0; + if (!SubTy || MergeInType(SubTy, UsedType, *TD)) return 0; } else if (GetElementPtrInst *GEP = dyn_cast(User)) { // Check to see if this is stepping over an element: GEP Ptr, int C if (GEP->getNumOperands() == 2 && isa(GEP->getOperand(1))) { unsigned Idx = cast(GEP->getOperand(1))->getZExtValue(); - unsigned ElSize = TD.getABITypeSize(PTy->getElementType()); + unsigned ElSize = TD->getABITypeSize(PTy->getElementType()); unsigned BitOffset = Idx*ElSize*8; if (BitOffset > 64 || !isPowerOf2_32(ElSize)) return 0; @@ -1031,8 +1029,8 @@ if (SubElt == 0) return 0; if (SubElt != Type::VoidTy && SubElt->isInteger()) { const Type *NewTy = - getUIntAtLeastAsBigAs(TD.getABITypeSizeInBits(SubElt)+BitOffset); - if (NewTy == 0 || MergeInType(NewTy, UsedType, TD)) return 0; + getIntAtLeastAsBigAs(TD->getABITypeSizeInBits(SubElt)+BitOffset); + if (NewTy == 0 || MergeInType(NewTy, UsedType, *TD)) return 0; continue; } } else if (GEP->getNumOperands() == 3 && @@ -1051,12 +1049,12 @@ if (Idx >= VectorTy->getNumElements()) return 0; // Out of range. // Merge in the vector type. - if (MergeInType(VectorTy, UsedType, TD)) return 0; + if (MergeInType(VectorTy, UsedType, *TD)) return 0; const Type *SubTy = CanConvertToScalar(GEP, IsNotTrivial); if (SubTy == 0) return 0; - if (SubTy != Type::VoidTy && MergeInType(SubTy, UsedType, TD)) + if (SubTy != Type::VoidTy && MergeInType(SubTy, UsedType, *TD)) return 0; // We'll need to change this to an insert/extract element operation. @@ -1068,11 +1066,11 @@ } else { return 0; } - const Type *NTy = getUIntAtLeastAsBigAs(TD.getABITypeSizeInBits(AggTy)); - if (NTy == 0 || MergeInType(NTy, UsedType, TD)) return 0; + const Type *NTy = getIntAtLeastAsBigAs(TD->getABITypeSizeInBits(AggTy)); + if (NTy == 0 || MergeInType(NTy, UsedType, *TD)) return 0; const Type *SubTy = CanConvertToScalar(GEP, IsNotTrivial); if (SubTy == 0) return 0; - if (SubTy != Type::VoidTy && MergeInType(SubTy, UsedType, TD)) + if (SubTy != Type::VoidTy && MergeInType(SubTy, UsedType, *TD)) return 0; continue; // Everything looks ok } @@ -1135,9 +1133,8 @@ } else if (GetElementPtrInst *GEP = dyn_cast(User)) { const PointerType *AggPtrTy = cast(GEP->getOperand(0)->getType()); - const TargetData &TD = getAnalysis(); unsigned AggSizeInBits = - TD.getABITypeSizeInBits(AggPtrTy->getElementType()); + TD->getABITypeSizeInBits(AggPtrTy->getElementType()); // Check to see if this is stepping over an element: GEP Ptr, int C unsigned NewOffset = Offset; @@ -1152,12 +1149,12 @@ const Type *AggTy = AggPtrTy->getElementType(); if (const SequentialType *SeqTy = dyn_cast(AggTy)) { unsigned ElSizeBits = - TD.getABITypeSizeInBits(SeqTy->getElementType()); + TD->getABITypeSizeInBits(SeqTy->getElementType()); NewOffset += ElSizeBits*Idx; } else if (const StructType *STy = dyn_cast(AggTy)) { unsigned EltBitOffset = - TD.getStructLayout(STy)->getElementOffsetInBits(Idx); + TD->getStructLayout(STy)->getElementOffsetInBits(Idx); NewOffset += EltBitOffset; } else { @@ -1209,10 +1206,9 @@ return new BitCastInst(NV, LI->getType(), LI->getName(), LI); // Otherwise it must be an element access. - const TargetData &TD = getAnalysis(); unsigned Elt = 0; if (Offset) { - unsigned EltSize = TD.getABITypeSizeInBits(VTy->getElementType()); + unsigned EltSize = TD->getABITypeSizeInBits(VTy->getElementType()); Elt = Offset/EltSize; Offset -= EltSize*Elt; } @@ -1229,13 +1225,12 @@ // If this is a big-endian system and the load is narrower than the // full alloca type, we need to do a shift to get the right bits. int ShAmt = 0; - const TargetData &TD = getAnalysis(); - if (TD.isBigEndian()) { + if (TD->isBigEndian()) { // On big-endian machines, the lowest bit is stored at the bit offset // from the pointer given by getTypeStoreSizeInBits. This matters for // integers with a bitwidth that is not a multiple of 8. - ShAmt = TD.getTypeStoreSizeInBits(NTy) - - TD.getTypeStoreSizeInBits(LI->getType()) - Offset; + ShAmt = TD->getTypeStoreSizeInBits(NTy) - + TD->getTypeStoreSizeInBits(LI->getType()) - Offset; } else { ShAmt = Offset; } @@ -1253,7 +1248,7 @@ LI->getName(), LI); // Finally, unconditionally truncate the integer to the right width. - unsigned LIBitWidth = TD.getTypeSizeInBits(LI->getType()); + unsigned LIBitWidth = TD->getTypeSizeInBits(LI->getType()); if (LIBitWidth < NTy->getBitWidth()) NV = new TruncInst(NV, IntegerType::get(LIBitWidth), LI->getName(), LI); @@ -1299,8 +1294,7 @@ SV = new BitCastInst(SV, AllocaType, SV->getName(), SI); } else { // Must be an element insertion. - const TargetData &TD = getAnalysis(); - unsigned Elt = Offset/TD.getABITypeSizeInBits(PTy->getElementType()); + unsigned Elt = Offset/TD->getABITypeSizeInBits(PTy->getElementType()); SV = InsertElementInst::Create(Old, SV, ConstantInt::get(Type::Int32Ty, Elt), "tmp", SI); @@ -1316,16 +1310,15 @@ // If SV is a float, convert it to the appropriate integer type. // If it is a pointer, do the same, and also handle ptr->ptr casts // here. - const TargetData &TD = getAnalysis(); - unsigned SrcWidth = TD.getTypeSizeInBits(SV->getType()); - unsigned DestWidth = TD.getTypeSizeInBits(AllocaType); - unsigned SrcStoreWidth = TD.getTypeStoreSizeInBits(SV->getType()); - unsigned DestStoreWidth = TD.getTypeStoreSizeInBits(AllocaType); + unsigned SrcWidth = TD->getTypeSizeInBits(SV->getType()); + unsigned DestWidth = TD->getTypeSizeInBits(AllocaType); + unsigned SrcStoreWidth = TD->getTypeStoreSizeInBits(SV->getType()); + unsigned DestStoreWidth = TD->getTypeStoreSizeInBits(AllocaType); if (SV->getType()->isFloatingPoint()) SV = new BitCastInst(SV, IntegerType::get(SrcWidth), SV->getName(), SI); else if (isa(SV->getType())) - SV = new PtrToIntInst(SV, TD.getIntPtrType(), SV->getName(), SI); + SV = new PtrToIntInst(SV, TD->getIntPtrType(), SV->getName(), SI); // Always zero extend the value if needed. if (SV->getType() != AllocaType) @@ -1334,7 +1327,7 @@ // If this is a big-endian system and the store is narrower than the // full alloca type, we need to do a shift to get the right bits. int ShAmt = 0; - if (TD.isBigEndian()) { + if (TD->isBigEndian()) { // On big-endian machines, the lowest bit is stored at the bit offset // from the pointer given by getTypeStoreSizeInBits. This matters for // integers with a bitwidth that is not a multiple of 8. From sabre at nondot.org Wed Jan 7 00:39:59 2009 From: sabre at nondot.org (Chris Lattner) Date: Wed, 07 Jan 2009 06:39:59 -0000 Subject: [llvm-commits] [llvm] r61851 - /llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Message-ID: <200901070639.n076dxXZ003807@zion.cs.uiuc.edu> Author: lattner Date: Wed Jan 7 00:39:58 2009 New Revision: 61851 URL: http://llvm.org/viewvc/llvm-project?rev=61851&view=rev Log: use continue to simplify code and reduce nesting, no functionality change. 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=61851&r1=61850&r2=61851&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Wed Jan 7 00:39:58 2009 @@ -998,8 +998,10 @@ if (MergeInType(LI->getType(), UsedType, *TD)) return 0; - - } else if (StoreInst *SI = dyn_cast(User)) { + continue; + } + + if (StoreInst *SI = dyn_cast(User)) { // Storing the pointer, not into the value? if (SI->getOperand(0) == V) return 0; @@ -1012,11 +1014,16 @@ if (MergeInType(SI->getOperand(0)->getType(), UsedType, *TD)) return 0; - } else if (BitCastInst *CI = dyn_cast(User)) { + continue; + } + if (BitCastInst *CI = dyn_cast(User)) { IsNotTrivial = true; const Type *SubTy = CanConvertToScalar(CI, IsNotTrivial); if (!SubTy || MergeInType(SubTy, UsedType, *TD)) return 0; - } else if (GetElementPtrInst *GEP = dyn_cast(User)) { + continue; + } + + if (GetElementPtrInst *GEP = dyn_cast(User)) { // Check to see if this is stepping over an element: GEP Ptr, int C if (GEP->getNumOperands() == 2 && isa(GEP->getOperand(1))) { unsigned Idx = cast(GEP->getOperand(1))->getZExtValue(); @@ -1033,10 +1040,14 @@ if (NewTy == 0 || MergeInType(NewTy, UsedType, *TD)) return 0; continue; } - } else if (GEP->getNumOperands() == 3 && - isa(GEP->getOperand(1)) && - isa(GEP->getOperand(2)) && - cast(GEP->getOperand(1))->isZero()) { + // Cannot handle this! + return 0; + } + + if (GEP->getNumOperands() == 3 && + isa(GEP->getOperand(1)) && + isa(GEP->getOperand(2)) && + cast(GEP->getOperand(1))->isZero()) { // We are stepping into an element, e.g. a structure or an array: // GEP Ptr, i32 0, i32 Cst const Type *AggTy = PTy->getElementType(); @@ -1075,10 +1086,10 @@ continue; // Everything looks ok } return 0; - } else { - // Cannot handle this! - return 0; } + + // Cannot handle this! + return 0; } return UsedType; @@ -1120,17 +1131,25 @@ Value *NV = ConvertUsesOfLoadToScalar(LI, NewAI, Offset); LI->replaceAllUsesWith(NV); LI->eraseFromParent(); - } else if (StoreInst *SI = dyn_cast(User)) { + continue; + } + + if (StoreInst *SI = dyn_cast(User)) { assert(SI->getOperand(0) != Ptr && "Consistency error!"); Value *SV = ConvertUsesOfStoreToScalar(SI, NewAI, Offset); new StoreInst(SV, NewAI, SI); SI->eraseFromParent(); - - } else if (BitCastInst *CI = dyn_cast(User)) { + continue; + } + + if (BitCastInst *CI = dyn_cast(User)) { ConvertUsesToScalar(CI, NewAI, Offset); CI->eraseFromParent(); - } else if (GetElementPtrInst *GEP = dyn_cast(User)) { + continue; + } + + if (GetElementPtrInst *GEP = dyn_cast(User)) { const PointerType *AggPtrTy = cast(GEP->getOperand(0)->getType()); unsigned AggSizeInBits = @@ -1143,34 +1162,35 @@ unsigned BitOffset = Idx*AggSizeInBits; NewOffset += BitOffset; - } else if (GEP->getNumOperands() == 3) { - // We know that operand #2 is zero. - unsigned Idx = cast(GEP->getOperand(2))->getZExtValue(); - const Type *AggTy = AggPtrTy->getElementType(); - if (const SequentialType *SeqTy = dyn_cast(AggTy)) { - unsigned ElSizeBits = - TD->getABITypeSizeInBits(SeqTy->getElementType()); - - NewOffset += ElSizeBits*Idx; - } else if (const StructType *STy = dyn_cast(AggTy)) { - unsigned EltBitOffset = - TD->getStructLayout(STy)->getElementOffsetInBits(Idx); - - NewOffset += EltBitOffset; - } else { - assert(0 && "Unsupported operation!"); - abort(); - } + ConvertUsesToScalar(GEP, NewAI, NewOffset); + GEP->eraseFromParent(); + continue; + } + + assert(GEP->getNumOperands() == 3 && "Unsupported operation"); + + // We know that operand #2 is zero. + unsigned Idx = cast(GEP->getOperand(2))->getZExtValue(); + const Type *AggTy = AggPtrTy->getElementType(); + if (const SequentialType *SeqTy = dyn_cast(AggTy)) { + unsigned ElSizeBits = + TD->getABITypeSizeInBits(SeqTy->getElementType()); + + NewOffset += ElSizeBits*Idx; } else { - assert(0 && "Unsupported operation!"); - abort(); + const StructType *STy = cast(AggTy); + unsigned EltBitOffset = + TD->getStructLayout(STy)->getElementOffsetInBits(Idx); + + NewOffset += EltBitOffset; } ConvertUsesToScalar(GEP, NewAI, NewOffset); GEP->eraseFromParent(); - } else { - assert(0 && "Unsupported operation!"); - abort(); + continue; } + + assert(0 && "Unsupported operation!"); + abort(); } } From sabre at nondot.org Wed Jan 7 01:18:45 2009 From: sabre at nondot.org (Chris Lattner) Date: Wed, 07 Jan 2009 07:18:45 -0000 Subject: [llvm-commits] [llvm] r61852 - /llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Message-ID: <200901070718.n077Ijo2005135@zion.cs.uiuc.edu> Author: lattner Date: Wed Jan 7 01:18:45 2009 New Revision: 61852 URL: http://llvm.org/viewvc/llvm-project?rev=61852&view=rev Log: Factor a bunch of code out into a helper method. 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=61852&r1=61851&r2=61852&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Wed Jan 7 01:18:45 2009 @@ -117,6 +117,11 @@ void RewriteBitCastUserOfAlloca(Instruction *BCInst, AllocationInst *AI, SmallVector &NewElts); + void RewriteMemIntrinUserOfAlloca(MemIntrinsic *MI, Instruction *BCInst, + AllocationInst *AI, + SmallVector &NewElts); + + const Type *CanConvertToScalar(Value *V, bool &IsNotTrivial); void ConvertToScalar(AllocationInst *AI, const Type *Ty); void ConvertUsesToScalar(Value *Ptr, AllocaInst *NewAI, unsigned Offset); @@ -593,179 +598,182 @@ /// instead. void SROA::RewriteBitCastUserOfAlloca(Instruction *BCInst, AllocationInst *AI, SmallVector &NewElts) { - Constant *Zero = Constant::getNullValue(Type::Int32Ty); - Value::use_iterator UI = BCInst->use_begin(), UE = BCInst->use_end(); while (UI != UE) { - if (BitCastInst *BCU = dyn_cast(*UI)) { + Instruction *User = cast(*UI++); + if (BitCastInst *BCU = dyn_cast(User)) { RewriteBitCastUserOfAlloca(BCU, AI, NewElts); - ++UI; BCU->eraseFromParent(); continue; } - // Otherwise, must be memcpy/memmove/memset of the entire aggregate. Split - // into one per element. - MemIntrinsic *MI = dyn_cast(*UI); - - // If it's not a mem intrinsic, it must be some other user of a gep of the - // first pointer. Just leave these alone. - if (!MI) { - ++UI; + if (MemIntrinsic *MI = dyn_cast(User)) { + // This must be memcpy/memmove/memset of the entire aggregate. + // Split into one per element. + RewriteMemIntrinUserOfAlloca(MI, BCInst, AI, NewElts); + MI->eraseFromParent(); continue; } - - // If this is a memcpy/memmove, construct the other pointer as the - // appropriate type. - Value *OtherPtr = 0; - if (MemCpyInst *MCI = dyn_cast(MI)) { - if (BCInst == MCI->getRawDest()) - OtherPtr = MCI->getRawSource(); - else { - assert(BCInst == MCI->getRawSource()); - OtherPtr = MCI->getRawDest(); - } - } else if (MemMoveInst *MMI = dyn_cast(MI)) { - if (BCInst == MMI->getRawDest()) - OtherPtr = MMI->getRawSource(); - else { - assert(BCInst == MMI->getRawSource()); - OtherPtr = MMI->getRawDest(); - } + + // If it's not a mem intrinsic, it must be some other user of a gep of the + // first pointer. Just leave these alone. + continue; + } +} + +/// RewriteMemIntrinUserOfAlloca - MI is a memcpy/memset/memmove from or to AI. +/// Rewrite it to copy or set the elements of the scalarized memory. +void SROA::RewriteMemIntrinUserOfAlloca(MemIntrinsic *MI, Instruction *BCInst, + AllocationInst *AI, + SmallVector &NewElts) { + + // If this is a memcpy/memmove, construct the other pointer as the + // appropriate type. + Value *OtherPtr = 0; + if (MemCpyInst *MCI = dyn_cast(MI)) { + if (BCInst == MCI->getRawDest()) + OtherPtr = MCI->getRawSource(); + else { + assert(BCInst == MCI->getRawSource()); + OtherPtr = MCI->getRawDest(); + } + } else if (MemMoveInst *MMI = dyn_cast(MI)) { + if (BCInst == MMI->getRawDest()) + OtherPtr = MMI->getRawSource(); + else { + assert(BCInst == MMI->getRawSource()); + OtherPtr = MMI->getRawDest(); } - - // If there is an other pointer, we want to convert it to the same pointer - // type as AI has, so we can GEP through it. + } + + // If there is an other pointer, we want to convert it to the same pointer + // type as AI has, so we can GEP through it safely. + if (OtherPtr) { + // It is likely that OtherPtr is a bitcast, if so, remove it. + if (BitCastInst *BC = dyn_cast(OtherPtr)) + OtherPtr = BC->getOperand(0); + // All zero GEPs are effectively bitcasts. + if (GetElementPtrInst *GEP = dyn_cast(OtherPtr)) + if (GEP->hasAllZeroIndices()) + OtherPtr = GEP->getOperand(0); + + if (ConstantExpr *BCE = dyn_cast(OtherPtr)) + if (BCE->getOpcode() == Instruction::BitCast) + OtherPtr = BCE->getOperand(0); + + // If the pointer is not the right type, insert a bitcast to the right + // type. + if (OtherPtr->getType() != AI->getType()) + OtherPtr = new BitCastInst(OtherPtr, AI->getType(), OtherPtr->getName(), + MI); + } + + // Process each element of the aggregate. + Value *TheFn = MI->getOperand(0); + const Type *BytePtrTy = MI->getRawDest()->getType(); + bool SROADest = MI->getRawDest() == BCInst; + + Constant *Zero = Constant::getNullValue(Type::Int32Ty); + + for (unsigned i = 0, e = NewElts.size(); i != e; ++i) { + // If this is a memcpy/memmove, emit a GEP of the other element address. + Value *OtherElt = 0; if (OtherPtr) { - // It is likely that OtherPtr is a bitcast, if so, remove it. - if (BitCastInst *BC = dyn_cast(OtherPtr)) - OtherPtr = BC->getOperand(0); - // All zero GEPs are effectively bitcasts. - if (GetElementPtrInst *GEP = dyn_cast(OtherPtr)) - if (GEP->hasAllZeroIndices()) - OtherPtr = GEP->getOperand(0); - - if (ConstantExpr *BCE = dyn_cast(OtherPtr)) - if (BCE->getOpcode() == Instruction::BitCast) - OtherPtr = BCE->getOperand(0); - - // If the pointer is not the right type, insert a bitcast to the right - // type. - if (OtherPtr->getType() != AI->getType()) - OtherPtr = new BitCastInst(OtherPtr, AI->getType(), OtherPtr->getName(), - MI); - } - - // Process each element of the aggregate. - Value *TheFn = MI->getOperand(0); - const Type *BytePtrTy = MI->getRawDest()->getType(); - bool SROADest = MI->getRawDest() == BCInst; - - for (unsigned i = 0, e = NewElts.size(); i != e; ++i) { - // If this is a memcpy/memmove, emit a GEP of the other element address. - Value *OtherElt = 0; - if (OtherPtr) { - Value *Idx[2] = { Zero, ConstantInt::get(Type::Int32Ty, i) }; - OtherElt = GetElementPtrInst::Create(OtherPtr, Idx, Idx + 2, + Value *Idx[2] = { Zero, ConstantInt::get(Type::Int32Ty, i) }; + OtherElt = GetElementPtrInst::Create(OtherPtr, Idx, Idx + 2, OtherPtr->getNameStr()+"."+utostr(i), - MI); + MI); + } + + Value *EltPtr = NewElts[i]; + const Type *EltTy =cast(EltPtr->getType())->getElementType(); + + // If we got down to a scalar, insert a load or store as appropriate. + if (EltTy->isSingleValueType()) { + if (isa(MI) || isa(MI)) { + Value *Elt = new LoadInst(SROADest ? OtherElt : EltPtr, "tmp", + MI); + new StoreInst(Elt, SROADest ? EltPtr : OtherElt, MI); + continue; } - - Value *EltPtr = NewElts[i]; - const Type *EltTy =cast(EltPtr->getType())->getElementType(); + assert(isa(MI)); - // If we got down to a scalar, insert a load or store as appropriate. - if (EltTy->isSingleValueType()) { - if (isa(MI) || isa(MI)) { - Value *Elt = new LoadInst(SROADest ? OtherElt : EltPtr, "tmp", - MI); - new StoreInst(Elt, SROADest ? EltPtr : OtherElt, MI); - continue; + // If the stored element is zero (common case), just store a null + // constant. + Constant *StoreVal; + if (ConstantInt *CI = dyn_cast(MI->getOperand(2))) { + if (CI->isZero()) { + StoreVal = Constant::getNullValue(EltTy); // 0.0, null, 0, <0,0> } else { - assert(isa(MI)); - - // If the stored element is zero (common case), just store a null - // constant. - Constant *StoreVal; - if (ConstantInt *CI = dyn_cast(MI->getOperand(2))) { - if (CI->isZero()) { - StoreVal = Constant::getNullValue(EltTy); // 0.0, null, 0, <0,0> - } else { - // If EltTy is a vector type, get the element type. - const Type *ValTy = EltTy; - if (const VectorType *VTy = dyn_cast(ValTy)) - ValTy = VTy->getElementType(); - - // Construct an integer with the right value. - unsigned EltSize = TD->getTypeSizeInBits(ValTy); - APInt OneVal(EltSize, CI->getZExtValue()); - APInt TotalVal(OneVal); - // Set each byte. - for (unsigned i = 0; 8*i < EltSize; ++i) { - TotalVal = TotalVal.shl(8); - TotalVal |= OneVal; - } - - // Convert the integer value to the appropriate type. - StoreVal = ConstantInt::get(TotalVal); - if (isa(ValTy)) - StoreVal = ConstantExpr::getIntToPtr(StoreVal, ValTy); - else if (ValTy->isFloatingPoint()) - StoreVal = ConstantExpr::getBitCast(StoreVal, ValTy); - assert(StoreVal->getType() == ValTy && "Type mismatch!"); - - // If the requested value was a vector constant, create it. - if (EltTy != ValTy) { - unsigned NumElts = cast(ValTy)->getNumElements(); - SmallVector Elts(NumElts, StoreVal); - StoreVal = ConstantVector::get(&Elts[0], NumElts); - } - } - new StoreInst(StoreVal, EltPtr, MI); - continue; + // If EltTy is a vector type, get the element type. + const Type *ValTy = EltTy; + if (const VectorType *VTy = dyn_cast(ValTy)) + ValTy = VTy->getElementType(); + + // Construct an integer with the right value. + unsigned EltSize = TD->getTypeSizeInBits(ValTy); + APInt OneVal(EltSize, CI->getZExtValue()); + APInt TotalVal(OneVal); + // Set each byte. + for (unsigned i = 0; 8*i < EltSize; ++i) { + TotalVal = TotalVal.shl(8); + TotalVal |= OneVal; + } + + // Convert the integer value to the appropriate type. + StoreVal = ConstantInt::get(TotalVal); + if (isa(ValTy)) + StoreVal = ConstantExpr::getIntToPtr(StoreVal, ValTy); + else if (ValTy->isFloatingPoint()) + StoreVal = ConstantExpr::getBitCast(StoreVal, ValTy); + assert(StoreVal->getType() == ValTy && "Type mismatch!"); + + // If the requested value was a vector constant, create it. + if (EltTy != ValTy) { + unsigned NumElts = cast(ValTy)->getNumElements(); + SmallVector Elts(NumElts, StoreVal); + StoreVal = ConstantVector::get(&Elts[0], NumElts); } - // Otherwise, if we're storing a byte variable, use a memset call for - // this element. } + new StoreInst(StoreVal, EltPtr, MI); + continue; } - - // Cast the element pointer to BytePtrTy. - if (EltPtr->getType() != BytePtrTy) - EltPtr = new BitCastInst(EltPtr, BytePtrTy, EltPtr->getNameStr(), MI); - - // Cast the other pointer (if we have one) to BytePtrTy. - if (OtherElt && OtherElt->getType() != BytePtrTy) - OtherElt = new BitCastInst(OtherElt, BytePtrTy,OtherElt->getNameStr(), - MI); + // Otherwise, if we're storing a byte variable, use a memset call for + // this element. + } - unsigned EltSize = TD->getABITypeSize(EltTy); - - // Finally, insert the meminst for this element. - if (isa(MI) || isa(MI)) { - Value *Ops[] = { - SROADest ? EltPtr : OtherElt, // Dest ptr - SROADest ? OtherElt : EltPtr, // Src ptr - ConstantInt::get(MI->getOperand(3)->getType(), EltSize), // Size - Zero // Align - }; - CallInst::Create(TheFn, Ops, Ops + 4, "", MI); - } else { - assert(isa(MI)); - Value *Ops[] = { - EltPtr, MI->getOperand(2), // Dest, Value, - ConstantInt::get(MI->getOperand(3)->getType(), EltSize), // Size - Zero // Align - }; - CallInst::Create(TheFn, Ops, Ops + 4, "", MI); - } + // Cast the element pointer to BytePtrTy. + if (EltPtr->getType() != BytePtrTy) + EltPtr = new BitCastInst(EltPtr, BytePtrTy, EltPtr->getNameStr(), MI); + + // Cast the other pointer (if we have one) to BytePtrTy. + if (OtherElt && OtherElt->getType() != BytePtrTy) + OtherElt = new BitCastInst(OtherElt, BytePtrTy,OtherElt->getNameStr(), + MI); + + unsigned EltSize = TD->getABITypeSize(EltTy); + + // Finally, insert the meminst for this element. + if (isa(MI) || isa(MI)) { + Value *Ops[] = { + SROADest ? EltPtr : OtherElt, // Dest ptr + SROADest ? OtherElt : EltPtr, // Src ptr + ConstantInt::get(MI->getOperand(3)->getType(), EltSize), // Size + Zero // Align + }; + CallInst::Create(TheFn, Ops, Ops + 4, "", MI); + } else { + assert(isa(MI)); + Value *Ops[] = { + EltPtr, MI->getOperand(2), // Dest, Value, + ConstantInt::get(MI->getOperand(3)->getType(), EltSize), // Size + Zero // Align + }; + CallInst::Create(TheFn, Ops, Ops + 4, "", MI); } - - // Finally, MI is now dead, as we've modified its actions to occur on all of - // the elements of the aggregate. - ++UI; - MI->eraseFromParent(); } } + /// HasPadding - Return true if the specified type has any structure or /// alignment padding, false otherwise. From sabre at nondot.org Wed Jan 7 02:11:13 2009 From: sabre at nondot.org (Chris Lattner) Date: Wed, 07 Jan 2009 08:11:13 -0000 Subject: [llvm-commits] [llvm] r61853 - in /llvm/trunk: lib/Transforms/Scalar/ScalarReplAggregates.cpp test/Transforms/ScalarRepl/copy-aggregate.ll Message-ID: <200901070811.n078BD8w006740@zion.cs.uiuc.edu> Author: lattner Date: Wed Jan 7 02:11:13 2009 New Revision: 61853 URL: http://llvm.org/viewvc/llvm-project?rev=61853&view=rev Log: Implement the first half of PR3290: if there is a store of an integer to a (transitive) bitcast the alloca and if that integer has the full size of the alloca, then it clobbers the whole thing. Handle this by extracting pieces out of the stored integer and filing them away in the SROA'd elements. This triggers fairly frequently because the CFE uses integers to pass small structs by value and the inliner exposes these. For example, in kimwitu++, I see a bunch of these with i64 stores to "%struct.std::pair,bool>" In 176.gcc I see a few i32 stores to "%struct..0anon". In the testcase, this is a difference between compiling test1 to: _test1: subl $12, %esp movl 20(%esp), %eax movl %eax, 4(%esp) movl 16(%esp), %eax movl %eax, (%esp) movl (%esp), %eax addl 4(%esp), %eax addl $12, %esp ret vs: _test1: movl 8(%esp), %eax addl 4(%esp), %eax ret The second half of this will be to handle loads of the same form. Added: llvm/trunk/test/Transforms/ScalarRepl/copy-aggregate.ll 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=61853&r1=61852&r2=61853&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Wed Jan 7 02:11:13 2009 @@ -120,7 +120,8 @@ void RewriteMemIntrinUserOfAlloca(MemIntrinsic *MI, Instruction *BCInst, AllocationInst *AI, SmallVector &NewElts); - + void RewriteStoreUserOfWholeAlloca(StoreInst *SI, AllocationInst *AI, + SmallVector &NewElts); const Type *CanConvertToScalar(Value *V, bool &IsNotTrivial); void ConvertToScalar(AllocationInst *AI, const Type *Ty); @@ -586,6 +587,18 @@ isSafeUseOfBitCastedAllocation(BCU, AI, Info); } else if (MemIntrinsic *MI = dyn_cast(UI)) { isSafeMemIntrinsicOnAllocation(MI, AI, UI.getOperandNo(), Info); + } else if (StoreInst *SI = dyn_cast(UI)) { + // If storing the entire alloca in one chunk through a bitcasted pointer + // to integer, we can transform it. This happens (for example) when you + // cast a {i32,i32}* to i64* and store through it. This is similar to the + // memcpy case and occurs in various "byval" cases and emulated memcpys. + if (isa(SI->getOperand(0)->getType()) && + TD->getABITypeSize(SI->getOperand(0)->getType()) == + TD->getABITypeSize(AI->getType()->getElementType())) { + Info.isMemCpyDst = true; + continue; + } + return MarkUnsafe(Info); } else { return MarkUnsafe(Info); } @@ -603,7 +616,7 @@ Instruction *User = cast(*UI++); if (BitCastInst *BCU = dyn_cast(User)) { RewriteBitCastUserOfAlloca(BCU, AI, NewElts); - BCU->eraseFromParent(); + if (BCU->use_empty()) BCU->eraseFromParent(); continue; } @@ -611,12 +624,17 @@ // This must be memcpy/memmove/memset of the entire aggregate. // Split into one per element. RewriteMemIntrinUserOfAlloca(MI, BCInst, AI, NewElts); - MI->eraseFromParent(); continue; } - // If it's not a mem intrinsic, it must be some other user of a gep of the - // first pointer. Just leave these alone. + if (StoreInst *SI = dyn_cast(User)) { + // This must be a store of the entire alloca from an integer. + RewriteStoreUserOfWholeAlloca(SI, AI, NewElts); + continue; + } + + // Otherwise it must be some other user of a gep of the first pointer. Just + // leave these alone. continue; } } @@ -772,8 +790,118 @@ CallInst::Create(TheFn, Ops, Ops + 4, "", MI); } } + MI->eraseFromParent(); } + +/// RewriteStoreUserOfWholeAlloca - We found an store of an integer that +/// overwrites the entire allocation. Extract out the pieces of the stored +/// integer and store them individually. +void SROA::RewriteStoreUserOfWholeAlloca(StoreInst *SI, + AllocationInst *AI, + SmallVector &NewElts){ + // Extract each element out of the integer according to its structure offset + // and store the element value to the individual alloca. + Value *SrcVal = SI->getOperand(0); + const Type *AllocaEltTy = AI->getType()->getElementType(); + uint64_t AllocaSizeBits = TD->getABITypeSizeInBits(AllocaEltTy); + + // If this isn't a store of an integer to the whole alloca, it may be a store + // to the first element. Just ignore the store in this case and normal SROA + // will handle it. + if (!isa(SrcVal->getType()) || + TD->getABITypeSizeInBits(SrcVal->getType()) != AllocaSizeBits) + return; + + DOUT << "PROMOTING STORE TO WHOLE ALLOCA: " << *AI << *SI; + + // There are two forms here: AI could be an array or struct. Both cases + // have different ways to compute the element offset. + if (const StructType *EltSTy = dyn_cast(AllocaEltTy)) { + const StructLayout *Layout = TD->getStructLayout(EltSTy); + + for (unsigned i = 0, e = NewElts.size(); i != e; ++i) { + // Get the number of bits to shift SrcVal to get the value. + const Type *FieldTy = EltSTy->getElementType(i); + uint64_t Shift = Layout->getElementOffsetInBits(i); + + if (TD->isBigEndian()) + Shift = AllocaSizeBits-Shift-TD->getABITypeSizeInBits(FieldTy); + + Value *EltVal = SrcVal; + if (Shift) { + Value *ShiftVal = ConstantInt::get(EltVal->getType(), Shift); + EltVal = BinaryOperator::CreateLShr(EltVal, ShiftVal, + "sroa.store.elt", SI); + } + + // Truncate down to an integer of the right size. + uint64_t FieldSizeBits = TD->getTypeSizeInBits(FieldTy); + if (FieldSizeBits != AllocaSizeBits) + EltVal = new TruncInst(EltVal, IntegerType::get(FieldSizeBits), "", SI); + Value *DestField = NewElts[i]; + if (EltVal->getType() == FieldTy) { + // Storing to an integer field of this size, just do it. + } else if (FieldTy->isFloatingPoint() || isa(FieldTy)) { + // Bitcast to the right element type (for fp/vector values). + EltVal = new BitCastInst(EltVal, FieldTy, "", SI); + } else { + // Otherwise, bitcast the dest pointer (for aggregates). + DestField = new BitCastInst(DestField, + PointerType::getUnqual(EltVal->getType()), + "", SI); + } + new StoreInst(EltVal, DestField, SI); + } + + } else { + const ArrayType *ATy = cast(AllocaEltTy); + const Type *ArrayEltTy = ATy->getElementType(); + uint64_t ElementOffset = TD->getABITypeSizeInBits(ArrayEltTy); + uint64_t ElementSizeBits = TD->getTypeSizeInBits(ArrayEltTy); + + uint64_t Shift; + + if (TD->isBigEndian()) + Shift = AllocaSizeBits-ElementOffset; + else + Shift = 0; + + for (unsigned i = 0, e = NewElts.size(); i != e; ++i) { + + Value *EltVal = SrcVal; + if (Shift) { + Value *ShiftVal = ConstantInt::get(EltVal->getType(), Shift); + EltVal = BinaryOperator::CreateLShr(EltVal, ShiftVal, + "sroa.store.elt", SI); + } + + // Truncate down to an integer of the right size. + if (ElementSizeBits != AllocaSizeBits) + EltVal = new TruncInst(EltVal, IntegerType::get(ElementSizeBits),"",SI); + Value *DestField = NewElts[i]; + if (EltVal->getType() == ArrayEltTy) { + // Storing to an integer field of this size, just do it. + } else if (ArrayEltTy->isFloatingPoint() || isa(ArrayEltTy)) { + // Bitcast to the right element type (for fp/vector values). + EltVal = new BitCastInst(EltVal, ArrayEltTy, "", SI); + } else { + // Otherwise, bitcast the dest pointer (for aggregates). + DestField = new BitCastInst(DestField, + PointerType::getUnqual(EltVal->getType()), + "", SI); + } + new StoreInst(EltVal, DestField, SI); + + if (TD->isBigEndian()) + Shift -= ElementOffset; + else + Shift += ElementOffset; + } + } + SI->eraseFromParent(); +} + /// HasPadding - Return true if the specified type has any structure or /// alignment padding, false otherwise. Added: llvm/trunk/test/Transforms/ScalarRepl/copy-aggregate.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ScalarRepl/copy-aggregate.ll?rev=61853&view=auto ============================================================================== --- llvm/trunk/test/Transforms/ScalarRepl/copy-aggregate.ll (added) +++ llvm/trunk/test/Transforms/ScalarRepl/copy-aggregate.ll Wed Jan 7 02:11:13 2009 @@ -0,0 +1,31 @@ +; RUN: llvm-as < %s | opt -scalarrepl | llvm-dis | not grep alloca +; PR3290 + +;; Store of integer to whole alloca struct. +define i32 @test1(i64 %V) nounwind { + %X = alloca {{i32, i32}} + %Y = bitcast {{i32,i32}}* %X to i64* + store i64 %V, i64* %Y + + %A = getelementptr {{i32,i32}}* %X, i32 0, i32 0, i32 0 + %B = getelementptr {{i32,i32}}* %X, i32 0, i32 0, i32 1 + %a = load i32* %A + %b = load i32* %B + %c = add i32 %a, %b + ret i32 %c +} + +;; Store of integer to whole struct/array alloca. +define float @test2(i128 %V) nounwind { + %X = alloca {[4 x float]} + %Y = bitcast {[4 x float]}* %X to i128* + store i128 %V, i128* %Y + + %A = getelementptr {[4 x float]}* %X, i32 0, i32 0, i32 0 + %B = getelementptr {[4 x float]}* %X, i32 0, i32 0, i32 3 + %a = load float* %A + %b = load float* %B + %c = add float %a, %b + ret float %c +} + From baldrick at free.fr Wed Jan 7 12:45:53 2009 From: baldrick at free.fr (Duncan Sands) Date: Wed, 07 Jan 2009 18:45:53 -0000 Subject: [llvm-commits] [llvm] r61870 - /llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp Message-ID: <200901071845.n07Ijssk006009@zion.cs.uiuc.edu> Author: baldrick Date: Wed Jan 7 12:45:53 2009 New Revision: 61870 URL: http://llvm.org/viewvc/llvm-project?rev=61870&view=rev Log: The verifier checks that the aliasee is not null. Modified: llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp Modified: llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp?rev=61870&r1=61869&r2=61870&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/GlobalDCE.cpp Wed Jan 7 12:45:53 2009 @@ -161,8 +161,7 @@ MarkUsedGlobalsAsNeeded(GV->getInitializer()); } else if (GlobalAlias *GA = dyn_cast(G)) { // The target of a global alias is needed. - if (Constant *Aliasee = GA->getAliasee()) - MarkUsedGlobalsAsNeeded(Aliasee); + MarkUsedGlobalsAsNeeded(GA->getAliasee()); } else { // Otherwise this must be a function object. We have to scan the body of // the function looking for constants and global values which are used as From baldrick at free.fr Wed Jan 7 13:10:22 2009 From: baldrick at free.fr (Duncan Sands) Date: Wed, 07 Jan 2009 19:10:22 -0000 Subject: [llvm-commits] [llvm] r61872 - /llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp Message-ID: <200901071910.n07JAM0O006843@zion.cs.uiuc.edu> Author: baldrick Date: Wed Jan 7 13:10:21 2009 New Revision: 61872 URL: http://llvm.org/viewvc/llvm-project?rev=61872&view=rev Log: Use a switch rather than a sequence of "isa" tests. Modified: llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp Modified: llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp?rev=61872&r1=61871&r2=61872&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp Wed Jan 7 13:10:21 2009 @@ -210,7 +210,8 @@ // be tracked because if it is captured then so is the original pointer. unsigned Depth = UD.getInt(); - if (isa(I)) { + switch (I->getOpcode()) { + case Instruction::Store: if (V == I->getOperand(0)) { // Stored the pointer - it may be captured. If it is stored to a local // object (alloca) then track that object. Otherwise give up. @@ -230,14 +231,17 @@ } } // Storing to the pointee does not cause the pointer to be captured. - } else if (isa(I)) { + break; + case Instruction::Free: // Freeing a pointer does not cause it to be captured. - } else if (isa(I) || isa(I)) { + break; + case Instruction::Call: + case Instruction::Invoke: { CallSite CS = CallSite::get(I); // Not captured if the callee is readonly and doesn't return a copy // through its return value. if (CS.onlyReadsMemory() && I->getType() == Type::VoidTy) - continue; + break; // Not captured if only passed via 'nocapture' arguments. Note that // calling a function pointer does not in itself cause the pointer to @@ -253,22 +257,33 @@ return true; // Only passed via 'nocapture' arguments, or is the called function - not // captured. - } else if (isa(I) || isa(I) || isa(I) || - // Play safe and exclude GEP indices. - (isa(I) && V == I->getOperand(0)) || - // Play safe and exclude the select condition. - (isa(I) && V != I->getOperand(0))) { - - // Usually loads can be ignored because they dereference the original - // pointer. However the loaded value needs to be tracked if loading - // from an object that the original pointer was stored to. - if (isa(I)) { + break; + } + case Instruction::BitCast: + case Instruction::GetElementPtr: + case Instruction::Load: + case Instruction::PHI: + case Instruction::Select: + // Track any uses of this instruction to see if they are captured. + // First handle any special cases. + if (isa(I)) { + // Play safe and do not accept being used as an index. + if (V != I->getOperand(0)) + return true; + } else if (isa(I)) { + // Play safe and do not accept being used as the condition. + if (V == I->getOperand(0)) + return true; + } else if (isa(I)) { + // Usually loads can be ignored because they dereference the original + // pointer. However the loaded value needs to be tracked if loading + // from an object that the original pointer was stored to. if (Depth == 0) // Loading the original pointer or a variation of it. This does not // cause the pointer to be captured. Note that the loaded value might // be the pointer itself (think of self-referential objects), but that // is fine as long as it's not this function that stored it there. - continue; + break; // Loading a pointer to (a pointer to...) the original pointer or a // variation of it. Track uses of the loaded value, noting that one // dereference was performed. Note that the loaded value need not be @@ -284,7 +299,8 @@ if (Visited.insert(UD)) Worklist.push_back(UD); } - } else { + break; + default: // Something else - be conservative and say it is captured. return true; } From baldrick at free.fr Wed Jan 7 13:17:02 2009 From: baldrick at free.fr (Duncan Sands) Date: Wed, 07 Jan 2009 19:17:02 -0000 Subject: [llvm-commits] [llvm] r61873 - /llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp Message-ID: <200901071917.n07JH2fk007084@zion.cs.uiuc.edu> Author: baldrick Date: Wed Jan 7 13:17:02 2009 New Revision: 61873 URL: http://llvm.org/viewvc/llvm-project?rev=61873&view=rev Log: Reorder these. Modified: llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp Modified: llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp?rev=61873&r1=61872&r2=61873&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp Wed Jan 7 13:17:02 2009 @@ -211,30 +211,6 @@ unsigned Depth = UD.getInt(); switch (I->getOpcode()) { - case Instruction::Store: - if (V == I->getOperand(0)) { - // Stored the pointer - it may be captured. If it is stored to a local - // object (alloca) then track that object. Otherwise give up. - Value *Target = I->getOperand(1)->getUnderlyingObject(); - if (!isa(Target)) - // Didn't store to an obviously local object - captured. - return true; - if (Depth >= 3) - // Alloca recursion too deep - give up. - return true; - // Analyze all uses of the alloca. - for (Value::use_iterator UI = Target->use_begin(), - UE = Target->use_end(); UI != UE; ++UI) { - UseWithDepth NUD(&UI.getUse(), Depth + 1); - if (Visited.insert(NUD)) - Worklist.push_back(NUD); - } - } - // Storing to the pointee does not cause the pointer to be captured. - break; - case Instruction::Free: - // Freeing a pointer does not cause it to be captured. - break; case Instruction::Call: case Instruction::Invoke: { CallSite CS = CallSite::get(I); @@ -259,6 +235,30 @@ // captured. break; } + case Instruction::Free: + // Freeing a pointer does not cause it to be captured. + break; + case Instruction::Store: + if (V == I->getOperand(0)) { + // Stored the pointer - it may be captured. If it is stored to a local + // object (alloca) then track that object. Otherwise give up. + Value *Target = I->getOperand(1)->getUnderlyingObject(); + if (!isa(Target)) + // Didn't store to an obviously local object - captured. + return true; + if (Depth >= 3) + // Alloca recursion too deep - give up. + return true; + // Analyze all uses of the alloca. + for (Value::use_iterator UI = Target->use_begin(), + UE = Target->use_end(); UI != UE; ++UI) { + UseWithDepth NUD(&UI.getUse(), Depth + 1); + if (Visited.insert(NUD)) + Worklist.push_back(NUD); + } + } + // Storing to the pointee does not cause the pointer to be captured. + break; case Instruction::BitCast: case Instruction::GetElementPtr: case Instruction::Load: From dpatel at apple.com Wed Jan 7 13:19:22 2009 From: dpatel at apple.com (Devang Patel) Date: Wed, 07 Jan 2009 19:19:22 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r61874 - in /llvm-gcc-4.2/trunk/gcc: llvm-debug.cpp testsuite/llvm.objc/2009-01-07-dwarf.m Message-ID: <200901071919.n07JJMTG007171@zion.cs.uiuc.edu> Author: dpatel Date: Wed Jan 7 13:19:22 2009 New Revision: 61874 URL: http://llvm.org/viewvc/llvm-project?rev=61874&view=rev Log: Sometimes, objective-c creates multiple tree nodes for "id". In such cases, only the main variant tree node has all the info. If a type node's main variant is neither used for typedef nor for qualified types then reuse main varinat type. Added: llvm-gcc-4.2/trunk/gcc/testsuite/llvm.objc/2009-01-07-dwarf.m Modified: llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp 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=61874&r1=61873&r2=61874&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp Wed Jan 7 13:19:22 2009 @@ -387,6 +387,10 @@ return Ty; } + // If, for some reason, main type varaint type is seen then use it. + if (!MainTy.isNull()) + return MainTy; + // Work out details of type. switch (TREE_CODE(type)) { case ERROR_MARK: Added: llvm-gcc-4.2/trunk/gcc/testsuite/llvm.objc/2009-01-07-dwarf.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/llvm.objc/2009-01-07-dwarf.m?rev=61874&view=auto ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/llvm.objc/2009-01-07-dwarf.m (added) +++ llvm-gcc-4.2/trunk/gcc/testsuite/llvm.objc/2009-01-07-dwarf.m Wed Jan 7 13:19:22 2009 @@ -0,0 +1,15 @@ +/* { dg-do compile { target *-*-darwin* } } */ +/* { dg-options "-g" } */ + + at protocol MyProtocol +- (void) method; + at end + + at interface MyClass + at end + +int main() +{ + id obj_p = ((void *)0); + return 0; +} From ofv at wanadoo.es Wed Jan 7 13:24:44 2009 From: ofv at wanadoo.es (Oscar Fuentes) Date: Wed, 07 Jan 2009 19:24:44 -0000 Subject: [llvm-commits] [llvm] r61875 - in /llvm/trunk: cmake/modules/AddPartiallyLinkedObject.cmake tools/llvm-config/CMakeLists.txt Message-ID: <200901071924.n07JOiDJ007355@zion.cs.uiuc.edu> Author: ofv Date: Wed Jan 7 13:24:44 2009 New Revision: 61875 URL: http://llvm.org/viewvc/llvm-project?rev=61875&view=rev Log: CMake: replace `rm' with portable invocations of cmake. Based on a bug report by Yonggang Luo. Modified: llvm/trunk/cmake/modules/AddPartiallyLinkedObject.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=61875&r1=61874&r2=61875&view=diff ============================================================================== --- llvm/trunk/cmake/modules/AddPartiallyLinkedObject.cmake (original) +++ llvm/trunk/cmake/modules/AddPartiallyLinkedObject.cmake Wed Jan 7 13:24:44 2009 @@ -30,7 +30,7 @@ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/temp_lib 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 rm -f *${CMAKE_CXX_OUTPUT_EXTENSION} + COMMAND ${CMAKE_COMMAND} -E remove -f *${CMAKE_CXX_OUTPUT_EXTENSION} ) target_name_of_partially_linked_object(${lib} tnplo) add_custom_target(${tnplo} ALL DEPENDS ${pll}) Modified: llvm/trunk/tools/llvm-config/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-config/CMakeLists.txt?rev=61875&r1=61874&r2=61875&view=diff ============================================================================== --- llvm/trunk/tools/llvm-config/CMakeLists.txt (original) +++ llvm/trunk/tools/llvm-config/CMakeLists.txt Wed Jan 7 13:24:44 2009 @@ -54,7 +54,7 @@ set(LIBDEPS ${CMAKE_CURRENT_BINARY_DIR}/LibDeps.txt) set(LIBDEPS_TMP ${CMAKE_CURRENT_BINARY_DIR}/LibDeps.txt.tmp) set(FINAL_LIBDEPS ${CMAKE_CURRENT_BINARY_DIR}/FinalLibDeps.txt) -set(LLVM_CONFIG ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/llvm-config) +set(LLVM_CONFIG ${LLVM_TOOLS_BINARY_DIR}/llvm-config) set(LLVM_CONFIG_IN ${CMAKE_CURRENT_BINARY_DIR}/llvm-config.in) if( CMAKE_CROSSCOMPILING ) @@ -78,7 +78,7 @@ COMMENT "Updated ${LIBDEPS} because dependencies changed") add_custom_command(OUTPUT ${FINAL_LIBDEPS} - COMMAND ${PERL_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/find-cycles.pl < ${LIBDEPS} > ${FINAL_LIBDEPS} || rm -f ${FINAL_LIBDEPS} + COMMAND ${PERL_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/find-cycles.pl < ${LIBDEPS} > ${FINAL_LIBDEPS} || ${CMAKE_COMMAND} -E remove -f ${FINAL_LIBDEPS} DEPENDS ${LIBDEPS} COMMENT "Checking for cyclic dependencies between LLVM libraries.") @@ -91,10 +91,10 @@ COMMAND echo 's, at LIBS@,,' >> temp.sed # TODO: System libs COMMAND echo 's, at LLVM_BUILDMODE@,${CMAKE_BUILD_TYPE},' >> temp.sed COMMAND sed -f temp.sed < ${LLVM_CONFIG_IN} > ${LLVM_CONFIG} - COMMAND rm temp.sed + COMMAND ${CMAKE_COMMAND} -E remove -f temp.sed COMMAND cat ${FINAL_LIBDEPS} >> ${LLVM_CONFIG} COMMAND chmod +x ${LLVM_CONFIG} - COMMAND cd ${CMAKE_BINARY_DIR} && ${CMAKE_COMMAND} -U HAVE_LLVM_CONFIG ${CMAKE_SOURCE_DIR} + COMMAND cd ${CMAKE_BINARY_DIR} && ${CMAKE_COMMAND} -U HAVE_LLVM_CONFIG -D LLVM_BINARY_DIR="${LLVM_BINARY_DIR}" ${CMAKE_SOURCE_DIR} DEPENDS ${FINAL_LIBDEPS} ${LLVM_CONFIG_IN} COMMENT "Building llvm-config script." ) From baldrick at free.fr Wed Jan 7 13:39:06 2009 From: baldrick at free.fr (Duncan Sands) Date: Wed, 07 Jan 2009 19:39:06 -0000 Subject: [llvm-commits] [llvm] r61876 - in /llvm/trunk: lib/Transforms/IPO/FunctionAttrs.cpp test/Transforms/FunctionAttrs/2009-01-02-LocalStores.ll Message-ID: <200901071939.n07Jd6va008133@zion.cs.uiuc.edu> Author: baldrick Date: Wed Jan 7 13:39:06 2009 New Revision: 61876 URL: http://llvm.org/viewvc/llvm-project?rev=61876&view=rev Log: Remove alloca tracking from nocapture analysis. Not only was it not very helpful, it was also wrong! The problem is shown in the testcase: the alloca might be passed to a nocapture callee which dereferences it and returns the original pointer. But because it was a nocapture call we think we don't need to track its uses, but we do. Modified: llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp llvm/trunk/test/Transforms/FunctionAttrs/2009-01-02-LocalStores.ll Modified: llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp?rev=61876&r1=61875&r2=61876&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/FunctionAttrs.cpp Wed Jan 7 13:39:06 2009 @@ -183,32 +183,20 @@ /// isCaptured - Return true if this pointer value may be captured. bool FunctionAttrs::isCaptured(Function &F, Value *V) { - typedef PointerIntPair UseWithDepth; - SmallVector Worklist; - SmallSet Visited; + SmallVector Worklist; + SmallSet Visited; for (Value::use_iterator UI = V->use_begin(), UE = V->use_end(); UI != UE; ++UI) { - UseWithDepth UD(&UI.getUse(), 0); - Visited.insert(UD); - Worklist.push_back(UD); + Use *U = &UI.getUse(); + Visited.insert(U); + Worklist.push_back(U); } while (!Worklist.empty()) { - UseWithDepth UD = Worklist.pop_back_val(); - Use *U = UD.getPointer(); + Use *U = Worklist.pop_back_val(); Instruction *I = cast(U->getUser()); - // The value V may have any type if it comes from tracking a load. V = U->get(); - // The depth represents the number of loads that need to be performed to - // get back the original pointer (or a bitcast etc of it). For example, - // if the pointer is stored to an alloca, then all uses of the alloca get - // depth 1: if the alloca is loaded then you get the original pointer back. - // If a load of the alloca is returned then the pointer has been captured. - // The depth is needed in order to know which loads dereference the original - // pointer (these do not capture), and which return a value which needs to - // be tracked because if it is captured then so is the original pointer. - unsigned Depth = UD.getInt(); switch (I->getOpcode()) { case Instruction::Call: @@ -238,66 +226,25 @@ case Instruction::Free: // Freeing a pointer does not cause it to be captured. break; + case Instruction::Load: + // Loading from a pointer does not cause it to be captured. + break; case Instruction::Store: - if (V == I->getOperand(0)) { - // Stored the pointer - it may be captured. If it is stored to a local - // object (alloca) then track that object. Otherwise give up. - Value *Target = I->getOperand(1)->getUnderlyingObject(); - if (!isa(Target)) - // Didn't store to an obviously local object - captured. - return true; - if (Depth >= 3) - // Alloca recursion too deep - give up. - return true; - // Analyze all uses of the alloca. - for (Value::use_iterator UI = Target->use_begin(), - UE = Target->use_end(); UI != UE; ++UI) { - UseWithDepth NUD(&UI.getUse(), Depth + 1); - if (Visited.insert(NUD)) - Worklist.push_back(NUD); - } - } + if (V == I->getOperand(0)) + // Stored the pointer - it may be captured. + return true; // Storing to the pointee does not cause the pointer to be captured. break; case Instruction::BitCast: case Instruction::GetElementPtr: - case Instruction::Load: case Instruction::PHI: case Instruction::Select: - // Track any uses of this instruction to see if they are captured. - // First handle any special cases. - if (isa(I)) { - // Play safe and do not accept being used as an index. - if (V != I->getOperand(0)) - return true; - } else if (isa(I)) { - // Play safe and do not accept being used as the condition. - if (V == I->getOperand(0)) - return true; - } else if (isa(I)) { - // Usually loads can be ignored because they dereference the original - // pointer. However the loaded value needs to be tracked if loading - // from an object that the original pointer was stored to. - if (Depth == 0) - // Loading the original pointer or a variation of it. This does not - // cause the pointer to be captured. Note that the loaded value might - // be the pointer itself (think of self-referential objects), but that - // is fine as long as it's not this function that stored it there. - break; - // Loading a pointer to (a pointer to...) the original pointer or a - // variation of it. Track uses of the loaded value, noting that one - // dereference was performed. Note that the loaded value need not be - // of pointer type. For example, an alloca may have been bitcast to - // a pointer to another type, which was then loaded. - --Depth; - } - - // The original value is not captured via this if the instruction isn't. + // The original value is not captured via this if the new value isn't. for (Instruction::use_iterator UI = I->use_begin(), UE = I->use_end(); UI != UE; ++UI) { - UseWithDepth UD(&UI.getUse(), Depth); - if (Visited.insert(UD)) - Worklist.push_back(UD); + Use *U = &UI.getUse(); + if (Visited.insert(U)) + Worklist.push_back(U); } break; default: Modified: llvm/trunk/test/Transforms/FunctionAttrs/2009-01-02-LocalStores.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/FunctionAttrs/2009-01-02-LocalStores.ll?rev=61876&r1=61875&r2=61876&view=diff ============================================================================== --- llvm/trunk/test/Transforms/FunctionAttrs/2009-01-02-LocalStores.ll (original) +++ llvm/trunk/test/Transforms/FunctionAttrs/2009-01-02-LocalStores.ll Wed Jan 7 13:39:06 2009 @@ -1,23 +1,14 @@ ; RUN: llvm-as < %s | opt -functionattrs | llvm-dis | not grep {nocapture *%%q} ; RUN: llvm-as < %s | opt -functionattrs | llvm-dis | grep {nocapture *%%p} - at g = external global i32** - -define i32 @f(i32* %p, i32* %q) { - %a1 = alloca i32* - %a2 = alloca i32** - store i32* %p, i32** %a1 - store i32** %a1, i32*** %a2 - %reload1 = load i32*** %a2 - %reload2 = load i32** %reload1 - %load_p = load i32* %reload2 - store i32 0, i32* %reload2 +define i32* @a(i32** %p) { + %tmp = load i32** %p + ret i32* %tmp +} - %b1 = alloca i32* - %b2 = alloca i32** - store i32* %q, i32** %b1 - store i32** %b1, i32*** %b2 - %reload3 = load i32*** %b2 - store i32** %reload3, i32*** @g - ret i32 %load_p +define i32* @b(i32 *%q) { + %mem = alloca i32* + store i32* %q, i32** %mem + %tmp = call i32* @a(i32** %mem) + ret i32* %tmp } From bob.wilson at apple.com Wed Jan 7 13:42:17 2009 From: bob.wilson at apple.com (Bob Wilson) Date: Wed, 07 Jan 2009 19:42:17 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r61877 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Message-ID: <200901071942.n07JgH8V008264@zion.cs.uiuc.edu> Author: bwilson Date: Wed Jan 7 13:42:17 2009 New Revision: 61877 URL: http://llvm.org/viewvc/llvm-project?rev=61877&view=rev Log: Fix a typo in a comment. 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=61877&r1=61876&r2=61877&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Wed Jan 7 13:42:17 2009 @@ -4440,7 +4440,7 @@ const MemRef *DestLoc, Value *&Result) { #ifdef LLVM_TARGET_INTRINSIC_LOWER - // Get the result type and oeprand line in an easy to consume format. + // Get the result type and operand line in an easy to consume format. const Type *ResultType = ConvertType(TREE_TYPE(TREE_TYPE(fndecl))); std::vector Operands; for (tree Op = TREE_OPERAND(exp, 1); Op; Op = TREE_CHAIN(Op)) From baldrick at free.fr Wed Jan 7 14:01:06 2009 From: baldrick at free.fr (Duncan Sands) Date: Wed, 07 Jan 2009 20:01:06 -0000 Subject: [llvm-commits] [llvm] r61879 - /llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp Message-ID: <200901072001.n07K1693008895@zion.cs.uiuc.edu> Author: baldrick Date: Wed Jan 7 14:01:06 2009 New Revision: 61879 URL: http://llvm.org/viewvc/llvm-project?rev=61879&view=rev Log: Whitespace - correct formatting. Modified: llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp Modified: llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp?rev=61879&r1=61878&r2=61879&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp Wed Jan 7 14:01:06 2009 @@ -2371,8 +2371,8 @@ bool GlobalOpt::ResolveAliases(Module &M) { bool Changed = false; - for (Module::alias_iterator I = M.alias_begin(), - E = M.alias_end(); I != E; ++I) { + for (Module::alias_iterator I = M.alias_begin(), E = M.alias_end(); + I != E; ++I) { if (I->use_empty()) continue; From viridia at gmail.com Wed Jan 7 14:33:52 2009 From: viridia at gmail.com (Talin) Date: Wed, 7 Jan 2009 12:33:52 -0800 Subject: [llvm-commits] [PATCH] Unit tests for StringMap Message-ID: Here's StringMapTest, and some minor cleanup of DenseMapTest. Oh, and I found a bug in StringMap during the process of writing the tests, the fix is also included. Some notes: - I could not get StringMapEntryInitializer to compile, so those tests are disabled. Even more puzzling is that I could not find any code that uses StringMapEntryInitializer (I was hoping to find an example as to how to do the explicit specialization.) - I was very surprised that the default implementation of StringMapEntryInitializer is empty (no action) instead of a generic assignment - it means that insert() basically doesn't work, as the value never gets copied to the StringMapEntry. -- -- Talin -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090107/37983906/attachment.html -------------- next part -------------- A non-text attachment was scrubbed... Name: stringmap_unit.patch Type: application/octet-stream Size: 7047 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090107/37983906/attachment.obj From brukman+llvm at gmail.com Wed Jan 7 15:13:53 2009 From: brukman+llvm at gmail.com (Misha Brukman) Date: Wed, 07 Jan 2009 21:13:53 -0000 Subject: [llvm-commits] [llvm] r61883 - /llvm/trunk/unittests/ADT/DenseMapTest.cpp Message-ID: <200901072113.n07LDrSU011444@zion.cs.uiuc.edu> Author: brukman Date: Wed Jan 7 15:13:53 2009 New Revision: 61883 URL: http://llvm.org/viewvc/llvm-project?rev=61883&view=rev Log: Minor cleanup for unittest: * Fixed {copy,assignment} constructor test names * s/EXPECT_EQ(true, ...)/ASSERT_TRUE(...)/ Patch by Talin. Modified: llvm/trunk/unittests/ADT/DenseMapTest.cpp Modified: llvm/trunk/unittests/ADT/DenseMapTest.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/DenseMapTest.cpp?rev=61883&r1=61882&r2=61883&view=diff ============================================================================== --- llvm/trunk/unittests/ADT/DenseMapTest.cpp (original) +++ llvm/trunk/unittests/ADT/DenseMapTest.cpp Wed Jan 7 15:13:53 2009 @@ -125,7 +125,7 @@ } // Test copy constructor method -TEST_F(DenseMapTest, AssignmentTest) { +TEST_F(DenseMapTest, CopyConstructorTest) { uintMap[0] = 1; DenseMap copyMap(uintMap); @@ -134,7 +134,7 @@ } // Test assignment operator method -TEST_F(DenseMapTest, CopyConstructorTest) { +TEST_F(DenseMapTest, AssignmentTest) { uintMap[0] = 1; DenseMap copyMap = uintMap; @@ -160,7 +160,7 @@ // Ensure every number was visited. for (int i = 0; i < 100; ++i) { - EXPECT_EQ(true, visited[i]); + ASSERT_TRUE(visited[i]) << "Entry #" << i << " was never visited"; } } From gohman at apple.com Wed Jan 7 16:28:56 2009 From: gohman at apple.com (Dan Gohman) Date: Wed, 07 Jan 2009 22:28:56 -0000 Subject: [llvm-commits] [llvm] r61890 - /llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h Message-ID: <200901072228.n07MSuPs014016@zion.cs.uiuc.edu> Author: djg Date: Wed Jan 7 16:28:56 2009 New Revision: 61890 URL: http://llvm.org/viewvc/llvm-project?rev=61890&view=rev Log: Add empty() methods for register def lists. Modified: llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h Modified: llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h?rev=61890&r1=61889&r2=61890&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h Wed Jan 7 16:28:56 2009 @@ -81,6 +81,10 @@ } static reg_iterator reg_end() { return reg_iterator(0); } + /// reg_empty - Return true if there are no instructions using or defining the + /// specified register (it may be live-in). + bool reg_empty(unsigned RegNo) const { return reg_begin(RegNo) == reg_end(); } + /// def_iterator/def_begin/def_end - Walk all defs of the specified register. typedef defusechain_iterator def_iterator; def_iterator def_begin(unsigned RegNo) const { @@ -88,6 +92,10 @@ } static def_iterator def_end() { return def_iterator(0); } + /// def_empty - Return true if there are no instructions defining the + /// specified register (it may be live-in). + bool def_empty(unsigned RegNo) const { return def_begin(RegNo) == def_end(); } + /// use_iterator/use_begin/use_end - Walk all uses of the specified register. typedef defusechain_iterator use_iterator; use_iterator use_begin(unsigned RegNo) const { From brukman at gmail.com Wed Jan 7 16:29:57 2009 From: brukman at gmail.com (Misha Brukman) Date: Wed, 7 Jan 2009 17:29:57 -0500 Subject: [llvm-commits] [llvm] r61540 - in /llvm/trunk/utils/unittest/googletest: Makefile README.LLVM gtest-all.cc gtest-death-test.cc gtest-internal-inl.h gtest-test-part.cc gtest.cc gtest_main.cc include/gtest/internal/gtest-internal-inl.h In-Reply-To: References: <200901010205.n0125isk030712@zion.cs.uiuc.edu> <4962301F.2010600@cs.uiuc.edu> <49627E64.2060108@cs.uiuc.edu> Message-ID: 2009/1/5 Misha Brukman > Yes, I do. I just looked into gtest source code, and it doesn't look like > it needs any preprocessor tokens to get tr1 to work. > > I tried using /usr/bin/g++4 on this simple one-line file and it failed to > compile, saying the header wasn't found: > > ------8<------ > #include > ------8<------ > > This tells me that the g++ on your system might not be installed correctly, > because it works for me with gcc-4.1.1 and also because that is the location > of the header in libstdc++: > > > http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/include/tr1/tuple?view=log > > so it might be that this RedHat package was badly configured/installed and > might need to go on the list of "broken versions of GCC" for LLVM. > Turns out it's already on the list on http://llvm.org/GettingStarted.html, added on 10 Dec 2008 by Nuno Lopes in r60841. I just checked the GCC version on maute.cs.uiuc.edu and it exactly matches the description in the file. John, it looks like you'll have to install a newer GCC on those machines, either from 4.2 or 4.3 series. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090107/08fd778b/attachment.html From gohman at apple.com Wed Jan 7 16:30:55 2009 From: gohman at apple.com (Dan Gohman) Date: Wed, 07 Jan 2009 22:30:55 -0000 Subject: [llvm-commits] [llvm] r61891 - /llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Message-ID: <200901072230.n07MUtL2014100@zion.cs.uiuc.edu> Author: djg Date: Wed Jan 7 16:30:55 2009 New Revision: 61891 URL: http://llvm.org/viewvc/llvm-project?rev=61891&view=rev Log: Remove redundant 'else's. No functionality change. Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp?rev=61891&r1=61890&r2=61891&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Wed Jan 7 16:30:55 2009 @@ -971,27 +971,26 @@ // allocation choices. But if it is a livein then perhaps we want it // closer to its uses so it can be coalesced. return 0xffff; - else if (Opc == ISD::TokenFactor || Opc == ISD::CopyToReg) + if (Opc == ISD::TokenFactor || Opc == ISD::CopyToReg) // CopyToReg should be close to its uses to facilitate coalescing and // avoid spilling. return 0; - else if (Opc == TargetInstrInfo::EXTRACT_SUBREG || - Opc == TargetInstrInfo::INSERT_SUBREG) + if (Opc == TargetInstrInfo::EXTRACT_SUBREG || + Opc == TargetInstrInfo::INSERT_SUBREG) // EXTRACT_SUBREG / INSERT_SUBREG should be close to its use to // facilitate coalescing. return 0; - else if (SU->NumSuccs == 0) + if (SU->NumSuccs == 0) // If SU does not have a use, i.e. it doesn't produce a value that would // be consumed (e.g. store), then it terminates a chain of computation. // Give it a large SethiUllman number so it will be scheduled right // before its predecessors that it doesn't lengthen their live ranges. return 0xffff; - else if (SU->NumPreds == 0) + if (SU->NumPreds == 0) // If SU does not have a def, schedule it close to its uses because it // does not lengthen any live ranges. return 0; - else - return SethiUllmanNumbers[SU->NodeNum]; + return SethiUllmanNumbers[SU->NodeNum]; } unsigned size() const { return Queue.size(); } From ggreif at gmail.com Wed Jan 7 16:39:29 2009 From: ggreif at gmail.com (Gabor Greif) Date: Wed, 07 Jan 2009 22:39:29 -0000 Subject: [llvm-commits] [llvm] r61893 - /llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Message-ID: <200901072239.n07MdTfq020576@zion.cs.uiuc.edu> Author: ggreif Date: Wed Jan 7 16:39:29 2009 New Revision: 61893 URL: http://llvm.org/viewvc/llvm-project?rev=61893&view=rev Log: use the obvious getters Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=61893&r1=61892&r2=61893&view=diff ============================================================================== --- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original) +++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Wed Jan 7 16:39:29 2009 @@ -831,9 +831,9 @@ const InvokeInst *II = cast(&I); Vals.push_back(VE.getAttributeID(II->getAttributes())); Vals.push_back(II->getCallingConv()); - Vals.push_back(VE.getValueID(I.getOperand(1))); // normal dest - Vals.push_back(VE.getValueID(I.getOperand(2))); // unwind dest - PushValueAndType(I.getOperand(0), InstID, Vals, VE); // callee + Vals.push_back(VE.getValueID(II->getNormalDest())); + Vals.push_back(VE.getValueID(II->getUnwindDest())); + PushValueAndType(II->getCalledFunction(), InstID, Vals, VE); // Emit value #'s for the fixed parameters. for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i) From ggreif at gmail.com Wed Jan 7 17:07:22 2009 From: ggreif at gmail.com (Gabor Greif) Date: Wed, 07 Jan 2009 23:07:22 -0000 Subject: [llvm-commits] [llvm] r61895 - /llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Message-ID: <200901072307.n07N7MPe013175@zion.cs.uiuc.edu> Author: ggreif Date: Wed Jan 7 17:07:22 2009 New Revision: 61895 URL: http://llvm.org/viewvc/llvm-project?rev=61895&view=rev Log: revert to functionally equivalent formulation Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=61895&r1=61894&r2=61895&view=diff ============================================================================== --- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original) +++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Wed Jan 7 17:07:22 2009 @@ -833,7 +833,7 @@ Vals.push_back(II->getCallingConv()); Vals.push_back(VE.getValueID(II->getNormalDest())); Vals.push_back(VE.getValueID(II->getUnwindDest())); - PushValueAndType(II->getCalledFunction(), InstID, Vals, VE); + PushValueAndType(I.getOperand(0), InstID, Vals, VE); // callee // Emit value #'s for the fixed parameters. for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i) From brukman+llvm at gmail.com Wed Jan 7 17:07:30 2009 From: brukman+llvm at gmail.com (Misha Brukman) Date: Wed, 07 Jan 2009 23:07:30 -0000 Subject: [llvm-commits] [llvm] r61896 - in /llvm/trunk: lib/Target/CellSPU/SPUInstrInfo.cpp test/CodeGen/CellSPU/shift_ops.ll Message-ID: <200901072307.n07N7U1h013193@zion.cs.uiuc.edu> Author: brukman Date: Wed Jan 7 17:07:29 2009 New Revision: 61896 URL: http://llvm.org/viewvc/llvm-project?rev=61896&view=rev Log: Fix off-by-one error in traversing an array; this fixes a test. The error was reported by gcc-4.3.0 during compilation. Modified: llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll Modified: llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp?rev=61896&r1=61895&r2=61896&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp (original) +++ llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp Wed Jan 7 17:07:29 2009 @@ -678,7 +678,7 @@ unsigned Opc = unsigned(Cond[0].getImm()); // Pretty dull mapping between the two conditions that SPU can generate: - for (int i = sizeof(revconds)/sizeof(revconds[0]); i >= 0; --i) { + for (int i = sizeof(revconds)/sizeof(revconds[0]) - 1; i >= 0; --i) { if (revconds[i].Opc == Opc) { Cond[0].setImm(revconds[i].RevCondOpc); return false; 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=61896&r1=61895&r2=61896&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll Wed Jan 7 17:07:29 2009 @@ -16,8 +16,6 @@ ; RUN: grep -w rotqbybi %t1.s | count 1 ; RUN: grep -w sfi %t1.s | count 3 -; XFAIL: alpha|linux|sparc|ia64|arm - 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 sabre at nondot.org Wed Jan 7 17:25:06 2009 From: sabre at nondot.org (Chris Lattner) Date: Wed, 07 Jan 2009 23:25:06 -0000 Subject: [llvm-commits] [llvm] r61898 - in /llvm/trunk: include/llvm/Support/DebugInfoBuilder.h lib/VMCore/DebugInfoBuilder.cpp Message-ID: <200901072325.n07NP6oF013894@zion.cs.uiuc.edu> Author: lattner Date: Wed Jan 7 17:25:06 2009 New Revision: 61898 URL: http://llvm.org/viewvc/llvm-project?rev=61898&view=rev Log: remove DebugInfoBuilder, it has been subsumed by Analysis/DebugInfo.h Removed: llvm/trunk/include/llvm/Support/DebugInfoBuilder.h llvm/trunk/lib/VMCore/DebugInfoBuilder.cpp Removed: llvm/trunk/include/llvm/Support/DebugInfoBuilder.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/DebugInfoBuilder.h?rev=61897&view=auto ============================================================================== --- llvm/trunk/include/llvm/Support/DebugInfoBuilder.h (original) +++ llvm/trunk/include/llvm/Support/DebugInfoBuilder.h (removed) @@ -1,151 +0,0 @@ -//===-- llvm/Support/DebugInfoBuilder.h - -----------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file contains the declaration of the DebugInfoBuilder class, which is -// a helper class used to construct source level debugging information. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SUPPORT_DEBUGINFOBUILDER_H -#define LLVM_SUPPORT_DEBUGINFOBUILDER_H - -#include "llvm/Module.h" -#include - -namespace llvm { - -class Type; -class IntegerType; -class FloatType; -class StructType; -class PointerType; -class Module; -class GlobalVariable; -class Constant; - -namespace sys { - class Path; -} - -/// Helper class used to construct source-level debugging information. -/// -/// The helper contains a notion of "current context", which is a -/// DWARF descriptor object representing the scope (module, class, -/// function, etc.) that currently encloses the definitions being -/// emitted. -/// -/// Initially, you should call setModule() to specify the target -/// module. Descriptors which are generated will be inserted into -/// this module. This also generates the initial set of anchor -/// descriptors, if they have not already been created for the module. -/// -/// Next, you should call createCompileUnitDescriptor() to create -/// the descriptor for the current compilation unit. This method -/// sets the current context to the newly created descriptor. -/// -/// Once that has been done, you can then create descriptors for -/// global definitions (functions, variables, etc.). You can use -/// setContext() to modify the current context. setContext() returns -/// a reference to the previous context, allowing easy restoration -/// of the previous context. -class DebugInfoBuilder { -private: - Module * module; - PointerType * anyPtrType; // Pointer to empty struct - StructType * anchorType; - GlobalVariable * compileUnit; - GlobalVariable * context; - GlobalVariable * compileUnitAnchor; - GlobalVariable * globalVariableAnchor; - GlobalVariable * subprogramAnchor; - GlobalVariable * compileUnitDescriptor; - - // Create an anchor with the specified tag. - GlobalVariable * createAnchor(unsigned anchorTag, const char * anchorName); - - // Calculate alignement for primitive types. - unsigned getBasicAlignment(unsigned sizeInBits); - - // Calculate the size of the specified LLVM type. - Constant * getSize(const Type * type); - - // Calculate the alignment of the specified LLVM type. - Constant * getAlignment(const Type * type); - -public: - /// Constructor - DebugInfoBuilder(); - - /// Return the type defined by llvm.dbg.anchor.type - StructType * getAnchorType() const { return anchorType; } - - /// Set the reference to the module where we will insert debugging - /// information. Also defines the debug info types for the module and - /// creates the initial anchors. Also changes the current context to the - // global context for that module. - void setModule(Module * m); - - /// Emit a compile unit descriptor. This should be done once for each - /// module before any other debug descriptors are created. This also - /// changes the current context to the global context for the compile unit. - GlobalVariable * createCompileUnitDescriptor( - unsigned langId, - const sys::Path & srcPath, - const std::string & producer); - - /// Set a new context, returning the previous context. The context is the - /// debug descriptor representing the current scope (module, function, - /// class, etc.) - GlobalVariable * setContext(GlobalVariable * ctx) { - GlobalVariable * prev = context; - context = ctx; - return prev; - } - - /// Emit a subprogram descriptor in the current context. - GlobalVariable * createSubProgramDescriptor( - const std::string & name, // Name of the subprogram - const std::string & qualName, // Fully-qualified name - unsigned line, // Line number - GlobalVariable * typeDesc, // Type descriptor - bool isInternalScoped, // True if internal to module. - bool isDefined); // True if defined in this module. - - /// Create a type descriptor for a primitive type. - GlobalVariable * createBasicTypeDescriptor( - std::string & name, - unsigned line, - unsigned sizeInBits, - unsigned alignmentInBits, - unsigned offsetInBits, - unsigned typeEncoding); - - /// Create a type descriptor for an integer type - GlobalVariable * createIntegerTypeDescriptor( - std::string & name, const IntegerType * type, bool isSigned); - - /// Create a type descriptor for an character type - GlobalVariable * createCharacterTypeDescriptor( - std::string & name, const IntegerType * type, bool isSigned); - - /// Create a type descriptor for an floating-point type - GlobalVariable * createFloatTypeDescriptor(std::string & name, - const Type * type); - - /// Create a type descriptor for a pointer type. - GlobalVariable * createPointerTypeDescriptor( - std::string & name, // Name of the type - GlobalVariable * referenceType, // Descriptor for what is pointed to - const PointerType * type, // LLVM type of the pointer - unsigned line); // Line number of definition (0 if none) -}; - -} - -#endif Removed: llvm/trunk/lib/VMCore/DebugInfoBuilder.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/DebugInfoBuilder.cpp?rev=61897&view=auto ============================================================================== --- llvm/trunk/lib/VMCore/DebugInfoBuilder.cpp (original) +++ llvm/trunk/lib/VMCore/DebugInfoBuilder.cpp (removed) @@ -1,274 +0,0 @@ -//===-- llvm/VMCore/DebugInfoBuilder.cpp - ----------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file contains the definition of the DebugInfoBuilder class, which is -// a helper class used to construct source level debugging information. -// -//===----------------------------------------------------------------------===// - -#include -#include -#include -#include -#include -#include -#include - -using namespace llvm; - -namespace { - -//===----------------------------------------------------------------------===// -// Debug version -- copied from MachineModuleInfo (for now), in order to avoid -// creating a dependency on CodeGen. These declarations really should be moved -// to a better place where modules can get at them without being dependent on -// CodeGen. -enum { - LLVMDebugVersion = (6 << 16), // Current version of debug information. - LLVMDebugVersion5 = (5 << 16), // Constant for version 5. - LLVMDebugVersion4 = (4 << 16), // Constant for version 4. - LLVMDebugVersionMask = 0xffff0000 // Mask for version number. -}; - -const char ANCHOR_TYPE_NAME[] = "llvm.dbg.anchor.type"; -const char COMPILE_UNIT_ANCHOR_NAME[] = "llvm.dbg.compile_units"; -const char GLOBAL_VAR_ANCHOR_NAME[] = "llvm.dbg.global_variables"; -const char SUBPROGRAM_ANCHOR_NAME[] = "llvm.dbg.subprograms"; -const char COMPILE_UNIT_TYPE_NAME[] = "llvm.dbg.compile_unit.type"; -const char COMPILE_UNIT_NAME[] = "llvm.dbg.compile_unit"; -const char SUBPROGRAM_NAME[] = "llvm.dbg.subprogram"; -const char BASICTYPE_NAME[] = "llvm.dbg.basictype"; -const char DERIVEDTYPE_NAME[] = "llvm.dbg.derivedtype"; - -} // end anonymous namespace - -DebugInfoBuilder::DebugInfoBuilder() { - anyPtrType = PointerType::getUnqual(StructType::get(NULL, NULL)); - anchorType = StructType::get(Type::Int32Ty, Type::Int32Ty, NULL); -} - -GlobalVariable * DebugInfoBuilder::createAnchor(unsigned anchorTag, - const char * anchorName) { - - std::vector values; - values.push_back(ConstantInt::get(Type::Int32Ty, LLVMDebugVersion)); - values.push_back(ConstantInt::get(Type::Int32Ty, anchorTag)); - - return new GlobalVariable(anchorType, true, GlobalValue::LinkOnceLinkage, - ConstantStruct::get(anchorType, values), anchorName, module); -} - -// Calculate the size of the specified LLVM type. -Constant * DebugInfoBuilder::getSize(const Type * type) { - Constant * one = ConstantInt::get(Type::Int32Ty, 1); - return ConstantExpr::getPtrToInt( - ConstantExpr::getGetElementPtr( - ConstantPointerNull::get(PointerType::getUnqual(type)), - &one, 1), Type::Int32Ty); -} - -Constant * DebugInfoBuilder::getAlignment(const Type * type) { - // Calculates the alignment of T using "sizeof({i8, T}) - sizeof(T)" - return ConstantExpr::getSub( - getSize(StructType::get(Type::Int8Ty, type, NULL)), - getSize(type)); -} - -void DebugInfoBuilder::setModule(Module * m) { - module = m; - module->addTypeName(ANCHOR_TYPE_NAME, anchorType); - - compileUnitAnchor = module->getGlobalVariable(COMPILE_UNIT_ANCHOR_NAME); - if (compileUnitAnchor == NULL) { - compileUnitAnchor = - createAnchor(dwarf::DW_TAG_compile_unit, COMPILE_UNIT_ANCHOR_NAME); - } - - globalVariableAnchor = module->getGlobalVariable(GLOBAL_VAR_ANCHOR_NAME); - if (globalVariableAnchor == NULL) { - globalVariableAnchor = - createAnchor(dwarf::DW_TAG_compile_unit, GLOBAL_VAR_ANCHOR_NAME); - } - - subprogramAnchor = module->getGlobalVariable(SUBPROGRAM_ANCHOR_NAME); - if (subprogramAnchor == NULL) { - subprogramAnchor = - createAnchor(dwarf::DW_TAG_compile_unit, SUBPROGRAM_ANCHOR_NAME); - } - - compileUnit = module->getGlobalVariable(COMPILE_UNIT_NAME); - setContext(compileUnit); -} - -GlobalVariable * DebugInfoBuilder::createCompileUnitDescriptor(unsigned langId, - const sys::Path & srcPath, const std::string & producer) { - - if (compileUnit == NULL) { - std::vector values; - values.push_back(ConstantInt::get( - Type::Int32Ty, LLVMDebugVersion + dwarf::DW_TAG_compile_unit)); - values.push_back( - ConstantExpr::getBitCast(compileUnitAnchor, anyPtrType)); - values.push_back(ConstantInt::get(Type::Int32Ty, langId)); - values.push_back(ConstantArray::get(srcPath.getLast())); - values.push_back(ConstantArray::get(srcPath.getDirname() + "/")); - values.push_back(ConstantArray::get(producer)); - - Constant * structVal = ConstantStruct::get(values, false); - compileUnit = new GlobalVariable(structVal->getType(), true, - GlobalValue::InternalLinkage, structVal, COMPILE_UNIT_NAME, module); - } - - setContext(compileUnit); - return compileUnit; -} - -GlobalVariable * DebugInfoBuilder::createSubProgramDescriptor( - const std::string & name, - const std::string & qualifiedName, - unsigned line, - GlobalVariable * typeDesc, - bool isInternal, - bool isDefined) { - - assert(compileUnit != NULL); - assert(subprogramAnchor != NULL); - - std::vector values; - values.push_back(ConstantInt::get( - Type::Int32Ty, LLVMDebugVersion + dwarf::DW_TAG_subprogram)); - values.push_back(ConstantExpr::getBitCast(subprogramAnchor, anyPtrType)); - values.push_back(ConstantExpr::getBitCast(context, anyPtrType)); - values.push_back(ConstantArray::get(name)); - values.push_back(ConstantArray::get(qualifiedName)); - values.push_back(ConstantArray::get(qualifiedName)); - values.push_back(ConstantExpr::getBitCast(compileUnit, anyPtrType)); - values.push_back(ConstantInt::get(Type::Int32Ty, line)); - values.push_back(typeDesc ? - ConstantExpr::getBitCast(typeDesc, anyPtrType) : - ConstantPointerNull::get(anyPtrType)); - values.push_back(ConstantInt::get(Type::Int1Ty, isInternal)); - values.push_back(ConstantInt::get(Type::Int1Ty, isDefined)); - - Constant * structVal = ConstantStruct::get(values, false); - return new GlobalVariable(structVal->getType(), true, - GlobalValue::InternalLinkage, structVal, SUBPROGRAM_NAME, module); -} - -GlobalVariable * DebugInfoBuilder::createBasicTypeDescriptor( - std::string & name, - unsigned line, - unsigned sizeInBits, - unsigned alignmentInBits, - unsigned offsetInBits, - unsigned typeEncoding) { - - std::vector values; - values.push_back(ConstantInt::get( - Type::Int32Ty, LLVMDebugVersion + dwarf::DW_TAG_base_type)); - values.push_back(ConstantExpr::getBitCast(context, anyPtrType)); - values.push_back(ConstantArray::get(name)); - values.push_back(ConstantExpr::getBitCast(compileUnit, anyPtrType)); - values.push_back(ConstantInt::get(Type::Int32Ty, line)); - values.push_back(ConstantInt::get(Type::Int32Ty, sizeInBits)); - values.push_back(ConstantInt::get(Type::Int32Ty, alignmentInBits)); - values.push_back(ConstantInt::get(Type::Int32Ty, offsetInBits)); - values.push_back(ConstantInt::get(Type::Int32Ty, typeEncoding)); - - Constant * structVal = ConstantStruct::get(values, false); - return new GlobalVariable(structVal->getType(), true, - GlobalValue::InternalLinkage, structVal, BASICTYPE_NAME, module); -} - -GlobalVariable * DebugInfoBuilder::createIntegerTypeDescriptor( - std::string & name, const IntegerType * type, bool isSigned) { - - std::vector values; - values.push_back(ConstantInt::get( - Type::Int32Ty, LLVMDebugVersion + dwarf::DW_TAG_base_type)); - values.push_back(ConstantPointerNull::get(anyPtrType)); - values.push_back(ConstantArray::get(name)); - values.push_back(ConstantPointerNull::get(anyPtrType)); - values.push_back(ConstantInt::get(Type::Int32Ty, 0)); - values.push_back(ConstantInt::get(Type::Int32Ty, type->getBitWidth())); - values.push_back(getAlignment(type)); - values.push_back(ConstantInt::get(Type::Int32Ty, 0)); - values.push_back(ConstantInt::get(Type::Int32Ty, - isSigned ? dwarf::DW_ATE_signed_char : dwarf::DW_ATE_unsigned_char)); - - Constant * structVal = ConstantStruct::get(values, false); - return new GlobalVariable(structVal->getType(), true, - GlobalValue::InternalLinkage, structVal, BASICTYPE_NAME, module); -} - -GlobalVariable * DebugInfoBuilder::createCharacterTypeDescriptor( - std::string & name, const IntegerType * type, bool isSigned) { - - std::vector values; - values.push_back(ConstantInt::get( - Type::Int32Ty, LLVMDebugVersion + dwarf::DW_TAG_base_type)); - values.push_back(ConstantPointerNull::get(anyPtrType)); - values.push_back(ConstantArray::get(name)); - values.push_back(ConstantPointerNull::get(anyPtrType)); - values.push_back(ConstantInt::get(Type::Int32Ty, 0)); - values.push_back(ConstantInt::get(Type::Int32Ty, type->getBitWidth())); - values.push_back(getAlignment(type)); - values.push_back(ConstantInt::get(Type::Int32Ty, 0/*offsetInBits*/)); - values.push_back(ConstantInt::get(Type::Int32Ty, - isSigned ? dwarf::DW_ATE_signed_char : dwarf::DW_ATE_unsigned_char)); - - Constant * structVal = ConstantStruct::get(values, false); - return new GlobalVariable(structVal->getType(), true, - GlobalValue::InternalLinkage, structVal, BASICTYPE_NAME, module); -} - -GlobalVariable * DebugInfoBuilder::createFloatTypeDescriptor( - std::string & name, const Type * type) { - - std::vector values; - values.push_back(ConstantInt::get( - Type::Int32Ty, LLVMDebugVersion + dwarf::DW_TAG_base_type)); - values.push_back(ConstantPointerNull::get(anyPtrType)); - values.push_back(ConstantArray::get(name)); - values.push_back(ConstantPointerNull::get(anyPtrType)); - values.push_back(ConstantInt::get(Type::Int32Ty, 0)); - values.push_back(getSize(type)); - values.push_back(getAlignment(type)); - values.push_back(ConstantInt::get(Type::Int32Ty, 0/*offsetInBits*/)); - values.push_back(ConstantInt::get(Type::Int32Ty, dwarf::DW_ATE_float)); - - Constant * structVal = ConstantStruct::get(values, false); - return new GlobalVariable(structVal->getType(), true, - GlobalValue::InternalLinkage, structVal, BASICTYPE_NAME, module); -} - -GlobalVariable * DebugInfoBuilder::createPointerTypeDescriptor( - std::string & name, - GlobalVariable * referenceType, - const PointerType * type, - unsigned line) { - - std::vector values; - values.push_back(ConstantInt::get( - Type::Int32Ty, dwarf::DW_TAG_pointer_type + LLVMDebugVersion)); - values.push_back( - context ? ConstantExpr::getBitCast(context, anyPtrType) : NULL); - values.push_back(ConstantArray::get(name)); - values.push_back( - compileUnit ? ConstantExpr::getBitCast(compileUnit, anyPtrType) : NULL); - values.push_back(ConstantInt::get(Type::Int32Ty, line)); - values.push_back(getSize(type)); - values.push_back(getAlignment(type)); - values.push_back(ConstantInt::get(Type::Int32Ty, 0)); - values.push_back(referenceType); - - Constant * structVal = ConstantStruct::get(values, false); - return new GlobalVariable(structVal->getType(), true, - GlobalValue::InternalLinkage, structVal, DERIVEDTYPE_NAME, module); -} From bob.wilson at apple.com Wed Jan 7 17:44:28 2009 From: bob.wilson at apple.com (Bob Wilson) Date: Wed, 07 Jan 2009 23:44:28 -0000 Subject: [llvm-commits] [llvm] r61899 - in /llvm/trunk: include/llvm/DerivedTypes.h lib/VMCore/Verifier.cpp Message-ID: <200901072344.n07NiSBv014571@zion.cs.uiuc.edu> Author: bwilson Date: Wed Jan 7 17:44:27 2009 New Revision: 61899 URL: http://llvm.org/viewvc/llvm-project?rev=61899&view=rev Log: Assert that VectorType::getTruncatedElementVectorType is not used with odd bit-width vector elements. Add a check in the verifier for this also. Modified: llvm/trunk/include/llvm/DerivedTypes.h llvm/trunk/lib/VMCore/Verifier.cpp Modified: llvm/trunk/include/llvm/DerivedTypes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DerivedTypes.h?rev=61899&r1=61898&r2=61899&view=diff ============================================================================== --- llvm/trunk/include/llvm/DerivedTypes.h (original) +++ llvm/trunk/include/llvm/DerivedTypes.h Wed Jan 7 17:44:27 2009 @@ -385,6 +385,8 @@ /// static VectorType *getTruncatedElementVectorType(const VectorType *VTy) { unsigned EltBits = VTy->getElementType()->getPrimitiveSizeInBits(); + assert((EltBits & 1) == 0 && + "Cannot truncate vector element with odd bit-width"); const Type *EltTy = IntegerType::get(EltBits / 2); return VectorType::get(EltTy, VTy->getNumElements()); } Modified: llvm/trunk/lib/VMCore/Verifier.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Verifier.cpp?rev=61899&r1=61898&r2=61899&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Verifier.cpp (original) +++ llvm/trunk/lib/VMCore/Verifier.cpp Wed Jan 7 17:44:27 2009 @@ -1395,16 +1395,22 @@ // type. if ((Match & (ExtendedElementVectorType | TruncatedElementVectorType)) != 0) { - if (!VTy) { + const IntegerType *IEltTy = dyn_cast(EltTy); + if (!VTy || !IEltTy) { CheckFailed("Intrinsic parameter #" + utostr(ArgNo - 1) + " is not " - "a vector type.", F); + "an integral vector type.", F); return false; } // Adjust the current Ty (in the opposite direction) rather than // the type being matched against. - if ((Match & ExtendedElementVectorType) != 0) + if ((Match & ExtendedElementVectorType) != 0) { + if ((IEltTy->getBitWidth() & 1) != 0) { + CheckFailed("Intrinsic parameter #" + utostr(ArgNo - 1) + " vector " + "element bit-width is odd.", F); + return false; + } Ty = VectorType::getTruncatedElementVectorType(VTy); - else + } else Ty = VectorType::getExtendedElementVectorType(VTy); Match &= ~(ExtendedElementVectorType | TruncatedElementVectorType); } From bob.wilson at apple.com Wed Jan 7 17:44:41 2009 From: bob.wilson at apple.com (Bob Wilson) Date: Wed, 7 Jan 2009 15:44:41 -0800 Subject: [llvm-commits] [llvm] r61834 - in /llvm/trunk: include/llvm/DerivedTypes.h include/llvm/Intrinsics.td lib/VMCore/Verifier.cpp utils/TableGen/CodeGenTarget.cpp utils/TableGen/IntrinsicEmitter.cpp In-Reply-To: <583D02A1-8D62-4456-A85E-7918A73CA69F@apple.com> References: <200901070009.n07091oG024927@zion.cs.uiuc.edu> <583D02A1-8D62-4456-A85E-7918A73CA69F@apple.com> Message-ID: <87BD0285-4D2C-45F8-98D8-10FF580A4994@apple.com> On Jan 6, 2009, at 5:13 PM, Chris Lattner wrote: > > On Jan 6, 2009, at 4:09 PM, Bob Wilson wrote: >> + /// VectorType::getTruncatedElementVectorType - This static >> method is like >> + /// getInteger except that the element types are half as wide as >> the >> + /// elements in the input type. >> + /// >> + static VectorType *getTruncatedElementVectorType(const VectorType >> *VTy) { >> + unsigned EltBits = VTy->getElementType()- >>> getPrimitiveSizeInBits(); >> + const Type *EltTy = IntegerType::get(EltBits / 2); >> + return VectorType::get(EltTy, VTy->getNumElements()); >> + } > > Should this assert that EltBits is a multiple of 2? It would be nice > for tblgen to reject cases where the size was not a multiple of two > also. I've added the assertion. TableGen can't check the vector element sizes since it never sees the specific types. It only sees the overloaded "iAny" types. Instead, I added a check in the verifier to make sure that vector elements with an odd bit-width don't get "truncated". Let me know if that doesn't address your concern. From isanbard at gmail.com Wed Jan 7 17:54:30 2009 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 7 Jan 2009 15:54:30 -0800 Subject: [llvm-commits] [llvm] r61898 - in /llvm/trunk: include/llvm/Support/DebugInfoBuilder.h lib/VMCore/DebugInfoBuilder.cpp In-Reply-To: <200901072325.n07NP6oF013894@zion.cs.uiuc.edu> References: <200901072325.n07NP6oF013894@zion.cs.uiuc.edu> Message-ID: <16e5fdf90901071554v2347e15co95ce16de40f70234@mail.gmail.com> On Wed, Jan 7, 2009 at 3:25 PM, Chris Lattner wrote: > Author: lattner > Date: Wed Jan 7 17:25:06 2009 > New Revision: 61898 > > URL: http://llvm.org/viewvc/llvm-project?rev=61898&view=rev > Log: > remove DebugInfoBuilder, it has been subsumed by Analysis/DebugInfo.h > DebugInfoBuilder is dead! Long live DebugInfoBuilder!! -bw From ofv at wanadoo.es Wed Jan 7 18:18:52 2009 From: ofv at wanadoo.es (Oscar Fuentes) Date: Thu, 08 Jan 2009 00:18:52 -0000 Subject: [llvm-commits] [llvm] r61900 - /llvm/trunk/lib/VMCore/CMakeLists.txt Message-ID: <200901080018.n080Iq9B015739@zion.cs.uiuc.edu> Author: ofv Date: Wed Jan 7 18:18:52 2009 New Revision: 61900 URL: http://llvm.org/viewvc/llvm-project?rev=61900&view=rev Log: CMake: removed lib/VMCore/DebugInfoBuilder.cpp. Modified: llvm/trunk/lib/VMCore/CMakeLists.txt Modified: llvm/trunk/lib/VMCore/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/CMakeLists.txt?rev=61900&r1=61899&r2=61900&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/CMakeLists.txt (original) +++ llvm/trunk/lib/VMCore/CMakeLists.txt Wed Jan 7 18:18:52 2009 @@ -6,7 +6,6 @@ ConstantFold.cpp Constants.cpp Core.cpp - DebugInfoBuilder.cpp Dominators.cpp Function.cpp Globals.cpp From gohman at apple.com Wed Jan 7 18:32:10 2009 From: gohman at apple.com (Dan Gohman) Date: Wed, 7 Jan 2009 16:32:10 -0800 Subject: [llvm-commits] [llvm] r60407 - in /llvm/trunk: include/llvm/Analysis/ScalarEvolution.h include/llvm/Analysis/ScalarEvolutionExpander.h include/llvm/Analysis/ScalarEvolutionExpressions.h lib/Analysis/ScalarEvolution.cpp lib/Analysis/ScalarEvolutionExpander.cpp In-Reply-To: <200812020805.mB285n4P006299@zion.cs.uiuc.edu> References: <200812020805.mB285n4P006299@zion.cs.uiuc.edu> Message-ID: Hi Nick, 254.gap is failing in an SCEV-related assertion failure in llc on x86_64 as of this commit. I've attached a bugpoint-reduced testcase. Can you investigate? Thanks, Dan -------------- next part -------------- A non-text attachment was scrubbed... Name: sdiv-scev.bc Type: application/octet-stream Size: 704 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090107/1a40714e/attachment.obj -------------- next part -------------- On Dec 2, 2008, at 12:05 AM, Nick Lewycky wrote: > Author: nicholas > Date: Tue Dec 2 02:05:48 2008 > New Revision: 60407 > > URL: http://llvm.org/viewvc/llvm-project?rev=60407&view=rev > Log: > Add a new SCEV representing signed division. > > Modified: > llvm/trunk/include/llvm/Analysis/ScalarEvolution.h > llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h > llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h > llvm/trunk/lib/Analysis/ScalarEvolution.cpp > llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp > > Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolution.h > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolution.h?rev=60407&r1=60406&r2=60407&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/include/llvm/Analysis/ScalarEvolution.h (original) > +++ llvm/trunk/include/llvm/Analysis/ScalarEvolution.h Tue Dec 2 > 02:05:48 2008 > @@ -225,6 +225,7 @@ > return getMulExpr(Ops); > } > SCEVHandle getUDivExpr(const SCEVHandle &LHS, const SCEVHandle > &RHS); > + SCEVHandle getSDivExpr(const SCEVHandle &LHS, const SCEVHandle > &RHS); > SCEVHandle getAddRecExpr(const SCEVHandle &Start, const > SCEVHandle &Step, > const Loop *L); > SCEVHandle getAddRecExpr(std::vector &Operands, > > Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h?rev=60407&r1=60406&r2=60407&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h > (original) > +++ llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h Tue > Dec 2 02:05:48 2008 > @@ -104,6 +104,8 @@ > > Value *visitUDivExpr(SCEVUDivExpr *S); > > + Value *visitSDivExpr(SCEVSDivExpr *S); > + > Value *visitAddRecExpr(SCEVAddRecExpr *S); > > Value *visitSMaxExpr(SCEVSMaxExpr *S); > > Modified: llvm/trunk/include/llvm/Analysis/ > ScalarEvolutionExpressions.h > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h?rev=60407&r1=60406&r2=60407&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h > (original) > +++ llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h > Tue Dec 2 02:05:48 2008 > @@ -25,7 +25,7 @@ > // These should be ordered in terms of increasing complexity to > make the > // folders simpler. > scConstant, scTruncate, scZeroExtend, scSignExtend, scAddExpr, > scMulExpr, > - scUDivExpr, scAddRecExpr, scUMaxExpr, scSMaxExpr, scUnknown, > + scUDivExpr, scSDivExpr, scAddRecExpr, scUMaxExpr, scSMaxExpr, > scUnknown, > scCouldNotCompute > }; > > @@ -358,6 +358,55 @@ > > > // > = > = > =-------------------------------------------------------------------- > ===// > + /// SCEVSDivExpr - This class represents a binary signed division > operation. > + /// > + class SCEVSDivExpr : public SCEV { > + friend class ScalarEvolution; > + > + SCEVHandle LHS, RHS; > + SCEVSDivExpr(const SCEVHandle &lhs, const SCEVHandle &rhs) > + : SCEV(scSDivExpr), LHS(lhs), RHS(rhs) {} > + > + virtual ~SCEVSDivExpr(); > + public: > + const SCEVHandle &getLHS() const { return LHS; } > + const SCEVHandle &getRHS() const { return RHS; } > + > + virtual bool isLoopInvariant(const Loop *L) const { > + return LHS->isLoopInvariant(L) && RHS->isLoopInvariant(L); > + } > + > + virtual bool hasComputableLoopEvolution(const Loop *L) const { > + return LHS->hasComputableLoopEvolution(L) && > + RHS->hasComputableLoopEvolution(L); > + } > + > + SCEVHandle replaceSymbolicValuesWithConcrete(const SCEVHandle > &Sym, > + const SCEVHandle > &Conc, > + ScalarEvolution > &SE) const { > + SCEVHandle L = LHS->replaceSymbolicValuesWithConcrete(Sym, > Conc, SE); > + SCEVHandle R = RHS->replaceSymbolicValuesWithConcrete(Sym, > Conc, SE); > + if (L == LHS && R == RHS) > + return this; > + else > + return SE.getSDivExpr(L, R); > + } > + > + > + virtual const Type *getType() const; > + > + void print(std::ostream &OS) const; > + void print(std::ostream *OS) const { if (OS) print(*OS); } > + > + /// Methods for support type inquiry through isa, cast, and > dyn_cast: > + static inline bool classof(const SCEVSDivExpr *S) { return > true; } > + static inline bool classof(const SCEV *S) { > + return S->getSCEVType() == scSDivExpr; > + } > + }; > + > + > + // > = > = > =-------------------------------------------------------------------- > ===// > /// SCEVAddRecExpr - This node represents a polynomial recurrence > on the trip > /// count of the specified loop. > /// > @@ -550,6 +599,8 @@ > return ((SC*)this)->visitMulExpr((SCEVMulExpr*)S); > case scUDivExpr: > return ((SC*)this)->visitUDivExpr((SCEVUDivExpr*)S); > + case scSDivExpr: > + return ((SC*)this)->visitSDivExpr((SCEVSDivExpr*)S); > case scAddRecExpr: > return ((SC*)this)->visitAddRecExpr((SCEVAddRecExpr*)S); > case scSMaxExpr: > > Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=60407&r1=60406&r2=60407&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original) > +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Tue Dec 2 02:05:48 > 2008 > @@ -324,6 +324,26 @@ > return LHS->getType(); > } > > + > +// SCEVSDivs - Only allow the creation of one SCEVSDivExpr for any > particular > +// input. Don't use a SCEVHandle here, or else the object will > never be > +// deleted! > +static ManagedStatic, > + SCEVSDivExpr*> > SCEVSDivs; > + > +SCEVSDivExpr::~SCEVSDivExpr() { > + SCEVSDivs->erase(std::make_pair(LHS, RHS)); > +} > + > +void SCEVSDivExpr::print(std::ostream &OS) const { > + OS << "(" << *LHS << " /s " << *RHS << ")"; > +} > + > +const Type *SCEVSDivExpr::getType() const { > + return LHS->getType(); > +} > + > + > // SCEVAddRecExprs - Only allow the creation of one SCEVAddRecExpr > for any > // particular input. Don't use a SCEVHandle here, or else the > object will never > // be deleted! > @@ -1109,9 +1129,12 @@ > } > > SCEVHandle ScalarEvolution::getUDivExpr(const SCEVHandle &LHS, const > SCEVHandle &RHS) { > + if (LHS == RHS) > + return getIntegerSCEV(1, LHS->getType()); // X udiv X --> 1 > + > if (SCEVConstant *RHSC = dyn_cast(RHS)) { > if (RHSC->getValue()->equalsInt(1)) > - return LHS; // X udiv 1 --> x > + return LHS; // X udiv 1 --> X > > if (SCEVConstant *LHSC = dyn_cast(LHS)) { > Constant *LHSCV = LHSC->getValue(); > @@ -1120,13 +1143,34 @@ > } > } > > - // FIXME: implement folding of (X*4)/4 when we know X*4 doesn't > overflow. > - > SCEVUDivExpr *&Result = (*SCEVUDivs)[std::make_pair(LHS, RHS)]; > if (Result == 0) Result = new SCEVUDivExpr(LHS, RHS); > return Result; > } > > +SCEVHandle ScalarEvolution::getSDivExpr(const SCEVHandle &LHS, > const SCEVHandle &RHS) { > + if (LHS == RHS) > + return getIntegerSCEV(1, LHS->getType()); // X sdiv X --> 1 > + > + if (SCEVConstant *RHSC = dyn_cast(RHS)) { > + if (RHSC->getValue()->equalsInt(1)) > + return LHS; // X sdiv 1 --> X > + > + if (RHSC->getValue()->isAllOnesValue()) > + return getNegativeSCEV(LHS); // X sdiv -1 --> -X > + > + if (SCEVConstant *LHSC = dyn_cast(LHS)) { > + Constant *LHSCV = LHSC->getValue(); > + Constant *RHSCV = RHSC->getValue(); > + return getUnknown(ConstantExpr::getSDiv(LHSCV, RHSCV)); > + } > + } > + > + SCEVSDivExpr *&Result = (*SCEVSDivs)[std::make_pair(LHS, RHS)]; > + if (Result == 0) Result = new SCEVSDivExpr(LHS, RHS); > + return Result; > +} > + > > /// SCEVAddRecExpr::get - Get a add recurrence expression for the > /// specified loop. Simplify the expression as much as possible. > @@ -1732,7 +1776,7 @@ > return MinOpRes; > } > > - // SCEVUDivExpr, SCEVUnknown > + // SCEVUDivExpr, SCEVSDivExpr, SCEVUnknown > return 0; > } > > @@ -1762,6 +1806,9 @@ > case Instruction::UDiv: > return SE.getUDivExpr(getSCEV(U->getOperand(0)), > getSCEV(U->getOperand(1))); > + case Instruction::SDiv: > + return SE.getSDivExpr(getSCEV(U->getOperand(0)), > + getSCEV(U->getOperand(1))); > case Instruction::Sub: > return SE.getMinusSCEV(getSCEV(U->getOperand(0)), > getSCEV(U->getOperand(1))); > @@ -1805,7 +1852,7 @@ > break; > > case Instruction::LShr: > - // Turn logical shift right of a constant into a unsigned divide. > + // Turn logical shift right of a constant into an unsigned > divide. > if (ConstantInt *SA = dyn_cast(U->getOperand(1))) { > uint32_t BitWidth = cast(V->getType())- > >getBitWidth(); > Constant *X = ConstantInt::get( > @@ -2505,16 +2552,26 @@ > return Comm; > } > > - if (SCEVUDivExpr *Div = dyn_cast(V)) { > - SCEVHandle LHS = getSCEVAtScope(Div->getLHS(), L); > + if (SCEVUDivExpr *UDiv = dyn_cast(V)) { > + SCEVHandle LHS = getSCEVAtScope(UDiv->getLHS(), L); > if (LHS == UnknownValue) return LHS; > - SCEVHandle RHS = getSCEVAtScope(Div->getRHS(), L); > + SCEVHandle RHS = getSCEVAtScope(UDiv->getRHS(), L); > if (RHS == UnknownValue) return RHS; > - if (LHS == Div->getLHS() && RHS == Div->getRHS()) > - return Div; // must be loop invariant > + if (LHS == UDiv->getLHS() && RHS == UDiv->getRHS()) > + return UDiv; // must be loop invariant > return SE.getUDivExpr(LHS, RHS); > } > > + if (SCEVSDivExpr *SDiv = dyn_cast(V)) { > + SCEVHandle LHS = getSCEVAtScope(SDiv->getLHS(), L); > + if (LHS == UnknownValue) return LHS; > + SCEVHandle RHS = getSCEVAtScope(SDiv->getRHS(), L); > + if (RHS == UnknownValue) return RHS; > + if (LHS == SDiv->getLHS() && RHS == SDiv->getRHS()) > + return SDiv; // must be loop invariant > + return SE.getSDivExpr(LHS, RHS); > + } > + > // If this is a loop recurrence for a loop that does not contain > L, then we > // are dealing with the final value computed by the loop. > if (SCEVAddRecExpr *AddRec = dyn_cast(V)) { > > Modified: llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp?rev=60407&r1=60406&r2=60407&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp (original) > +++ llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp Tue Dec 2 > 02:05:48 2008 > @@ -143,6 +143,15 @@ > return InsertBinop(Instruction::UDiv, LHS, RHS, InsertPt); > } > > +Value *SCEVExpander::visitSDivExpr(SCEVSDivExpr *S) { > + // Do not fold sdiv into ashr, unless you know that LHS is > positive. On > + // negative values, it rounds the wrong way. > + > + Value *LHS = expand(S->getLHS()); > + Value *RHS = expand(S->getRHS()); > + return InsertBinop(Instruction::SDiv, LHS, RHS, InsertPt); > +} > + > Value *SCEVExpander::visitAddRecExpr(SCEVAddRecExpr *S) { > const Type *Ty = S->getType(); > const Loop *L = S->getLoop(); > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From bob.wilson at apple.com Wed Jan 7 19:56:06 2009 From: bob.wilson at apple.com (Bob Wilson) Date: Thu, 08 Jan 2009 01:56:06 -0000 Subject: [llvm-commits] [llvm] r61903 - /llvm/trunk/lib/VMCore/Verifier.cpp Message-ID: <200901080156.n081u6Kn019069@zion.cs.uiuc.edu> Author: bwilson Date: Wed Jan 7 19:56:06 2009 New Revision: 61903 URL: http://llvm.org/viewvc/llvm-project?rev=61903&view=rev Log: Fix failure messages in Verifier::PerformTypeCheck. The argument numbers passed in to this function changed to support multiple return values, leading to some incorrect argument numbers in the failure messages. With this change, the ArgNo values used for return values and parameters are disjoint, and the new IntrinsicParam function translates those ArgNo values to strings that can be used in the messages. This also fixes a few places where PerformTypeCheck did not return false following calls to CheckFailed. 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=61903&r1=61902&r2=61903&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Verifier.cpp (original) +++ llvm/trunk/lib/VMCore/Verifier.cpp Wed Jan 7 19:56:06 2009 @@ -1375,6 +1375,20 @@ } } +/// Produce a string to identify an intrinsic parameter or return value. +/// The ArgNo value numbers the return values from 0 to NumRets-1 and the +/// parameters beginning with NumRets. +/// +static std::string IntrinsicParam(unsigned ArgNo, unsigned NumRets) { + if (ArgNo < NumRets) { + if (NumRets == 1) + return "Intrinsic result type"; + else + return "Intrinsic result type #" + utostr(ArgNo); + } else + return "Intrinsic parameter #" + utostr(ArgNo - NumRets); +} + bool Verifier::PerformTypeCheck(Intrinsic::ID ID, Function *F, const Type *Ty, int VT, unsigned ArgNo, std::string &Suffix) { const FunctionType *FTy = F->getFunctionType(); @@ -1387,6 +1401,12 @@ NumElts = VTy->getNumElements(); } + const Type *RetTy = FTy->getReturnType(); + const StructType *ST = dyn_cast(RetTy); + unsigned NumRets = 1; + if (ST) + NumRets = ST->getNumElements(); + if (VT < 0) { int Match = ~VT; @@ -1397,7 +1417,7 @@ TruncatedElementVectorType)) != 0) { const IntegerType *IEltTy = dyn_cast(EltTy); if (!VTy || !IEltTy) { - CheckFailed("Intrinsic parameter #" + utostr(ArgNo - 1) + " is not " + CheckFailed(IntrinsicParam(ArgNo, NumRets) + " is not " "an integral vector type.", F); return false; } @@ -1405,7 +1425,7 @@ // the type being matched against. if ((Match & ExtendedElementVectorType) != 0) { if ((IEltTy->getBitWidth() & 1) != 0) { - CheckFailed("Intrinsic parameter #" + utostr(ArgNo - 1) + " vector " + CheckFailed(IntrinsicParam(ArgNo, NumRets) + " vector " "element bit-width is odd.", F); return false; } @@ -1415,37 +1435,26 @@ Match &= ~(ExtendedElementVectorType | TruncatedElementVectorType); } - const Type *RetTy = FTy->getReturnType(); - const StructType *ST = dyn_cast(RetTy); - unsigned NumRets = 1; - - if (ST) - NumRets = ST->getNumElements(); - if (Match <= static_cast(NumRets - 1)) { if (ST) RetTy = ST->getElementType(Match); if (Ty != RetTy) { - CheckFailed("Intrinsic parameter #" + utostr(ArgNo - 1) + " does not " + CheckFailed(IntrinsicParam(ArgNo, NumRets) + " does not " "match return type.", F); return false; } } else { if (Ty != FTy->getParamType(Match - 1)) { - CheckFailed("Intrinsic parameter #" + utostr(ArgNo - 1) + " does not " + CheckFailed(IntrinsicParam(ArgNo, NumRets) + " does not " "match parameter %" + utostr(Match - 1) + ".", F); return false; } } } else if (VT == MVT::iAny) { if (!EltTy->isInteger()) { - if (ArgNo == 0) - CheckFailed("Intrinsic result type is not an integer type.", F); - else - CheckFailed("Intrinsic parameter #" + utostr(ArgNo - 1) + " is not " - "an integer type.", F); - + CheckFailed(IntrinsicParam(ArgNo, NumRets) + " is not " + "an integer type.", F); return false; } @@ -1461,17 +1470,16 @@ switch (ID) { default: break; // Not everything needs to be checked. case Intrinsic::bswap: - if (GotBits < 16 || GotBits % 16 != 0) + if (GotBits < 16 || GotBits % 16 != 0) { CheckFailed("Intrinsic requires even byte width argument", F); + return false; + } break; } } else if (VT == MVT::fAny) { if (!EltTy->isFloatingPoint()) { - if (ArgNo == 0) - CheckFailed("Intrinsic result type is not a floating-point type.", F); - else - CheckFailed("Intrinsic parameter #" + utostr(ArgNo - 1) + " is not " - "a floating-point type.", F); + CheckFailed(IntrinsicParam(ArgNo, NumRets) + " is not " + "a floating-point type.", F); return false; } @@ -1483,12 +1491,9 @@ Suffix += MVT::getMVT(EltTy).getMVTString(); } else if (VT == MVT::iPTR) { if (!isa(Ty)) { - if (ArgNo == 0) - CheckFailed("Intrinsic result type is not a " - "pointer and a pointer is required.", F); - else - CheckFailed("Intrinsic parameter #" + utostr(ArgNo - 1) + " is not a " - "pointer and a pointer is required.", F); + CheckFailed(IntrinsicParam(ArgNo, NumRets) + " is not a " + "pointer and a pointer is required.", F); + return false; } } else if (VT == MVT::iPTRAny) { // Outside of TableGen, we don't distinguish iPTRAny (to any address space) @@ -1498,12 +1503,8 @@ Suffix += ".p" + utostr(PTyp->getAddressSpace()) + MVT::getMVT(PTyp->getElementType()).getMVTString(); } else { - if (ArgNo == 0) - CheckFailed("Intrinsic result type is not a " - "pointer and a pointer is required.", F); - else - CheckFailed("Intrinsic parameter #" + utostr(ArgNo-1) + " is not a " - "pointer and a pointer is required.", F); + CheckFailed(IntrinsicParam(ArgNo, NumRets) + " is not a " + "pointer and a pointer is required.", F); return false; } } else if (MVT((MVT::SimpleValueType)VT).isVector()) { @@ -1521,19 +1522,12 @@ return false; } } else if (MVT((MVT::SimpleValueType)VT).getTypeForMVT() != EltTy) { - if (ArgNo == 0) - CheckFailed("Intrinsic prototype has incorrect result type!", F); - else - CheckFailed("Intrinsic parameter #" + utostr(ArgNo-1) + " is wrong!",F); - + CheckFailed(IntrinsicParam(ArgNo, NumRets) + " is wrong!", F); return false; } else if (EltTy != Ty) { - if (ArgNo == 0) - CheckFailed("Intrinsic result type is vector " - "and a scalar is required.", F); - else - CheckFailed("Intrinsic parameter #" + utostr(ArgNo-1) + " is vector " - "and a scalar is required.", F); + CheckFailed(IntrinsicParam(ArgNo, NumRets) + " is a vector " + "and a scalar is required.", F); + return false; } return true; @@ -1587,7 +1581,8 @@ break; } - if (!PerformTypeCheck(ID, F, FTy->getParamType(ArgNo), VT, ArgNo, Suffix)) + if (!PerformTypeCheck(ID, F, FTy->getParamType(ArgNo), VT, ArgNo + RetNum, + Suffix)) break; } From brukman+llvm at gmail.com Wed Jan 7 20:11:55 2009 From: brukman+llvm at gmail.com (Misha Brukman) Date: Thu, 08 Jan 2009 02:11:55 -0000 Subject: [llvm-commits] [llvm] r61904 - in /llvm/trunk: Makefile Makefile.rules Message-ID: <200901080211.n082Btdp019525@zion.cs.uiuc.edu> Author: brukman Date: Wed Jan 7 20:11:55 2009 New Revision: 61904 URL: http://llvm.org/viewvc/llvm-project?rev=61904&view=rev Log: Removed trailing whitespace. Modified: llvm/trunk/Makefile llvm/trunk/Makefile.rules Modified: llvm/trunk/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile?rev=61904&r1=61903&r2=61904&view=diff ============================================================================== --- llvm/trunk/Makefile (original) +++ llvm/trunk/Makefile Wed Jan 7 20:11:55 2009 @@ -1,10 +1,10 @@ #===- ./Makefile -------------------------------------------*- Makefile -*--===# -# +# # The LLVM Compiler Infrastructure # # This file is distributed under the University of Illinois Open Source # License. See LICENSE.TXT for details. -# +# #===------------------------------------------------------------------------===# LEVEL := . @@ -30,7 +30,7 @@ EXTRA_DIST := test unittests llvm.spec include win32 Xcode -include $(LEVEL)/Makefile.config +include $(LEVEL)/Makefile.config # llvm-gcc4 doesn't need runtime libs. llvm-gcc4 is the only supported one. # FIXME: Remove runtime entirely once we have an understanding of where @@ -59,7 +59,7 @@ OPTIONAL_DIRS := endif -# Don't install utils, examples, or projects they are only used to +# Don't install utils, examples, or projects they are only used to # build LLVM. ifeq ($(MAKECMDGOALS),install) DIRS := $(filter-out utils, $(DIRS)) @@ -130,7 +130,7 @@ FilesToConfigPATH := $(addprefix $(LLVM_OBJ_ROOT)/,$(FilesToConfig)) all-local:: $(FilesToConfigPATH) -$(FilesToConfigPATH) : $(LLVM_OBJ_ROOT)/% : $(LLVM_SRC_ROOT)/%.in +$(FilesToConfigPATH) : $(LLVM_OBJ_ROOT)/% : $(LLVM_SRC_ROOT)/%.in $(Echo) Regenerating $* $(Verb) cd $(LLVM_OBJ_ROOT) && $(ConfigStatusScript) $* .PRECIOUS: $(FilesToConfigPATH) @@ -138,7 +138,7 @@ # NOTE: This needs to remain as the last target definition in this file so # that it gets executed last. ifneq ($(BUILD_DIRS_ONLY),1) -all:: +all:: $(Echo) '*****' Completed $(BuildMode)$(AssertMode) Build ifeq ($(BuildMode),Debug) $(Echo) '*****' Note: Debug build can be 10 times slower than an @@ -154,10 +154,10 @@ check-one: $(Verb)$(MAKE) -C test check-one TESTONE=$(TESTONE) -srpm: $(LLVM_OBJ_ROOT)/llvm.spec +srpm: $(LLVM_OBJ_ROOT)/llvm.spec rpmbuild -bs $(LLVM_OBJ_ROOT)/llvm.spec -rpm: $(LLVM_OBJ_ROOT)/llvm.spec +rpm: $(LLVM_OBJ_ROOT)/llvm.spec rpmbuild -bb --target $(TARGET_TRIPLE) $(LLVM_OBJ_ROOT)/llvm.spec show-footprint: Modified: llvm/trunk/Makefile.rules URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.rules?rev=61904&r1=61903&r2=61904&view=diff ============================================================================== --- llvm/trunk/Makefile.rules (original) +++ llvm/trunk/Makefile.rules Wed Jan 7 20:11:55 2009 @@ -4,7 +4,7 @@ # # This file is distributed under the University of Illinois Open Source # License. See LICENSE.TXT for details. -# +# #===------------------------------------------------------------------------===# # # This file is included by all of the LLVM makefiles. For details on how to use @@ -50,7 +50,7 @@ .PHONY: $(UserTargets) $(InternalTargets) #-------------------------------------------------------------------- -# Make sure all the user-target rules are double colon rules and +# Make sure all the user-target rules are double colon rules and # they are defined first. #-------------------------------------------------------------------- @@ -188,7 +188,7 @@ clean-all:: clean-local clean-all-local install:: install-local uninstall:: uninstall-local -install-local:: all-local +install-local:: all-local install-bytecode:: install-bytecode-local ############################################################################### @@ -269,8 +269,8 @@ CPP.Defines += -D_DEBUG endif -# If ENABLE_EXPENSIVE_CHECKS=1 is specified (make command line or -# configured), then enable expensive checks by defining the +# If ENABLE_EXPENSIVE_CHECKS=1 is specified (make command line or +# configured), then enable expensive checks by defining the # appropriate preprocessor symbols. ifdef ENABLE_EXPENSIVE_CHECKS BuildMode := $(BuildMode)+Checks @@ -340,7 +340,7 @@ TBLGEN := $(LLVMToolDir)/tblgen$(EXEEXT) endif endif -LLVM_CONFIG := $(LLVMToolDir)/llvm-config +LLVM_CONFIG := $(LLVMToolDir)/llvm-config ifndef LLVMLD LLVMLD := $(LLVMToolDir)/llvm-ld$(EXEEXT) endif @@ -380,7 +380,7 @@ # Adjust LD.Flags and Libtool.Flags depending on the kind of library that is # to be built. Note that if LOADABLE_MODULE is specified then the resulting -# shared library can be opened with dlopen. Also, LOADABLE_MODULE implies +# shared library can be opened with dlopen. Also, LOADABLE_MODULE implies # several other things so we force them to be defined/on. ifdef LOADABLE_MODULE SHARED_LIBRARY := 1 @@ -409,7 +409,7 @@ AR.Flags += >/dev/null 2>/dev/null ConfigureScriptFLAGS += >$(PROJ_OBJ_DIR)/configure.out 2>&1 else - ConfigureScriptFLAGS := + ConfigureScriptFLAGS := endif # By default, strip symbol information from executable @@ -470,7 +470,7 @@ CPP.BaseFlags += -include llvm/System/Solaris.h endif -LD.Flags += -L$(LibDir) -L$(LLVMLibDir) +LD.Flags += -L$(LibDir) -L$(LLVMLibDir) CPP.BaseFlags += -D_GNU_SOURCE -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS # All -I flags should go here, so that they don't confuse llvm-config. CPP.Flags += $(sort -I$(PROJ_OBJ_DIR) -I$(PROJ_SRC_DIR) \ @@ -509,8 +509,8 @@ LTRelink = $(LIBTOOL) $(LibTool.Flags) --mode=link $(Relink) LTInstall = $(LIBTOOL) $(LibTool.Flags) --mode=install $(INSTALL) \ $(Install.Flags) -ProgInstall = $(INSTALL) $(Install.StripFlag) -m 0755 -ScriptInstall = $(INSTALL) -m 0755 +ProgInstall = $(INSTALL) $(Install.StripFlag) -m 0755 +ScriptInstall = $(INSTALL) -m 0755 DataInstall = $(INSTALL) -m 0644 # When compiling under Mingw/Cygwin, the tblgen tool expects Windows @@ -529,8 +529,8 @@ endif #---------------------------------------------------------- -# Get the list of source files and compute object file -# names from them. +# Get the list of source files and compute object file +# names from them. #---------------------------------------------------------- ifndef SOURCES @@ -538,7 +538,7 @@ $(PROJ_SRC_DIR)/*.cc $(PROJ_SRC_DIR)/*.c)) else Sources := $(SOURCES) -endif +endif ifdef BUILT_SOURCES Sources += $(filter %.cpp %.c %.cc,$(BUILT_SOURCES)) @@ -576,7 +576,7 @@ # Handle the DIRS options for sequential construction #--------------------------------------------------------- -SubDirs := +SubDirs := ifdef DIRS SubDirs += $(DIRS) @@ -703,8 +703,8 @@ #--------------------------------------------------------- # Define various command line options pertaining to the -# libraries needed when linking. There are "Proj" libs -# (defined by the user's project) and "LLVM" libs (defined +# libraries needed when linking. There are "Proj" libs +# (defined by the user's project) and "LLVM" libs (defined # by the LLVM project). #--------------------------------------------------------- @@ -792,7 +792,7 @@ install-module:: $(DestModule) install-local:: $(DestModule) -$(DestModule): $(ModuleDestDir) $(Module) +$(DestModule): $(ModuleDestDir) $(Module) $(Echo) Installing $(BuildMode) Bytecode Module $(DestModule) $(Verb) $(DataInstall) $(Module) $(DestModule) @@ -867,7 +867,7 @@ $(Verb) $(LTInstall) $(LibName.LA) $(DestSharedLib) $(Verb) $(LIBTOOL) --finish $(PROJ_libdir) -uninstall-local:: +uninstall-local:: $(Echo) Uninstalling $(BuildMode) Shared Library $(DestSharedLib) -$(Verb) $(RM) -f $(PROJ_libdir)/lib$(LIBRARYNAME).* endif @@ -876,7 +876,7 @@ #--------------------------------------------------------- # Bytecode Library Targets: # If the user asked for a bytecode library to be built -# with the BYTECODE_LIBRARY variable, then we provide +# with the BYTECODE_LIBRARY variable, then we provide # targets for building them. #--------------------------------------------------------- ifdef BYTECODE_LIBRARY @@ -929,7 +929,7 @@ else install-local:: $(DestBytecodeLib) -$(DestBytecodeLib): $(BytecodeDestDir) $(LibName.BCA) +$(DestBytecodeLib): $(BytecodeDestDir) $(LibName.BCA) $(Echo) Installing $(BuildMode) Bytecode Archive $(DestBytecodeLib) $(Verb) $(DataInstall) $(LibName.BCA) $(DestBytecodeLib) @@ -988,7 +988,7 @@ #--------------------------------------------------------- # Archive Library Targets: -# If the user wanted a regular archive library built, +# If the user wanted a regular archive library built, # then we provide targets for building them. #--------------------------------------------------------- ifdef BUILD_ARCHIVE @@ -1028,7 +1028,7 @@ endif # endif LIBRARYNAME -endif +endif ############################################################################### # Tool Build Rules: Build executable tool based on TOOLNAME option @@ -1066,7 +1066,7 @@ $(Verb) $(LTLink) -o $@ $(TOOLLINKOPTS) $(ObjectsO) $(ProjLibsOptions) \ $(LLVMLibsOptions) $(ExtraLibs) $(TOOLLINKOPTSB) $(LIBS) $(Echo) ======= Finished Linking $(BuildMode) Executable $(TOOLNAME) \ - $(StripWarnMsg) + $(StripWarnMsg) ifdef NO_INSTALL install-local:: @@ -1089,7 +1089,7 @@ endif ############################################################################### -# Object Build Rules: Build object files based on sources +# Object Build Rules: Build object files based on sources ############################################################################### # FIXME: This should be checking for "if not GCC or ICC", not for "if HP-UX" @@ -1146,7 +1146,7 @@ $< -o $@ -S -emit-llvm ; \ then $(MV) -f "$(ObjDir)/$*.BCCXXd" "$(ObjDir)/$*.d"; \ else $(RM) -f "$(ObjDir)/$*.BCCXXd"; exit 1; fi - $(call UPGRADE_MSG,$@) + $(call UPGRADE_MSG,$@) $(call UPGRADE_LL,$@) $(ObjDir)/%.ll: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGXX) @@ -1155,7 +1155,7 @@ $< -o $@ -S -emit-llvm ; \ then $(MV) -f "$(ObjDir)/$*.BCCXXd" "$(ObjDir)/$*.d"; \ else $(RM) -f "$(ObjDir)/$*.BCCXXd"; exit 1; fi - $(call UPGRADE_MSG,$@) + $(call UPGRADE_MSG,$@) $(call UPGRADE_LL,$@) $(ObjDir)/%.ll: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGCC) @@ -1164,7 +1164,7 @@ $< -o $@ -S -emit-llvm ; \ then $(MV) -f "$(ObjDir)/$*.BCCd" "$(ObjDir)/$*.d"; \ else $(RM) -f "$(ObjDir)/$*.BCCd"; exit 1; fi - $(call UPGRADE_MSG,$@) + $(call UPGRADE_MSG,$@) $(call UPGRADE_LL,$@) # Provide alternate rule sets if dependencies are disabled @@ -1172,32 +1172,32 @@ $(ObjDir)/%.lo $(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) $(Echo) "Compiling $*.cpp for $(BuildMode) build" $(PIC_FLAG) - $(MAYBE_PIC_Compile.CXX) $< -o $@ + $(MAYBE_PIC_Compile.CXX) $< -o $@ $(ObjDir)/%.lo $(ObjDir)/%.o: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(Echo) "Compiling $*.cc for $(BuildMode) build" $(PIC_FLAG) - $(MAYBE_PIC_Compile.CXX) $< -o $@ + $(MAYBE_PIC_Compile.CXX) $< -o $@ $(ObjDir)/%.lo $(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(Echo) "Compiling $*.c for $(BuildMode) build" $(PIC_FLAG) - $(MAYBE_PIC_Compile.C) $< -o $@ + $(MAYBE_PIC_Compile.C) $< -o $@ $(ObjDir)/%.ll: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGXX) $(Echo) "Compiling $*.cpp for $(BuildMode) build (bytecode)" $(BCCompile.CXX) $< -o $@ -S -emit-llvm - $(call UPGRADE_MSG,$@) + $(call UPGRADE_MSG,$@) $(call UPGRADE_LL,$@) $(ObjDir)/%.ll: %.cc $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGXX) $(Echo) "Compiling $*.cc for $(BuildMode) build (bytecode)" $(BCCompile.CXX) $< -o $@ -S -emit-llvm - $(call UPGRADE_MSG,$@) + $(call UPGRADE_MSG,$@) $(call UPGRADE_LL,$@) $(ObjDir)/%.ll: %.c $(ObjDir)/.dir $(BUILT_SOURCES) $(LLVMGCC) $(Echo) "Compiling $*.c for $(BuildMode) build (bytecode)" $(BCCompile.C) $< -o $@ -S -emit-llvm - $(call UPGRADE_MSG,@) + $(call UPGRADE_MSG,@) $(call UPGRADE_LL,@) endif @@ -1271,7 +1271,7 @@ # All of these files depend on tblgen and the .td files. $(INCTMPFiles) : $(TBLGEN) $(TDFiles) -# INCFiles rule: All of the tblgen generated files are emitted to +# INCFiles rule: All of the tblgen generated files are emitted to # $(ObjDir)/%.inc.tmp, instead of emitting them directly to %.inc. This allows # us to only "touch" the real file if the contents of it change. IOW, if # tblgen is modified, all of the .inc.tmp files are regenerated, but no @@ -1313,7 +1313,7 @@ $(TARGET:%=$(ObjDir)/%GenAsmWriter1.inc.tmp): \ $(ObjDir)/%GenAsmWriter1.inc.tmp : %.td $(ObjDir)/.dir $(Echo) "Building $( Author: brukman Date: Wed Jan 7 20:16:13 2009 New Revision: 61905 URL: http://llvm.org/viewvc/llvm-project?rev=61905&view=rev Log: Be sure to ignore the end-of-line character when considering trailing whitespace. Modified: llvm/trunk/utils/lint/common_lint.py Modified: llvm/trunk/utils/lint/common_lint.py URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lint/common_lint.py?rev=61905&r1=61904&r2=61905&view=diff ============================================================================== --- llvm/trunk/utils/lint/common_lint.py (original) +++ llvm/trunk/utils/lint/common_lint.py Wed Jan 7 20:16:13 2009 @@ -15,7 +15,7 @@ """ line_num = 1 for line in lines: - length = len(line.rstrip()) # strip off EOL char(s) + length = len(line.rstrip()) if length > max_length: print '%s:%d:Line exceeds %d chars (%d)' % (filename, line_num, max_length, length) @@ -32,7 +32,7 @@ trailing_whitespace_re = re.compile(r'\s+$') line_num = 1 for line in lines: - if trailing_whitespace_re.match(line): + if trailing_whitespace_re.match(line.rstrip()): print '%s:%d:Trailing whitespace' % (filename, line_num) line_num += 1 From brukman+llvm at gmail.com Wed Jan 7 20:17:30 2009 From: brukman+llvm at gmail.com (Misha Brukman) Date: Thu, 08 Jan 2009 02:17:30 -0000 Subject: [llvm-commits] [llvm] r61906 - /llvm/trunk/utils/vim/vimrc Message-ID: <200901080217.n082HUUG019692@zion.cs.uiuc.edu> Author: brukman Date: Wed Jan 7 20:17:30 2009 New Revision: 61906 URL: http://llvm.org/viewvc/llvm-project?rev=61906&view=rev Log: Use VIM's built-in shorthand for whitespace in regex. Modified: llvm/trunk/utils/vim/vimrc Modified: llvm/trunk/utils/vim/vimrc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/vim/vimrc?rev=61906&r1=61905&r2=61906&view=diff ============================================================================== --- llvm/trunk/utils/vim/vimrc (original) +++ llvm/trunk/utils/vim/vimrc Wed Jan 7 20:17:30 2009 @@ -50,7 +50,7 @@ " Useful macros for cleaning up code to conform to LLVM coding guidelines " Delete trailing whitespace and tabs at the end of each line -command! DeleteTrailingWs :%s/[\ \t]\+$// +command! DeleteTrailingWs :%s/\s\+$// " Convert all tab characters to two spaces command! Untab :%s/\t/ /g From brukman+llvm at gmail.com Wed Jan 7 20:21:23 2009 From: brukman+llvm at gmail.com (Misha Brukman) Date: Thu, 08 Jan 2009 02:21:23 -0000 Subject: [llvm-commits] [llvm] r61907 - /llvm/trunk/include/llvm/ADT/ilist.h Message-ID: <200901080221.n082LN0d019817@zion.cs.uiuc.edu> Author: brukman Date: Wed Jan 7 20:21:23 2009 New Revision: 61907 URL: http://llvm.org/viewvc/llvm-project?rev=61907&view=rev Log: * Fixed spelling of "sentinel" * Removed trailing whitespace Modified: llvm/trunk/include/llvm/ADT/ilist.h Modified: llvm/trunk/include/llvm/ADT/ilist.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/ilist.h?rev=61907&r1=61906&r2=61907&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/ilist.h (original) +++ llvm/trunk/include/llvm/ADT/ilist.h Wed Jan 7 20:21:23 2009 @@ -1,10 +1,10 @@ //==-- llvm/ADT/ilist.h - Intrusive Linked List Template ---------*- C++ -*-==// -// +// // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. -// +// //===----------------------------------------------------------------------===// // // This file defines classes to implement an intrusive doubly linked list class @@ -101,7 +101,7 @@ template class ilist_iterator : public bidirectional_iterator { - + public: typedef ilist_traits Traits; typedef bidirectional_iterator super; @@ -232,14 +232,14 @@ template struct simplify_type > { typedef NodeTy* SimpleType; - + static SimpleType getSimplifiedValue(const ilist_iterator &Node) { return &*Node; } }; template struct simplify_type > { typedef NodeTy* SimpleType; - + static SimpleType getSimplifiedValue(const ilist_iterator &Node) { return &*Node; } @@ -257,16 +257,16 @@ /// 1. The list may be completely unconstructed. In this case, the head /// pointer is null. When in this form, any query for an iterator (e.g. /// begin() or end()) causes the list to transparently change to state #2. -/// 2. The list may be empty, but contain a sentinal for the end iterator. This -/// sentinal is created by the Traits::createSentinel method and is a link +/// 2. The list may be empty, but contain a sentinel for the end iterator. This +/// sentinel is created by the Traits::createSentinel method and is a link /// in the list. When the list is empty, the pointer in the iplist points -/// to the sentinal. Once the sentinal is constructed, it +/// to the sentinel. Once the sentinel is constructed, it /// is not destroyed until the list is. /// 3. The list may contain actual objects in it, which are stored as a doubly /// linked list of nodes. One invariant of the list is that the predecessor /// of the first node in the list always points to the last node in the list, -/// and the successor pointer for the sentinal (which always stays at the -/// end of the list) is always null. +/// and the successor pointer for the sentinel (which always stays at the +/// end of the list) is always null. /// template > class iplist : public Traits { @@ -279,10 +279,10 @@ NodeTy *getTail() { return this->getPrev(Head); } const NodeTy *getTail() const { return this->getPrev(Head); } void setTail(NodeTy *N) const { this->setPrev(Head, N); } - - /// CreateLazySentinal - This method verifies whether the sentinal for the + + /// CreateLazySentinel - This method verifies whether the sentinel for the /// list has been created and lazily makes it if not. - void CreateLazySentinal() const { + void CreateLazySentinel() const { if (Head != 0) return; Head = Traits::createSentinel(); this->setNext(Head, 0); @@ -319,19 +319,19 @@ // Iterator creation methods. iterator begin() { - CreateLazySentinal(); - return iterator(Head); + CreateLazySentinel(); + return iterator(Head); } const_iterator begin() const { - CreateLazySentinal(); + CreateLazySentinel(); return const_iterator(Head); } iterator end() { - CreateLazySentinal(); + CreateLazySentinel(); return iterator(getTail()); } const_iterator end() const { - CreateLazySentinal(); + CreateLazySentinel(); return const_iterator(getTail()); } @@ -397,7 +397,7 @@ this->setPrev(NextNode, PrevNode); IT = NextNode; removeNodeFromList(Node); // Notify traits that we removed a node... - + // Set the next/prev pointers of the current node to null. This isn't // strictly required, but this catches errors where a node is removed from // an ilist (and potentially deleted) with iterators still pointing at it. @@ -461,7 +461,7 @@ transferNodesFromList(L2, First, PosNext); - // Now that everything is set, restore the pointers to the list sentinals. + // Now that everything is set, restore the pointers to the list sentinels. L2.setTail(L2Sentinel); setTail(ThisSentinel); } @@ -474,7 +474,7 @@ // size_type size() const { - if (Head == 0) return 0; // Don't require construction of sentinal if empty. + if (Head == 0) return 0; // Don't require construction of sentinel if empty. #if __GNUC__ == 2 // GCC 2.95 has a broken std::distance size_type Result = 0; @@ -592,7 +592,7 @@ } explicit ilist(size_type count) { insert(this->begin(), count, NodeTy()); - } + } ilist(size_type count, const NodeTy &val) { insert(this->begin(), count, val); } @@ -607,7 +607,7 @@ iterator insert(iterator a, NodeTy *b){ return iplist::insert(a, b); } void push_front(NodeTy *a) { iplist::push_front(a); } void push_back(NodeTy *a) { iplist::push_back(a); } - + // Main implementation here - Insert for a node passed by value... iterator insert(iterator where, const NodeTy &val) { From dpatel at apple.com Wed Jan 7 20:33:41 2009 From: dpatel at apple.com (Devang Patel) Date: Thu, 08 Jan 2009 02:33:41 -0000 Subject: [llvm-commits] [llvm] r61908 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901080233.n082XfDo020155@zion.cs.uiuc.edu> Author: dpatel Date: Wed Jan 7 20:33:41 2009 New Revision: 61908 URL: http://llvm.org/viewvc/llvm-project?rev=61908&view=rev Log: Add APIs to manage scope using DebugInfo interface. This is a shameless copy of similar APIs from MachineModuleInfo. The copy from MMI will be deleted in near future. Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61908&r1=61907&r2=61908&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Wed Jan 7 20:33:41 2009 @@ -1193,6 +1193,60 @@ }; //===----------------------------------------------------------------------===// +/// DbgVariable - This class is used to track local variable information. +/// +class DbgVariable { +private: + DIVariable *Var; // Variable Descriptor. + unsigned FrameIndex; // Variable frame index. + +public: + DbgVariable(DIVariable *V, unsigned I) : Var(V), FrameIndex(I) {} + + // Accessors. + DIVariable *getVariable() const { return Var; } + unsigned getFrameIndex() const { return FrameIndex; } +}; + +//===----------------------------------------------------------------------===// +/// DbgScope - This class is used to track scope information. +/// +class DbgScope { +private: + DbgScope *Parent; // Parent to this scope. + DIDescriptor *Desc; // Debug info descriptor for scope. + // Either subprogram or block. + unsigned StartLabelID; // Label ID of the beginning of scope. + unsigned EndLabelID; // Label ID of the end of scope. + SmallVector Scopes; // Scopes defined in scope. + SmallVector Variables;// Variables declared in scope. + +public: + DbgScope(DbgScope *P, DIDescriptor *D) + : Parent(P), Desc(D), StartLabelID(0), EndLabelID(0), Scopes(), Variables() + {} + ~DbgScope(); + + // Accessors. + DbgScope *getParent() const { return Parent; } + DIDescriptor *getDesc() const { return Desc; } + unsigned getStartLabelID() const { return StartLabelID; } + unsigned getEndLabelID() const { return EndLabelID; } + SmallVector &getScopes() { return Scopes; } + SmallVector &getVariables() { return Variables; } + void setStartLabelID(unsigned S) { StartLabelID = S; } + void setEndLabelID(unsigned E) { EndLabelID = E; } + + /// AddScope - Add a scope to the scope. + /// + void AddScope(DbgScope *S) { Scopes.push_back(S); } + + /// AddVariable - Add a variable to the scope. + /// + void AddVariable(DbgVariable *V) { Variables.push_back(V); } +}; + +//===----------------------------------------------------------------------===// /// DwarfDebug - Emits Dwarf debug directives. /// class DwarfDebug : public Dwarf { @@ -1253,6 +1307,44 @@ /// bool shouldEmit; + // RootScope - Top level scope for the current function. + // + DbgScope *RootDbgScope; + + // DbgScopeMap - Tracks the scopes in the current function. + DenseMap DbgScopeMap; + + // DbgLabelIDList - One entry per assigned label. Normally the entry is equal to + // the list index(+1). If the entry is zero then the label has been deleted. + // Any other value indicates the label has been deleted by is mapped to + // another label. + SmallVector DbgLabelIDList; + + /// NextLabelID - Return the next unique label id. + /// + unsigned NextLabelID() { + unsigned ID = (unsigned)DbgLabelIDList.size() + 1; + DbgLabelIDList.push_back(ID); + return ID; + } + + /// RemapLabel - Indicate that a label has been merged into another. + /// + void RemapLabel(unsigned OldLabelID, unsigned NewLabelID) { + assert(0 < OldLabelID && OldLabelID <= DbgLabelIDList.size() && + "Old label ID out of range."); + assert(NewLabelID <= DbgLabelIDList.size() && + "New label ID out of range."); + DbgLabelIDList[OldLabelID - 1] = NewLabelID; + } + + /// MappedLabel - Find out the label's final ID. Zero indicates deletion. + /// ID != Mapped ID indicates that the label was folded into another label. + unsigned MappedLabel(unsigned LabelID) const { + assert(LabelID <= DbgLabelIDList.size() && "Debug label ID out of range."); + return LabelID ? DbgLabelIDList[LabelID - 1] : 0; + } + struct FunctionDebugFrameInfo { unsigned Number; std::vector Moves; @@ -1494,6 +1586,25 @@ /// AddSourceLine - Add location information to specified debug information /// entry. + void AddSourceLine(DIE *Die, DIVariable *V) { + unsigned FileID = 0; + unsigned Line = V->getLineNumber(); + if (V->getVersion() < DIDescriptor::Version7) { + // Version6 or earlier. Use compile unit info to get file id. + CompileUnit *Unit = FindCompileUnit(V->getCompileUnit()); + FileID = Unit->getID(); + } else { + // Version7 or newer, use filename and directory info from DIVariable + // directly. + unsigned DID = Directories.idFor(V->getDirectory()); + FileID = SrcFiles.idFor(SrcFileInfo(DID, V->getFilename())); + } + AddUInt(Die, DW_AT_decl_file, 0, FileID); + AddUInt(Die, DW_AT_decl_line, 0, Line); + } + + /// AddSourceLine - Add location information to specified debug information + /// entry. void AddSourceLine(DIE *Die, DIGlobal *G) { unsigned FileID = 0; unsigned Line = G->getLineNumber(); @@ -2393,6 +2504,191 @@ return VariableDie; } + /// NewScopeVariable - Create a new scope variable. + /// + DIE *NewDbgScopeVariable(DbgVariable *DV, CompileUnit *Unit) { + // Get the descriptor. + DIVariable *VD = DV->getVariable(); + + // Translate tag to proper Dwarf tag. The result variable is dropped for + // now. + unsigned Tag; + switch (VD->getTag()) { + case DW_TAG_return_variable: return NULL; + case DW_TAG_arg_variable: Tag = DW_TAG_formal_parameter; break; + case DW_TAG_auto_variable: // fall thru + default: Tag = DW_TAG_variable; break; + } + + // Define variable debug information entry. + DIE *VariableDie = new DIE(Tag); + AddString(VariableDie, DW_AT_name, DW_FORM_string, VD->getName()); + + // Add source line info if available. + AddSourceLine(VariableDie, VD); + + // Add variable type. + AddType(Unit, VariableDie, VD->getType()); + + // Add variable address. + MachineLocation Location; + Location.set(RI->getFrameRegister(*MF), + RI->getFrameIndexOffset(*MF, DV->getFrameIndex())); + AddAddress(VariableDie, DW_AT_location, Location); + + return VariableDie; + } + + + /// getOrCreateScope - Returns the scope associated with the given descriptor. + /// + DbgScope *getOrCreateScope(GlobalVariable *V) { + DbgScope *&Slot = DbgScopeMap[V]; + if (!Slot) { + // FIXME - breaks down when the context is an inlined function. + DIDescriptor ParentDesc; + DIBlock *DB = new DIBlock(V); + if (DIBlock *Block = dyn_cast(DB)) { + ParentDesc = Block->getContext(); + } + DbgScope *Parent = ParentDesc.isNull() ? + getOrCreateScope(ParentDesc.getGV()) : NULL; + Slot = new DbgScope(Parent, DB); + if (Parent) { + Parent->AddScope(Slot); + } else if (RootDbgScope) { + // FIXME - Add inlined function scopes to the root so we can delete + // them later. Long term, handle inlined functions properly. + RootDbgScope->AddScope(Slot); + } else { + // First function is top level function. + RootDbgScope = Slot; + } + } + return Slot; + } + + /// ConstructDbgScope - Construct the components of a scope. + /// + void ConstructDbgScope(DbgScope *ParentScope, + unsigned ParentStartID, unsigned ParentEndID, + DIE *ParentDie, CompileUnit *Unit) { + // Add variables to scope. + SmallVector &Variables = ParentScope->getVariables(); + for (unsigned i = 0, N = Variables.size(); i < N; ++i) { + DIE *VariableDie = NewDbgScopeVariable(Variables[i], Unit); + if (VariableDie) ParentDie->AddChild(VariableDie); + } + + // Add nested scopes. + SmallVector &Scopes = ParentScope->getScopes(); + for (unsigned j = 0, M = Scopes.size(); j < M; ++j) { + // Define the Scope debug information entry. + DbgScope *Scope = Scopes[j]; + // FIXME - Ignore inlined functions for the time being. + if (!Scope->getParent()) continue; + + unsigned StartID = MappedLabel(Scope->getStartLabelID()); + unsigned EndID = MappedLabel(Scope->getEndLabelID()); + + // Ignore empty scopes. + if (StartID == EndID && StartID != 0) continue; + if (Scope->getScopes().empty() && Scope->getVariables().empty()) continue; + + if (StartID == ParentStartID && EndID == ParentEndID) { + // Just add stuff to the parent scope. + ConstructDbgScope(Scope, ParentStartID, ParentEndID, ParentDie, Unit); + } else { + DIE *ScopeDie = new DIE(DW_TAG_lexical_block); + + // Add the scope bounds. + if (StartID) { + AddLabel(ScopeDie, DW_AT_low_pc, DW_FORM_addr, + DWLabel("label", StartID)); + } else { + AddLabel(ScopeDie, DW_AT_low_pc, DW_FORM_addr, + DWLabel("func_begin", SubprogramCount)); + } + if (EndID) { + AddLabel(ScopeDie, DW_AT_high_pc, DW_FORM_addr, + DWLabel("label", EndID)); + } else { + AddLabel(ScopeDie, DW_AT_high_pc, DW_FORM_addr, + DWLabel("func_end", SubprogramCount)); + } + + // Add the scope contents. + ConstructDbgScope(Scope, StartID, EndID, ScopeDie, Unit); + ParentDie->AddChild(ScopeDie); + } + } + } + + /// ConstructRootDbgScope - Construct the scope for the subprogram. + /// + void ConstructRootDbgScope(DbgScope *RootScope) { + // Exit if there is no root scope. + if (!RootScope) return; + + // Get the subprogram debug information entry. + DISubprogram *SPD = cast(RootScope->getDesc()); + + // Get the compile unit context. + CompileUnit *Unit = FindCompileUnit(SPD->getCompileUnit()); + + // Get the subprogram die. + DIE *SPDie = Unit->getDieMapSlotFor(SPD->getGV()); + assert(SPDie && "Missing subprogram descriptor"); + + // Add the function bounds. + AddLabel(SPDie, DW_AT_low_pc, DW_FORM_addr, + DWLabel("func_begin", SubprogramCount)); + AddLabel(SPDie, DW_AT_high_pc, DW_FORM_addr, + DWLabel("func_end", SubprogramCount)); + MachineLocation Location(RI->getFrameRegister(*MF)); + AddAddress(SPDie, DW_AT_frame_base, Location); + + ConstructDbgScope(RootScope, 0, 0, SPDie, Unit); + } + + /// ConstructDefaultDbgScope - Construct a default scope for the subprogram. + /// + void ConstructDefaultDbgScope(MachineFunction *MF) { + // Find the correct subprogram descriptor. + std::string SPName = "llvm.dbg.subprograms"; + std::vector Result; + getGlobalVariablesUsing(*M, SPName, Result); + for (std::vector::iterator I = Result.begin(), + E = Result.end(); I != E; ++I) { + + DISubprogram *SPD = new DISubprogram(*I); + + if (SPD->getName() == MF->getFunction()->getName()) { + // Get the compile unit context. + CompileUnit *Unit = FindCompileUnit(SPD->getCompileUnit()); + + // Get the subprogram die. + DIE *SPDie = Unit->getDieMapSlotFor(SPD->getGV()); + assert(SPDie && "Missing subprogram descriptor"); + + // Add the function bounds. + AddLabel(SPDie, DW_AT_low_pc, DW_FORM_addr, + DWLabel("func_begin", SubprogramCount)); + AddLabel(SPDie, DW_AT_high_pc, DW_FORM_addr, + DWLabel("func_end", SubprogramCount)); + + MachineLocation Location(RI->getFrameRegister(*MF)); + AddAddress(SPDie, DW_AT_frame_base, Location); + return; + } + } +#if 0 + // FIXME: This is causing an abort because C++ mangled names are compared + // with their unmangled counterparts. See PR2885. Don't do this assert. + assert(0 && "Couldn't find DIE for machine function!"); +#endif + } + /// ConstructScope - Construct the components of a scope. /// void ConstructScope(DebugScope *ParentScope, @@ -3282,6 +3578,7 @@ , SectionSourceLines() , didInitial(false) , shouldEmit(false) + , RootDbgScope(NULL) { } virtual ~DwarfDebug() { From dpatel at apple.com Wed Jan 7 20:49:35 2009 From: dpatel at apple.com (Devang Patel) Date: Thu, 08 Jan 2009 02:49:35 -0000 Subject: [llvm-commits] [llvm] r61912 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901080249.n082nZPu020599@zion.cs.uiuc.edu> Author: dpatel Date: Wed Jan 7 20:49:34 2009 New Revision: 61912 URL: http://llvm.org/viewvc/llvm-project?rev=61912&view=rev Log: Add APIs to record regions and variables. Again, shamelessly copied from MMI. Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61912&r1=61911&r2=61912&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Wed Jan 7 20:49:34 2009 @@ -2540,6 +2540,33 @@ } + /// RecordRegionStart - Indicate the start of a region. + /// + unsigned RecordRegionStart(GlobalVariable *V) { + DbgScope *Scope = getOrCreateScope(V); + unsigned ID = NextLabelID(); + if (!Scope->getStartLabelID()) Scope->setStartLabelID(ID); + return ID; + } + + /// RecordRegionEnd - Indicate the end of a region. + /// + unsigned RecordRegionEnd(GlobalVariable *V) { + DbgScope *Scope = getOrCreateScope(V); + unsigned ID = NextLabelID(); + Scope->setEndLabelID(ID); + return ID; + } + + /// RecordVariable - Indicate the declaration of a local variable. + /// + void RecordVariable(GlobalVariable *GV, unsigned FrameIndex) { + DbgScope *Scope = getOrCreateScope(GV); + DIVariable *VD = new DIVariable(GV); + DbgVariable *DV = new DbgVariable(VD, FrameIndex); + Scope->AddVariable(DV); + } + /// getOrCreateScope - Returns the scope associated with the given descriptor. /// DbgScope *getOrCreateScope(GlobalVariable *V) { From isanbard at gmail.com Wed Jan 7 21:22:22 2009 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 7 Jan 2009 19:22:22 -0800 Subject: [llvm-commits] [PATCH] Unit tests for StringMap In-Reply-To: References: Message-ID: <5C026C26-4FF7-4345-AF83-912E51FCBE4D@gmail.com> On Jan 7, 2009, at 12:33 PM, Talin wrote: > Here's StringMapTest, and some minor cleanup of DenseMapTest. Oh, > and I found a bug in StringMap during the process of writing the > tests, the fix is also included. > Yay! Please go ahead and commit the fix. > Some notes: > ? I could not get StringMapEntryInitializer to compile, so those > tests are disabled. Even more puzzling is that I could not find any > code that uses StringMapEntryInitializer (I was hoping to find an > example as to how to do the explicit specialization.) What's the error you're getting during compilation? > ? I was very surprised that the default implementation of > StringMapEntryInitializer is empty (no action) instead of a generic > assignment - it means that insert() basically doesn't work, as the > value never gets copied to the StringMapEntry. > That is kind of odd that it's not assigned the initial value as a default. But I don't think that "insert()" would not work because of it. It looks to be for initialization only. -bw From brukman at gmail.com Wed Jan 7 22:46:07 2009 From: brukman at gmail.com (Misha Brukman) Date: Wed, 7 Jan 2009 23:46:07 -0500 Subject: [llvm-commits] [llvm] r61609 - /llvm/trunk/unittests/ADT/ImmutableSetTest.cpp In-Reply-To: <200901031455.n03EtS9j011075@zion.cs.uiuc.edu> References: <200901031455.n03EtS9j011075@zion.cs.uiuc.edu> Message-ID: 2009/1/3 Nuno Lopes > Author: nlopes > Date: Sat Jan 3 08:55:26 2009 > New Revision: 61609 > > URL: http://llvm.org/viewvc/llvm-project?rev=61609&view=rev > Log: > improve test and address Misha's comments > Thanks, Nuno, looks much better. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090107/daf9cc83/attachment.html From clattner at apple.com Wed Jan 7 22:47:38 2009 From: clattner at apple.com (Chris Lattner) Date: Wed, 7 Jan 2009 20:47:38 -0800 Subject: [llvm-commits] [llvm] r61834 - in /llvm/trunk: include/llvm/DerivedTypes.h include/llvm/Intrinsics.td lib/VMCore/Verifier.cpp utils/TableGen/CodeGenTarget.cpp utils/TableGen/IntrinsicEmitter.cpp In-Reply-To: <87BD0285-4D2C-45F8-98D8-10FF580A4994@apple.com> References: <200901070009.n07091oG024927@zion.cs.uiuc.edu> <583D02A1-8D62-4456-A85E-7918A73CA69F@apple.com> <87BD0285-4D2C-45F8-98D8-10FF580A4994@apple.com> Message-ID: <3A8B3D7B-9B4F-4D6E-99BB-5E63778B9F91@apple.com> On Jan 7, 2009, at 3:44 PM, Bob Wilson wrote: > > On Jan 6, 2009, at 5:13 PM, Chris Lattner wrote: >> >> On Jan 6, 2009, at 4:09 PM, Bob Wilson wrote: >>> + /// VectorType::getTruncatedElementVectorType - This static >>> method is like >>> + /// getInteger except that the element types are half as wide as >>> the >>> + /// elements in the input type. >>> + /// >>> + static VectorType *getTruncatedElementVectorType(const VectorType >>> *VTy) { >>> + unsigned EltBits = VTy->getElementType()- >>>> getPrimitiveSizeInBits(); >>> + const Type *EltTy = IntegerType::get(EltBits / 2); >>> + return VectorType::get(EltTy, VTy->getNumElements()); >>> + } >> >> Should this assert that EltBits is a multiple of 2? It would be nice >> for tblgen to reject cases where the size was not a multiple of two >> also. > > I've added the assertion. > > TableGen can't check the vector element sizes since it never sees the > specific types. It only sees the overloaded "iAny" types. Instead, I > added a check in the verifier to make sure that vector elements with > an odd bit-width don't get "truncated". Let me know if that doesn't > address your concern. Thanks! Seems reasonable to me, -Chris From brukman+llvm at gmail.com Wed Jan 7 22:48:20 2009 From: brukman+llvm at gmail.com (Misha Brukman) Date: Thu, 08 Jan 2009 04:48:20 -0000 Subject: [llvm-commits] [llvm] r61914 - in /llvm/trunk: include/llvm/ADT/StringMap.h unittests/ADT/StringMapTest.cpp Message-ID: <200901080448.n084mKhq023898@zion.cs.uiuc.edu> Author: brukman Date: Wed Jan 7 22:48:20 2009 New Revision: 61914 URL: http://llvm.org/viewvc/llvm-project?rev=61914&view=rev Log: * Added unittests for StringMap * Fixed but in StringMap::clear() * Removed trailing whitespace Original patch by Talin. Added: llvm/trunk/unittests/ADT/StringMapTest.cpp Modified: llvm/trunk/include/llvm/ADT/StringMap.h Modified: llvm/trunk/include/llvm/ADT/StringMap.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/StringMap.h?rev=61914&r1=61913&r2=61914&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/StringMap.h (original) +++ llvm/trunk/include/llvm/ADT/StringMap.h Wed Jan 7 22:48:20 2009 @@ -336,7 +336,7 @@ // clear - Empties out the StringMap void clear() { if (empty()) return; - + // Zap all values, resetting the keys back to non-present (not tombstone), // which is safe because we're removing all elements. for (ItemBucket *I = TheTable, *E = TheTable+NumBuckets; I != E; ++I) { @@ -345,6 +345,8 @@ I->Item = 0; } } + + NumItems = 0; } /// GetOrCreateValue - Look up the specified key in the table. If a value @@ -421,7 +423,7 @@ StringMapImpl::ItemBucket *Ptr; public: typedef StringMapEntry value_type; - + explicit StringMapConstIterator(StringMapImpl::ItemBucket *Bucket, bool NoAdvance = false) : Ptr(Bucket) { Added: llvm/trunk/unittests/ADT/StringMapTest.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/StringMapTest.cpp?rev=61914&view=auto ============================================================================== --- llvm/trunk/unittests/ADT/StringMapTest.cpp (added) +++ llvm/trunk/unittests/ADT/StringMapTest.cpp Wed Jan 7 22:48:20 2009 @@ -0,0 +1,189 @@ +//===- llvm/unittest/ADT/StringMapMap.cpp - StringMap unit tests -*- C++ -*-===// +// +// 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/StringMap.h" +using namespace llvm; + +namespace { + +// Test fixture +class StringMapTest : public testing::Test { +protected: + StringMap testMap; + + static const char testKey[]; + static const uint32_t testValue; + static const char* testKeyFirst; + static const char* testKeyLast; + static const std::string testKeyStr; + + void assertEmptyMap() { + // Size tests + EXPECT_EQ(0u, testMap.size()); + EXPECT_TRUE(testMap.empty()); + + // Iterator tests + EXPECT_TRUE(testMap.begin() == testMap.end()); + + // Lookup tests + EXPECT_EQ(0u, testMap.count(testKey)); + EXPECT_EQ(0u, testMap.count(testKeyFirst, testKeyLast)); + EXPECT_EQ(0u, testMap.count(testKeyStr)); + EXPECT_TRUE(testMap.find(testKey) == testMap.end()); + EXPECT_TRUE(testMap.find(testKeyFirst, testKeyLast) == testMap.end()); + EXPECT_TRUE(testMap.find(testKeyStr) == testMap.end()); + } + + void assertSingleItemMap() { + // Size tests + EXPECT_EQ(1u, testMap.size()); + EXPECT_FALSE(testMap.begin() == testMap.end()); + EXPECT_FALSE(testMap.empty()); + + // Iterator tests + StringMap::iterator it = testMap.begin(); + EXPECT_STREQ(testKey, it->first()); + EXPECT_EQ(testValue, it->second); + ++it; + EXPECT_TRUE(it == testMap.end()); + + // Lookup tests + EXPECT_EQ(1u, testMap.count(testKey)); + EXPECT_EQ(1u, testMap.count(testKeyFirst, testKeyLast)); + EXPECT_EQ(1u, testMap.count(testKeyStr)); + EXPECT_TRUE(testMap.find(testKey) == testMap.begin()); + EXPECT_TRUE(testMap.find(testKeyFirst, testKeyLast) == testMap.begin()); + EXPECT_TRUE(testMap.find(testKeyStr) == testMap.begin()); + } +}; + +const char StringMapTest::testKey[] = "key"; +const uint32_t StringMapTest::testValue = 1u; +const char* StringMapTest::testKeyFirst = testKey; +const char* StringMapTest::testKeyLast = testKey + sizeof(testKey) - 1; +const std::string StringMapTest::testKeyStr(testKey); + +// Empty map tests +TEST_F(StringMapTest, EmptyMapTest) { + SCOPED_TRACE("EmptyMapTest"); + assertEmptyMap(); +} + +// Constant map tests +TEST_F(StringMapTest, ConstEmptyMapTest) { + const StringMap& constTestMap = testMap; + + // Size tests + EXPECT_EQ(0u, constTestMap.size()); + EXPECT_TRUE(constTestMap.empty()); + + // Iterator tests + EXPECT_TRUE(constTestMap.begin() == constTestMap.end()); + + // Lookup tests + EXPECT_EQ(0u, constTestMap.count(testKey)); + EXPECT_EQ(0u, constTestMap.count(testKeyFirst, testKeyLast)); + EXPECT_EQ(0u, constTestMap.count(testKeyStr)); + EXPECT_TRUE(constTestMap.find(testKey) == constTestMap.end()); + EXPECT_TRUE(constTestMap.find(testKeyFirst, testKeyLast) == + constTestMap.end()); + EXPECT_TRUE(constTestMap.find(testKeyStr) == constTestMap.end()); +} + +// A map with a single entry +TEST_F(StringMapTest, SingleEntryMapTest) { + SCOPED_TRACE("SingleEntryMapTest"); + testMap[testKey] = testValue; + assertSingleItemMap(); +} + +// Test clear() method +TEST_F(StringMapTest, ClearTest) { + SCOPED_TRACE("ClearTest"); + testMap[testKey] = testValue; + testMap.clear(); + assertEmptyMap(); +} + +// Test erase(iterator) method +TEST_F(StringMapTest, EraseIteratorTest) { + SCOPED_TRACE("EraseIteratorTest"); + testMap[testKey] = testValue; + testMap.erase(testMap.begin()); + assertEmptyMap(); +} + +// Test erase(value) method +TEST_F(StringMapTest, EraseValueTest) { + SCOPED_TRACE("EraseValueTest"); + testMap[testKey] = testValue; + testMap.erase(testKey); + assertEmptyMap(); +} + +// Test inserting two values and erasing one +TEST_F(StringMapTest, InsertAndEraseTest) { + SCOPED_TRACE("InsertAndEraseTest"); + testMap[testKey] = testValue; + testMap["otherKey"] = 2; + testMap.erase("otherKey"); + assertSingleItemMap(); +} + +// Test StringMapEntry::Create() method. +// DISABLED because this fails without a StringMapEntryInitializer, and +// I can't get it to compile with one. +TEST_F(StringMapTest, DISABLED_StringMapEntryTest) { + StringMap::value_type* entry = + StringMap::value_type::Create( + testKeyFirst, testKeyLast, 1u); + EXPECT_STREQ(testKey, entry->first()); + EXPECT_EQ(1u, entry->second); +} + +// Test insert() method +// DISABLED because this fails without a StringMapEntryInitializer, and +// I can't get it to compile with one. +TEST_F(StringMapTest, DISABLED_InsertTest) { + SCOPED_TRACE("InsertTest"); + testMap.insert( + StringMap::value_type::Create( + testKeyFirst, testKeyLast, testMap.getAllocator(), 1u)); + assertSingleItemMap(); +} + +// A more complex iteration test +TEST_F(StringMapTest, IterationTest) { + bool visited[100]; + + // Insert 100 numbers into the map + for (int i = 0; i < 100; ++i) { + std::stringstream ss; + ss << "key_" << i; + testMap[ss.str()] = i; + visited[i] = false; + } + + // Iterate over all numbers and mark each one found. + for (StringMap::iterator it = testMap.begin(); + it != testMap.end(); ++it) { + std::stringstream ss; + ss << "key_" << it->second; + ASSERT_STREQ(ss.str().c_str(), it->first()); + visited[it->second] = true; + } + + // Ensure every number was visited. + for (int i = 0; i < 100; ++i) { + ASSERT_TRUE(visited[i]) << "Entry #" << i << " was never visited"; + } +} + +} From brukman at gmail.com Wed Jan 7 22:49:34 2009 From: brukman at gmail.com (Misha Brukman) Date: Wed, 7 Jan 2009 23:49:34 -0500 Subject: [llvm-commits] [PATCH] Unit tests for StringMap In-Reply-To: <5C026C26-4FF7-4345-AF83-912E51FCBE4D@gmail.com> References: <5C026C26-4FF7-4345-AF83-912E51FCBE4D@gmail.com> Message-ID: 2009/1/7 Bill Wendling > On Jan 7, 2009, at 12:33 PM, Talin wrote: > > > Here's StringMapTest, and some minor cleanup of DenseMapTest. Oh, > > and I found a bug in StringMap during the process of writing the > > tests, the fix is also included. > > > Yay! Please go ahead and commit the fix. > Committed both DenseMapTest cleanup and StringMapTest (and bug fix). Thanks, Talin! -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090107/e5ff89fd/attachment.html From sabre at nondot.org Wed Jan 7 23:42:06 2009 From: sabre at nondot.org (Chris Lattner) Date: Thu, 08 Jan 2009 05:42:06 -0000 Subject: [llvm-commits] [llvm] r61915 - in /llvm/trunk: lib/Transforms/Scalar/ScalarReplAggregates.cpp test/Transforms/ScalarRepl/copy-aggregate.ll Message-ID: <200901080542.n085g6cx025501@zion.cs.uiuc.edu> Author: lattner Date: Wed Jan 7 23:42:05 2009 New Revision: 61915 URL: http://llvm.org/viewvc/llvm-project?rev=61915&view=rev Log: This implements the second half of the fix for PR3290, handling loads from allocas that cover the entire aggregate. This handles some memcpy/byval cases that are produced by llvm-gcc. This triggers a few times in kc++ (with std::pair,bool>) and once in 176.gcc (with %struct..0anon). Modified: llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp llvm/trunk/test/Transforms/ScalarRepl/copy-aggregate.ll Modified: llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp?rev=61915&r1=61914&r2=61915&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Wed Jan 7 23:42:05 2009 @@ -122,6 +122,8 @@ SmallVector &NewElts); void RewriteStoreUserOfWholeAlloca(StoreInst *SI, AllocationInst *AI, SmallVector &NewElts); + void RewriteLoadUserOfWholeAlloca(LoadInst *LI, AllocationInst *AI, + SmallVector &NewElts); const Type *CanConvertToScalar(Value *V, bool &IsNotTrivial); void ConvertToScalar(AllocationInst *AI, const Type *Ty); @@ -599,6 +601,18 @@ continue; } return MarkUnsafe(Info); + } else if (LoadInst *LI = dyn_cast(UI)) { + // If loading the entire alloca in one chunk through a bitcasted pointer + // to integer, we can transform it. This happens (for example) when you + // cast a {i32,i32}* to i64* and load through it. This is similar to the + // memcpy case and occurs in various "byval" cases and emulated memcpys. + if (isa(LI->getType()) && + TD->getABITypeSize(LI->getType()) == + TD->getABITypeSize(AI->getType()->getElementType())) { + Info.isMemCpySrc = true; + continue; + } + return MarkUnsafe(Info); } else { return MarkUnsafe(Info); } @@ -628,15 +642,21 @@ } if (StoreInst *SI = dyn_cast(User)) { - // This must be a store of the entire alloca from an integer. + // If this is a store of the entire alloca from an integer, rewrite it. RewriteStoreUserOfWholeAlloca(SI, AI, NewElts); continue; } + + if (LoadInst *LI = dyn_cast(User)) { + // If this is a load of the entire alloca to an integer, rewrite it. + RewriteLoadUserOfWholeAlloca(LI, AI, NewElts); + continue; + } // Otherwise it must be some other user of a gep of the first pointer. Just // leave these alone. continue; - } + } } /// RewriteMemIntrinUserOfAlloca - MI is a memcpy/memset/memmove from or to AI. @@ -902,6 +922,83 @@ SI->eraseFromParent(); } +/// RewriteLoadUserOfWholeAlloca - We found an load of the entire allocation to +/// an integer. Load the individual pieces to form the aggregate value. +void SROA::RewriteLoadUserOfWholeAlloca(LoadInst *LI, AllocationInst *AI, + SmallVector &NewElts) { + // Extract each element out of the NewElts according to its structure offset + // and form the result value. + const Type *AllocaEltTy = AI->getType()->getElementType(); + uint64_t AllocaSizeBits = TD->getABITypeSizeInBits(AllocaEltTy); + + // If this isn't a load of the whole alloca to an integer, it may be a load + // of the first element. Just ignore the load in this case and normal SROA + // will handle it. + if (!isa(LI->getType()) || + TD->getABITypeSizeInBits(LI->getType()) != AllocaSizeBits) + return; + + DOUT << "PROMOTING LOAD OF WHOLE ALLOCA: " << *AI << *LI; + + // There are two forms here: AI could be an array or struct. Both cases + // have different ways to compute the element offset. + const StructLayout *Layout = 0; + uint64_t ArrayEltBitOffset = 0; + if (const StructType *EltSTy = dyn_cast(AllocaEltTy)) { + Layout = TD->getStructLayout(EltSTy); + } else { + const Type *ArrayEltTy = cast(AllocaEltTy)->getElementType(); + ArrayEltBitOffset = TD->getABITypeSizeInBits(ArrayEltTy); + } + + Value *ResultVal = Constant::getNullValue(LI->getType()); + + for (unsigned i = 0, e = NewElts.size(); i != e; ++i) { + // Load the value from the alloca. If the NewElt is an aggregate, cast + // the pointer to an integer of the same size before doing the load. + Value *SrcField = NewElts[i]; + const Type *FieldTy = + cast(SrcField->getType())->getElementType(); + const IntegerType *FieldIntTy = + IntegerType::get(TD->getTypeSizeInBits(FieldTy)); + if (!isa(FieldTy) && !FieldTy->isFloatingPoint() && + !isa(FieldTy)) + SrcField = new BitCastInst(SrcField, PointerType::getUnqual(FieldIntTy), + "", LI); + SrcField = new LoadInst(SrcField, "sroa.load.elt", LI); + + // If SrcField is a fp or vector of the right size but that isn't an + // integer type, bitcast to an integer so we can shift it. + if (SrcField->getType() != FieldIntTy) + SrcField = new BitCastInst(SrcField, FieldIntTy, "", LI); + + // Zero extend the field to be the same size as the final alloca so that + // we can shift and insert it. + if (SrcField->getType() != ResultVal->getType()) + SrcField = new ZExtInst(SrcField, ResultVal->getType(), "", LI); + + // Determine the number of bits to shift SrcField. + uint64_t Shift; + if (Layout) // Struct case. + Shift = Layout->getElementOffsetInBits(i); + else // Array case. + Shift = i*ArrayEltBitOffset; + + if (TD->isBigEndian()) + Shift = AllocaSizeBits-Shift-FieldIntTy->getBitWidth(); + + if (Shift) { + Value *ShiftVal = ConstantInt::get(SrcField->getType(), Shift); + SrcField = BinaryOperator::CreateShl(SrcField, ShiftVal, "", LI); + } + + ResultVal = BinaryOperator::CreateOr(SrcField, ResultVal, "", LI); + } + + LI->replaceAllUsesWith(ResultVal); + LI->eraseFromParent(); +} + /// HasPadding - Return true if the specified type has any structure or /// alignment padding, false otherwise. Modified: llvm/trunk/test/Transforms/ScalarRepl/copy-aggregate.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ScalarRepl/copy-aggregate.ll?rev=61915&r1=61914&r2=61915&view=diff ============================================================================== --- llvm/trunk/test/Transforms/ScalarRepl/copy-aggregate.ll (original) +++ llvm/trunk/test/Transforms/ScalarRepl/copy-aggregate.ll Wed Jan 7 23:42:05 2009 @@ -29,3 +29,29 @@ ret float %c } +;; Load of whole alloca struct as integer +define i64 @test3(i32 %a, i32 %b) nounwind { + %X = alloca {{i32, i32}} + + %A = getelementptr {{i32,i32}}* %X, i32 0, i32 0, i32 0 + %B = getelementptr {{i32,i32}}* %X, i32 0, i32 0, i32 1 + store i32 %a, i32* %A + store i32 %b, i32* %B + + %Y = bitcast {{i32,i32}}* %X to i64* + %Z = load i64* %Y + ret i64 %Z +} + +;; load of integer from whole struct/array alloca. +define i128 @test4(float %a, float %b) nounwind { + %X = alloca {[4 x float]} + %A = getelementptr {[4 x float]}* %X, i32 0, i32 0, i32 0 + %B = getelementptr {[4 x float]}* %X, i32 0, i32 0, i32 3 + store float %a, float* %A + store float %b, float* %B + + %Y = bitcast {[4 x float]}* %X to i128* + %V = load i128* %Y + ret i128 %V +} From nicholas at mxc.ca Wed Jan 7 23:47:11 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Wed, 07 Jan 2009 21:47:11 -0800 Subject: [llvm-commits] [llvm] r60407 - in /llvm/trunk: include/llvm/Analysis/ScalarEvolution.h include/llvm/Analysis/ScalarEvolutionExpander.h include/llvm/Analysis/ScalarEvolutionExpressions.h lib/Analysis/ScalarEvolution.cpp lib/Analysis/ScalarEvolutionExpander.cpp In-Reply-To: References: <200812020805.mB285n4P006299@zion.cs.uiuc.edu> Message-ID: <4965935F.2060703@mxc.ca> Dan Gohman wrote: > Hi Nick, > > 254.gap is failing in an SCEV-related assertion failure in llc on x86_64 > as of this commit. I've attached a bugpoint-reduced testcase. Can you > investigate? > Thanks Dan! What's happened is that this patch has exposed more code to SCEV, which in turn is finding more previously-existing bugs. I haven't finished analyzing, but I filed it as PR3295 for now. I may not have time to fix it until next week. Nick > Thanks, > > Dan > > > > On Dec 2, 2008, at 12:05 AM, Nick Lewycky wrote: > >> Author: nicholas >> Date: Tue Dec 2 02:05:48 2008 >> New Revision: 60407 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=60407&view=rev >> Log: >> Add a new SCEV representing signed division. >> >> Modified: >> llvm/trunk/include/llvm/Analysis/ScalarEvolution.h >> llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h >> llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h >> llvm/trunk/lib/Analysis/ScalarEvolution.cpp >> llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp >> >> Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolution.h >> URL: >> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolution.h?rev=60407&r1=60406&r2=60407&view=diff >> >> >> = >> = >> = >> = >> = >> = >> = >> = >> ====================================================================== >> --- llvm/trunk/include/llvm/Analysis/ScalarEvolution.h (original) >> +++ llvm/trunk/include/llvm/Analysis/ScalarEvolution.h Tue Dec 2 >> 02:05:48 2008 >> @@ -225,6 +225,7 @@ >> return getMulExpr(Ops); >> } >> SCEVHandle getUDivExpr(const SCEVHandle &LHS, const SCEVHandle >> &RHS); >> + SCEVHandle getSDivExpr(const SCEVHandle &LHS, const SCEVHandle >> &RHS); >> SCEVHandle getAddRecExpr(const SCEVHandle &Start, const >> SCEVHandle &Step, >> const Loop *L); >> SCEVHandle getAddRecExpr(std::vector &Operands, >> >> Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h >> URL: >> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h?rev=60407&r1=60406&r2=60407&view=diff >> >> >> ============================================================================== >> >> --- llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h >> (original) >> +++ llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h Tue >> Dec 2 02:05:48 2008 >> @@ -104,6 +104,8 @@ >> >> Value *visitUDivExpr(SCEVUDivExpr *S); >> >> + Value *visitSDivExpr(SCEVSDivExpr *S); >> + >> Value *visitAddRecExpr(SCEVAddRecExpr *S); >> >> Value *visitSMaxExpr(SCEVSMaxExpr *S); >> >> Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h >> URL: >> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h?rev=60407&r1=60406&r2=60407&view=diff >> >> >> ============================================================================== >> >> --- llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h >> (original) >> +++ llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h Tue >> Dec 2 02:05:48 2008 >> @@ -25,7 +25,7 @@ >> // These should be ordered in terms of increasing complexity to >> make the >> // folders simpler. >> scConstant, scTruncate, scZeroExtend, scSignExtend, scAddExpr, >> scMulExpr, >> - scUDivExpr, scAddRecExpr, scUMaxExpr, scSMaxExpr, scUnknown, >> + scUDivExpr, scSDivExpr, scAddRecExpr, scUMaxExpr, scSMaxExpr, >> scUnknown, >> scCouldNotCompute >> }; >> >> @@ -358,6 +358,55 @@ >> >> >> >> //===--------------------------------------------------------------------===// >> >> + /// SCEVSDivExpr - This class represents a binary signed division >> operation. >> + /// >> + class SCEVSDivExpr : public SCEV { >> + friend class ScalarEvolution; >> + >> + SCEVHandle LHS, RHS; >> + SCEVSDivExpr(const SCEVHandle &lhs, const SCEVHandle &rhs) >> + : SCEV(scSDivExpr), LHS(lhs), RHS(rhs) {} >> + >> + virtual ~SCEVSDivExpr(); >> + public: >> + const SCEVHandle &getLHS() const { return LHS; } >> + const SCEVHandle &getRHS() const { return RHS; } >> + >> + virtual bool isLoopInvariant(const Loop *L) const { >> + return LHS->isLoopInvariant(L) && RHS->isLoopInvariant(L); >> + } >> + >> + virtual bool hasComputableLoopEvolution(const Loop *L) const { >> + return LHS->hasComputableLoopEvolution(L) && >> + RHS->hasComputableLoopEvolution(L); >> + } >> + >> + SCEVHandle replaceSymbolicValuesWithConcrete(const SCEVHandle &Sym, >> + const SCEVHandle >> &Conc, >> + ScalarEvolution >> &SE) const { >> + SCEVHandle L = LHS->replaceSymbolicValuesWithConcrete(Sym, >> Conc, SE); >> + SCEVHandle R = RHS->replaceSymbolicValuesWithConcrete(Sym, >> Conc, SE); >> + if (L == LHS && R == RHS) >> + return this; >> + else >> + return SE.getSDivExpr(L, R); >> + } >> + >> + >> + virtual const Type *getType() const; >> + >> + void print(std::ostream &OS) const; >> + void print(std::ostream *OS) const { if (OS) print(*OS); } >> + >> + /// Methods for support type inquiry through isa, cast, and >> dyn_cast: >> + static inline bool classof(const SCEVSDivExpr *S) { return true; } >> + static inline bool classof(const SCEV *S) { >> + return S->getSCEVType() == scSDivExpr; >> + } >> + }; >> + >> + >> + >> //===--------------------------------------------------------------------===// >> >> /// SCEVAddRecExpr - This node represents a polynomial recurrence >> on the trip >> /// count of the specified loop. >> /// >> @@ -550,6 +599,8 @@ >> return ((SC*)this)->visitMulExpr((SCEVMulExpr*)S); >> case scUDivExpr: >> return ((SC*)this)->visitUDivExpr((SCEVUDivExpr*)S); >> + case scSDivExpr: >> + return ((SC*)this)->visitSDivExpr((SCEVSDivExpr*)S); >> case scAddRecExpr: >> return ((SC*)this)->visitAddRecExpr((SCEVAddRecExpr*)S); >> case scSMaxExpr: >> >> Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=60407&r1=60406&r2=60407&view=diff >> >> >> ============================================================================== >> >> --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original) >> +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Tue Dec 2 02:05:48 2008 >> @@ -324,6 +324,26 @@ >> return LHS->getType(); >> } >> >> + >> +// SCEVSDivs - Only allow the creation of one SCEVSDivExpr for any >> particular >> +// input. Don't use a SCEVHandle here, or else the object will >> never be >> +// deleted! >> +static ManagedStatic, >> + SCEVSDivExpr*> > SCEVSDivs; >> + >> +SCEVSDivExpr::~SCEVSDivExpr() { >> + SCEVSDivs->erase(std::make_pair(LHS, RHS)); >> +} >> + >> +void SCEVSDivExpr::print(std::ostream &OS) const { >> + OS << "(" << *LHS << " /s " << *RHS << ")"; >> +} >> + >> +const Type *SCEVSDivExpr::getType() const { >> + return LHS->getType(); >> +} >> + >> + >> // SCEVAddRecExprs - Only allow the creation of one SCEVAddRecExpr >> for any >> // particular input. Don't use a SCEVHandle here, or else the object >> will never >> // be deleted! >> @@ -1109,9 +1129,12 @@ >> } >> >> SCEVHandle ScalarEvolution::getUDivExpr(const SCEVHandle &LHS, const >> SCEVHandle &RHS) { >> + if (LHS == RHS) >> + return getIntegerSCEV(1, LHS->getType()); // X udiv X --> 1 >> + >> if (SCEVConstant *RHSC = dyn_cast(RHS)) { >> if (RHSC->getValue()->equalsInt(1)) >> - return LHS; // X udiv 1 --> x >> + return LHS; // X udiv 1 --> X >> >> if (SCEVConstant *LHSC = dyn_cast(LHS)) { >> Constant *LHSCV = LHSC->getValue(); >> @@ -1120,13 +1143,34 @@ >> } >> } >> >> - // FIXME: implement folding of (X*4)/4 when we know X*4 doesn't >> overflow. >> - >> SCEVUDivExpr *&Result = (*SCEVUDivs)[std::make_pair(LHS, RHS)]; >> if (Result == 0) Result = new SCEVUDivExpr(LHS, RHS); >> return Result; >> } >> >> +SCEVHandle ScalarEvolution::getSDivExpr(const SCEVHandle &LHS, const >> SCEVHandle &RHS) { >> + if (LHS == RHS) >> + return getIntegerSCEV(1, LHS->getType()); // X sdiv X --> 1 >> + >> + if (SCEVConstant *RHSC = dyn_cast(RHS)) { >> + if (RHSC->getValue()->equalsInt(1)) >> + return LHS; // X sdiv 1 --> X >> + >> + if (RHSC->getValue()->isAllOnesValue()) >> + return getNegativeSCEV(LHS); // X sdiv -1 --> -X >> + >> + if (SCEVConstant *LHSC = dyn_cast(LHS)) { >> + Constant *LHSCV = LHSC->getValue(); >> + Constant *RHSCV = RHSC->getValue(); >> + return getUnknown(ConstantExpr::getSDiv(LHSCV, RHSCV)); >> + } >> + } >> + >> + SCEVSDivExpr *&Result = (*SCEVSDivs)[std::make_pair(LHS, RHS)]; >> + if (Result == 0) Result = new SCEVSDivExpr(LHS, RHS); >> + return Result; >> +} >> + >> >> /// SCEVAddRecExpr::get - Get a add recurrence expression for the >> /// specified loop. Simplify the expression as much as possible. >> @@ -1732,7 +1776,7 @@ >> return MinOpRes; >> } >> >> - // SCEVUDivExpr, SCEVUnknown >> + // SCEVUDivExpr, SCEVSDivExpr, SCEVUnknown >> return 0; >> } >> >> @@ -1762,6 +1806,9 @@ >> case Instruction::UDiv: >> return SE.getUDivExpr(getSCEV(U->getOperand(0)), >> getSCEV(U->getOperand(1))); >> + case Instruction::SDiv: >> + return SE.getSDivExpr(getSCEV(U->getOperand(0)), >> + getSCEV(U->getOperand(1))); >> case Instruction::Sub: >> return SE.getMinusSCEV(getSCEV(U->getOperand(0)), >> getSCEV(U->getOperand(1))); >> @@ -1805,7 +1852,7 @@ >> break; >> >> case Instruction::LShr: >> - // Turn logical shift right of a constant into a unsigned divide. >> + // Turn logical shift right of a constant into an unsigned divide. >> if (ConstantInt *SA = dyn_cast(U->getOperand(1))) { >> uint32_t BitWidth = >> cast(V->getType())->getBitWidth(); >> Constant *X = ConstantInt::get( >> @@ -2505,16 +2552,26 @@ >> return Comm; >> } >> >> - if (SCEVUDivExpr *Div = dyn_cast(V)) { >> - SCEVHandle LHS = getSCEVAtScope(Div->getLHS(), L); >> + if (SCEVUDivExpr *UDiv = dyn_cast(V)) { >> + SCEVHandle LHS = getSCEVAtScope(UDiv->getLHS(), L); >> if (LHS == UnknownValue) return LHS; >> - SCEVHandle RHS = getSCEVAtScope(Div->getRHS(), L); >> + SCEVHandle RHS = getSCEVAtScope(UDiv->getRHS(), L); >> if (RHS == UnknownValue) return RHS; >> - if (LHS == Div->getLHS() && RHS == Div->getRHS()) >> - return Div; // must be loop invariant >> + if (LHS == UDiv->getLHS() && RHS == UDiv->getRHS()) >> + return UDiv; // must be loop invariant >> return SE.getUDivExpr(LHS, RHS); >> } >> >> + if (SCEVSDivExpr *SDiv = dyn_cast(V)) { >> + SCEVHandle LHS = getSCEVAtScope(SDiv->getLHS(), L); >> + if (LHS == UnknownValue) return LHS; >> + SCEVHandle RHS = getSCEVAtScope(SDiv->getRHS(), L); >> + if (RHS == UnknownValue) return RHS; >> + if (LHS == SDiv->getLHS() && RHS == SDiv->getRHS()) >> + return SDiv; // must be loop invariant >> + return SE.getSDivExpr(LHS, RHS); >> + } >> + >> // If this is a loop recurrence for a loop that does not contain L, >> then we >> // are dealing with the final value computed by the loop. >> if (SCEVAddRecExpr *AddRec = dyn_cast(V)) { >> >> Modified: llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp?rev=60407&r1=60406&r2=60407&view=diff >> >> >> ============================================================================== >> >> --- llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp (original) >> +++ llvm/trunk/lib/Analysis/ScalarEvolutionExpander.cpp Tue Dec 2 >> 02:05:48 2008 >> @@ -143,6 +143,15 @@ >> return InsertBinop(Instruction::UDiv, LHS, RHS, InsertPt); >> } >> >> +Value *SCEVExpander::visitSDivExpr(SCEVSDivExpr *S) { >> + // Do not fold sdiv into ashr, unless you know that LHS is >> positive. On >> + // negative values, it rounds the wrong way. >> + >> + Value *LHS = expand(S->getLHS()); >> + Value *RHS = expand(S->getRHS()); >> + return InsertBinop(Instruction::SDiv, LHS, RHS, InsertPt); >> +} >> + >> Value *SCEVExpander::visitAddRecExpr(SCEVAddRecExpr *S) { >> const Type *Ty = S->getType(); >> const Loop *L = S->getLoop(); >> >> >> _______________________________________________ >> 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 Jan 8 00:11:51 2009 From: brukman+llvm at gmail.com (Misha Brukman) Date: Thu, 08 Jan 2009 06:11:51 -0000 Subject: [llvm-commits] [llvm] r61916 - /llvm/trunk/include/llvm/ADT/StringSet.h Message-ID: <200901080611.n086BpO5026372@zion.cs.uiuc.edu> Author: brukman Date: Thu Jan 8 00:11:51 2009 New Revision: 61916 URL: http://llvm.org/viewvc/llvm-project?rev=61916&view=rev Log: Remove extra blank line and space. Modified: llvm/trunk/include/llvm/ADT/StringSet.h Modified: llvm/trunk/include/llvm/ADT/StringSet.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/StringSet.h?rev=61916&r1=61915&r2=61916&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/StringSet.h (original) +++ llvm/trunk/include/llvm/ADT/StringSet.h Thu Jan 8 00:11:51 2009 @@ -15,7 +15,6 @@ #define LLVM_ADT_STRINGSET_H #include "llvm/ADT/StringMap.h" - #include namespace llvm { @@ -27,7 +26,7 @@ class StringSet : public llvm::StringMap { typedef llvm::StringMap base; public: - bool insert (const std::string& InLang) { + bool insert(const std::string& InLang) { assert(!InLang.empty()); const char* KeyStart = &InLang[0]; const char* KeyEnd = KeyStart + InLang.size(); From sabre at nondot.org Thu Jan 8 00:52:57 2009 From: sabre at nondot.org (Chris Lattner) Date: Thu, 08 Jan 2009 06:52:57 -0000 Subject: [llvm-commits] [llvm] r61917 - /llvm/trunk/lib/Target/README.txt Message-ID: <200901080652.n086qwKU027603@zion.cs.uiuc.edu> Author: lattner Date: Thu Jan 8 00:52:57 2009 New Revision: 61917 URL: http://llvm.org/viewvc/llvm-project?rev=61917&view=rev Log: add some notes about strlen craziness in eon. Modified: llvm/trunk/lib/Target/README.txt Modified: llvm/trunk/lib/Target/README.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/README.txt?rev=61917&r1=61916&r2=61917&view=diff ============================================================================== --- llvm/trunk/lib/Target/README.txt (original) +++ llvm/trunk/lib/Target/README.txt Thu Jan 8 00:52:57 2009 @@ -1495,3 +1495,60 @@ Those should be turned into a switch. //===---------------------------------------------------------------------===// + +252.eon contains this interesting code: + + %3072 = getelementptr [100 x i8]* %tempString, i32 0, i32 0 + %3073 = call i8* @strcpy(i8* %3072, i8* %3071) nounwind + %strlen = call i32 @strlen(i8* %3072) ; uses = 1 + %endptr = getelementptr [100 x i8]* %tempString, i32 0, i32 %strlen + call void @llvm.memcpy.i32(i8* %endptr, + i8* getelementptr ([5 x i8]* @"\01LC42", i32 0, i32 0), i32 5, i32 1) + %3074 = call i32 @strlen(i8* %endptr) nounwind readonly + +This is interesting for a couple reasons. First, in this: + + %3073 = call i8* @strcpy(i8* %3072, i8* %3071) nounwind + %strlen = call i32 @strlen(i8* %3072) + +The strlen could be replaced with: %strlen = sub %3072, %3073, because the +strcpy call returns a pointer to the end of the string. Based on that, the +endptr GEP just becomes equal to 3073, which eliminates a strlen call and GEP. + +Second, the memcpy+strlen strlen can be replaced with: + + %3074 = call i32 @strlen([5 x i8]* @"\01LC42") nounwind readonly + +Because the destination was just copied into the specified memory buffer. This, +in turn, can be constant folded to "4". + +In other code, it contains: + + %endptr6978 = bitcast i8* %endptr69 to i32* + store i32 7107374, i32* %endptr6978, align 1 + %3167 = call i32 @strlen(i8* %endptr69) nounwind readonly + +Which could also be constant folded. Whatever is producing this should probably +be fixed to leave this as a memcpy from a string. + +Further, eon also has an interesting partially redundant strlen call: + +bb8: ; preds = %_ZN18eonImageCalculatorC1Ev.exit + %682 = getelementptr i8** %argv, i32 6 ; [#uses=2] + %683 = load i8** %682, align 4 ; [#uses=4] + %684 = load i8* %683, align 1 ; [#uses=1] + %685 = icmp eq i8 %684, 0 ; [#uses=1] + br i1 %685, label %bb10, label %bb9 + +bb9: ; preds = %bb8 + %686 = call i32 @strlen(i8* %683) nounwind readonly + %687 = icmp ugt i32 %686, 254 ; [#uses=1] + br i1 %687, label %bb10, label %bb11 + +bb10: ; preds = %bb9, %bb8 + %688 = call i32 @strlen(i8* %683) nounwind readonly + +This could be eliminated by doing the strlen once in bb8, saving code size and +improving perf on the bb8->9->10 path. + +//===---------------------------------------------------------------------===// From foldr at codedgers.com Thu Jan 8 00:54:28 2009 From: foldr at codedgers.com (Mikhail Glushenkov) Date: Wed, 07 Jan 2009 22:54:28 -0800 Subject: [llvm-commits] [PATCH] Make it possible for out-of-tree projects to compile llvmc plugins Message-ID: <20090107225428.195757isahjyd3xg@webmail.codedgers.com> Hi, The attached patch makes it possible to compile llvmc plugins for out-of-tree LLVM projects (you need tblgen -I $LLVM_SRC_ROOT/include). -- () ascii ribbon campaign - against html e-mail /\ www.asciiribbon.org - against proprietary attachments -------------- next part -------------- A non-text attachment was scrubbed... Name: Out-of-tree-llvmc-plugins.patch Type: text/x-patch Size: 551 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090107/2417c1b1/attachment.bin From isanbard at gmail.com Thu Jan 8 01:34:39 2009 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 7 Jan 2009 23:34:39 -0800 Subject: [llvm-commits] [llvm] r61915 - in /llvm/trunk: lib/Transforms/Scalar/ScalarReplAggregates.cpp test/Transforms/ScalarRepl/copy-aggregate.ll In-Reply-To: <200901080542.n085g6cx025501@zion.cs.uiuc.edu> References: <200901080542.n085g6cx025501@zion.cs.uiuc.edu> Message-ID: <7A239BDC-C99E-41DC-B2FA-E06FDA64AB44@gmail.com> Hi Chris, This test is failing with this check in. It might need to be updated: Running /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore/test/ FrontendC++/dg.exp ... FAIL: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore/test/ FrontendC++/2008-02-13-sret.cpp Failed with exit(1) at line 1 while running: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/ llvmgcc42.roots/llvmgcc42~dst/Developer/usr/bin/llvm-gcc-4.2 -fstrict- aliasing -Wstrict-aliasing -I/usr/include/c++/4.0.0/i686-apple-darwin9 -I/usr/include/c++/4.0.0 -emit-llvm -w -S -O1 -m32 -emit-llvm /Volumes/ Sandbox/Buildbot/llvm/full-llvm/build/llvmCore/test/FrontendC++/ 2008-02-13-sret.cpp -o - | /usr/bin/grep {store i32} | count 1 count: expected 1 lines and got 0. child process exited abnormally -bw On Jan 7, 2009, at 9:42 PM, Chris Lattner wrote: > Author: lattner > Date: Wed Jan 7 23:42:05 2009 > New Revision: 61915 > > URL: http://llvm.org/viewvc/llvm-project?rev=61915&view=rev > Log: > This implements the second half of the fix for PR3290, handling > loads from allocas that cover the entire aggregate. This handles > some memcpy/byval cases that are produced by llvm-gcc. This triggers > a few times in kc++ (with std::pair ,bool>) and once in 176.gcc (with > %struct..0anon). > > > > Modified: > llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp > llvm/trunk/test/Transforms/ScalarRepl/copy-aggregate.ll > > Modified: llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp?rev=61915&r1=61914&r2=61915&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp > (original) > +++ llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Wed > Jan 7 23:42:05 2009 > @@ -122,6 +122,8 @@ > SmallVector > &NewElts); > void RewriteStoreUserOfWholeAlloca(StoreInst *SI, AllocationInst > *AI, > SmallVector > &NewElts); > + void RewriteLoadUserOfWholeAlloca(LoadInst *LI, AllocationInst > *AI, > + SmallVector > &NewElts); > > const Type *CanConvertToScalar(Value *V, bool &IsNotTrivial); > void ConvertToScalar(AllocationInst *AI, const Type *Ty); > @@ -599,6 +601,18 @@ > continue; > } > return MarkUnsafe(Info); > + } else if (LoadInst *LI = dyn_cast(UI)) { > + // If loading the entire alloca in one chunk through a > bitcasted pointer > + // to integer, we can transform it. This happens (for > example) when you > + // cast a {i32,i32}* to i64* and load through it. This is > similar to the > + // memcpy case and occurs in various "byval" cases and > emulated memcpys. > + if (isa(LI->getType()) && > + TD->getABITypeSize(LI->getType()) == > + TD->getABITypeSize(AI->getType()->getElementType())) { > + Info.isMemCpySrc = true; > + continue; > + } > + return MarkUnsafe(Info); > } else { > return MarkUnsafe(Info); > } > @@ -628,15 +642,21 @@ > } > > if (StoreInst *SI = dyn_cast(User)) { > - // This must be a store of the entire alloca from an integer. > + // If this is a store of the entire alloca from an integer, > rewrite it. > RewriteStoreUserOfWholeAlloca(SI, AI, NewElts); > continue; > } > + > + if (LoadInst *LI = dyn_cast(User)) { > + // If this is a load of the entire alloca to an integer, > rewrite it. > + RewriteLoadUserOfWholeAlloca(LI, AI, NewElts); > + continue; > + } > > // Otherwise it must be some other user of a gep of the first > pointer. Just > // leave these alone. > continue; > - } > + } > } > > /// RewriteMemIntrinUserOfAlloca - MI is a memcpy/memset/memmove > from or to AI. > @@ -902,6 +922,83 @@ > SI->eraseFromParent(); > } > > +/// RewriteLoadUserOfWholeAlloca - We found an load of the entire > allocation to > +/// an integer. Load the individual pieces to form the aggregate > value. > +void SROA::RewriteLoadUserOfWholeAlloca(LoadInst *LI, > AllocationInst *AI, > + SmallVector 32> &NewElts) { > + // Extract each element out of the NewElts according to its > structure offset > + // and form the result value. > + const Type *AllocaEltTy = AI->getType()->getElementType(); > + uint64_t AllocaSizeBits = TD->getABITypeSizeInBits(AllocaEltTy); > + > + // If this isn't a load of the whole alloca to an integer, it may > be a load > + // of the first element. Just ignore the load in this case and > normal SROA > + // will handle it. > + if (!isa(LI->getType()) || > + TD->getABITypeSizeInBits(LI->getType()) != AllocaSizeBits) > + return; > + > + DOUT << "PROMOTING LOAD OF WHOLE ALLOCA: " << *AI << *LI; > + > + // There are two forms here: AI could be an array or struct. > Both cases > + // have different ways to compute the element offset. > + const StructLayout *Layout = 0; > + uint64_t ArrayEltBitOffset = 0; > + if (const StructType *EltSTy = dyn_cast(AllocaEltTy)) { > + Layout = TD->getStructLayout(EltSTy); > + } else { > + const Type *ArrayEltTy = cast(AllocaEltTy)- > >getElementType(); > + ArrayEltBitOffset = TD->getABITypeSizeInBits(ArrayEltTy); > + } > + > + Value *ResultVal = Constant::getNullValue(LI->getType()); > + > + for (unsigned i = 0, e = NewElts.size(); i != e; ++i) { > + // Load the value from the alloca. If the NewElt is an > aggregate, cast > + // the pointer to an integer of the same size before doing the > load. > + Value *SrcField = NewElts[i]; > + const Type *FieldTy = > + cast(SrcField->getType())->getElementType(); > + const IntegerType *FieldIntTy = > + IntegerType::get(TD->getTypeSizeInBits(FieldTy)); > + if (!isa(FieldTy) && !FieldTy->isFloatingPoint() && > + !isa(FieldTy)) > + SrcField = new BitCastInst(SrcField, > PointerType::getUnqual(FieldIntTy), > + "", LI); > + SrcField = new LoadInst(SrcField, "sroa.load.elt", LI); > + > + // If SrcField is a fp or vector of the right size but that > isn't an > + // integer type, bitcast to an integer so we can shift it. > + if (SrcField->getType() != FieldIntTy) > + SrcField = new BitCastInst(SrcField, FieldIntTy, "", LI); > + > + // Zero extend the field to be the same size as the final > alloca so that > + // we can shift and insert it. > + if (SrcField->getType() != ResultVal->getType()) > + SrcField = new ZExtInst(SrcField, ResultVal->getType(), "", > LI); > + > + // Determine the number of bits to shift SrcField. > + uint64_t Shift; > + if (Layout) // Struct case. > + Shift = Layout->getElementOffsetInBits(i); > + else // Array case. > + Shift = i*ArrayEltBitOffset; > + > + if (TD->isBigEndian()) > + Shift = AllocaSizeBits-Shift-FieldIntTy->getBitWidth(); > + > + if (Shift) { > + Value *ShiftVal = ConstantInt::get(SrcField->getType(), Shift); > + SrcField = BinaryOperator::CreateShl(SrcField, ShiftVal, "", > LI); > + } > + > + ResultVal = BinaryOperator::CreateOr(SrcField, ResultVal, "", > LI); > + } > + > + LI->replaceAllUsesWith(ResultVal); > + LI->eraseFromParent(); > +} > + > > /// HasPadding - Return true if the specified type has any structure > or > /// alignment padding, false otherwise. > > Modified: llvm/trunk/test/Transforms/ScalarRepl/copy-aggregate.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ScalarRepl/copy-aggregate.ll?rev=61915&r1=61914&r2=61915&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/test/Transforms/ScalarRepl/copy-aggregate.ll (original) > +++ llvm/trunk/test/Transforms/ScalarRepl/copy-aggregate.ll Wed Jan > 7 23:42:05 2009 > @@ -29,3 +29,29 @@ > ret float %c > } > > +;; Load of whole alloca struct as integer > +define i64 @test3(i32 %a, i32 %b) nounwind { > + %X = alloca {{i32, i32}} > + > + %A = getelementptr {{i32,i32}}* %X, i32 0, i32 0, i32 0 > + %B = getelementptr {{i32,i32}}* %X, i32 0, i32 0, i32 1 > + store i32 %a, i32* %A > + store i32 %b, i32* %B > + > + %Y = bitcast {{i32,i32}}* %X to i64* > + %Z = load i64* %Y > + ret i64 %Z > +} > + > +;; load of integer from whole struct/array alloca. > +define i128 @test4(float %a, float %b) nounwind { > + %X = alloca {[4 x float]} > + %A = getelementptr {[4 x float]}* %X, i32 0, i32 0, i32 0 > + %B = getelementptr {[4 x float]}* %X, i32 0, i32 0, i32 3 > + store float %a, float* %A > + store float %b, float* %B > + > + %Y = bitcast {[4 x float]}* %X to i128* > + %V = load i128* %Y > + ret i128 %V > +} > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From sabre at nondot.org Thu Jan 8 01:34:56 2009 From: sabre at nondot.org (Chris Lattner) Date: Thu, 08 Jan 2009 07:34:56 -0000 Subject: [llvm-commits] [llvm] r61918 - /llvm/trunk/lib/Target/README.txt Message-ID: <200901080734.n087YuuK028909@zion.cs.uiuc.edu> Author: lattner Date: Thu Jan 8 01:34:55 2009 New Revision: 61918 URL: http://llvm.org/viewvc/llvm-project?rev=61918&view=rev Log: add some more crazy strlen and memcpy stuff I noticed in spec. Modified: llvm/trunk/lib/Target/README.txt Modified: llvm/trunk/lib/Target/README.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/README.txt?rev=61918&r1=61917&r2=61918&view=diff ============================================================================== --- llvm/trunk/lib/Target/README.txt (original) +++ llvm/trunk/lib/Target/README.txt Thu Jan 8 01:34:55 2009 @@ -1552,3 +1552,102 @@ improving perf on the bb8->9->10 path. //===---------------------------------------------------------------------===// + +I see an interesting fully redundant call to strlen left in 186.crafty:InputMove +which looks like: + %movetext11 = getelementptr [128 x i8]* %movetext, i32 0, i32 0 + + +bb62: ; preds = %bb55, %bb53 + %promote.0 = phi i32 [ %169, %bb55 ], [ 0, %bb53 ] + %171 = call i32 @strlen(i8* %movetext11) nounwind readonly align 1 + %172 = add i32 %171, -1 ; [#uses=1] + %173 = getelementptr [128 x i8]* %movetext, i32 0, i32 %172 + +... no stores ... + br i1 %or.cond, label %bb65, label %bb72 + +bb65: ; preds = %bb62 + store i8 0, i8* %173, align 1 + br label %bb72 + +bb72: ; preds = %bb65, %bb62 + %trank.1 = phi i32 [ %176, %bb65 ], [ -1, %bb62 ] + %177 = call i32 @strlen(i8* %movetext11) nounwind readonly align 1 + +Note that on the bb62->bb72 path, that the %177 strlen call is partially +redundant with the %171 call. At worst, we could shove the %177 strlen call +up into the bb65 block moving it out of the bb62->bb72 path. However, note +that bb65 stores to the string, zeroing out the last byte. This means that on +that path the value of %177 is actually just %171-1. A sub is cheaper than a +strlen! + +This pattern repeats several times, basically doing: + + A = strlen(P); + P[A-1] = 0; + B = strlen(P); + where it is "obvious" that B = A-1. + +//===---------------------------------------------------------------------===// + +186.crafty contains this interesting pattern: + +%77 = call i8* @strstr(i8* getelementptr ([6 x i8]* @"\01LC5", i32 0, i32 0), + i8* %30) +%phitmp648 = icmp eq i8* %77, getelementptr ([6 x i8]* @"\01LC5", i32 0, i32 0) +br i1 %phitmp648, label %bb70, label %bb76 + +bb70: ; preds = %OptionMatch.exit91, %bb69 + %78 = call i32 @strlen(i8* %30) nounwind readonly align 1 ; [#uses=1] + +This is basically: + cststr = "abcdef"; + if (strstr(cststr, P) == cststr) { + x = strlen(P); + ... + +The strstr call would be significantly cheaper written as: + +cststr = "abcdef"; +if (memcmp(P, str, strlen(P))) + x = strlen(P); + +This is memcmp+strlen instead of strstr. This also makes the strlen fully +redundant. + +//===---------------------------------------------------------------------===// + +186.crafty also contains this code: + +%1906 = call i32 @strlen(i8* getelementptr ([32 x i8]* @pgn_event, i32 0,i32 0)) +%1907 = getelementptr [32 x i8]* @pgn_event, i32 0, i32 %1906 +%1908 = call i8* @strcpy(i8* %1907, i8* %1905) nounwind align 1 +%1909 = call i32 @strlen(i8* getelementptr ([32 x i8]* @pgn_event, i32 0,i32 0)) +%1910 = getelementptr [32 x i8]* @pgn_event, i32 0, i32 %1909 + +The last strlen is computable as 1908- at pgn_event, which means 1910=1908. + +//===---------------------------------------------------------------------===// + +186.crafty has this interesting pattern with the "out.4543" variable: + +call void @llvm.memcpy.i32( + i8* getelementptr ([10 x i8]* @out.4543, i32 0, i32 0), + i8* getelementptr ([7 x i8]* @"\01LC28700", i32 0, i32 0), i32 7, i32 1) +%101 = call at printf(i8* ... @out.4543, i32 0, i32 0)) nounwind + +It is basically doing: + + memcpy(globalarray, "string"); + printf(..., globalarray); + +Anyway, by knowing that printf just reads the memory and forward substituting +the string directly into the printf, this eliminates reads from globalarray. +Since this pattern occurs frequently in crafty (due to the "DisplayTime" and +other similar functions) there are many stores to "out". Once all the printfs +stop using "out", all that is left is the memcpy's into it. This should allow +globalopt to remove the "stored only" global. + +//===---------------------------------------------------------------------===// + From isanbard at gmail.com Thu Jan 8 01:35:40 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 08 Jan 2009 07:35:40 -0000 Subject: [llvm-commits] [llvm] r61919 - /llvm/trunk/unittests/ADT/StringMapTest.cpp Message-ID: <200901080735.n087ZelO028937@zion.cs.uiuc.edu> Author: void Date: Thu Jan 8 01:35:39 2009 New Revision: 61919 URL: http://llvm.org/viewvc/llvm-project?rev=61919&view=rev Log: 80-column violation fix. Modified: llvm/trunk/unittests/ADT/StringMapTest.cpp Modified: llvm/trunk/unittests/ADT/StringMapTest.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/StringMapTest.cpp?rev=61919&r1=61918&r2=61919&view=diff ============================================================================== --- llvm/trunk/unittests/ADT/StringMapTest.cpp (original) +++ llvm/trunk/unittests/ADT/StringMapTest.cpp Thu Jan 8 01:35:39 2009 @@ -1,4 +1,4 @@ -//===- llvm/unittest/ADT/StringMapMap.cpp - StringMap unit tests -*- C++ -*-===// +//===- llvm/unittest/ADT/StringMapMap.cpp - StringMap unit tests ----------===// // // The LLVM Compiler Infrastructure // From sabre at nondot.org Thu Jan 8 01:58:23 2009 From: sabre at nondot.org (Chris Lattner) Date: Thu, 08 Jan 2009 07:58:23 -0000 Subject: [llvm-commits] [llvm] r61921 - /llvm/trunk/test/FrontendC++/2008-02-13-sret.cpp Message-ID: <200901080758.n087wNSJ029753@zion.cs.uiuc.edu> Author: lattner Date: Thu Jan 8 01:58:23 2009 New Revision: 61921 URL: http://llvm.org/viewvc/llvm-project?rev=61921&view=rev Log: the new scalarrepl changes are optimizing away a temporary alloca in check242, which invalidates this test. This test is an x86-32 ABI test that is trying to be run in a target-independent way, which is not going to work very well. Just remove the test. Removed: llvm/trunk/test/FrontendC++/2008-02-13-sret.cpp Removed: llvm/trunk/test/FrontendC++/2008-02-13-sret.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/FrontendC%2B%2B/2008-02-13-sret.cpp?rev=61920&view=auto ============================================================================== --- llvm/trunk/test/FrontendC++/2008-02-13-sret.cpp (original) +++ llvm/trunk/test/FrontendC++/2008-02-13-sret.cpp (removed) @@ -1,41 +0,0 @@ -// RUN: %llvmgxx -S -O1 -m32 -emit-llvm %s -o - | grep {store i32} | count 1 - -// Test that all 8 bytes of ret in check242 are copied, and only 4 bytes of -// ret in check93 are copied (the same LLVM struct is used for both). - -typedef __builtin_va_list va_list; -typedef unsigned long size_t; -void *memset(void *, int, size_t); - -struct S93 { __attribute__((aligned (8))) void * a; } ; - extern struct S93 s93; - struct S93 check93 () { - struct S93 ret; - memset (&ret, 0, sizeof (ret)); - ret.a = s93.a; - return ret; } - -struct S242 { char * a;int b[1]; } ; - extern struct S242 s242; - - struct S242 check242 () { - struct S242 ret; - memset (&ret, 0, sizeof (ret)); - ret.a = s242.a; - ret.b[0] = s242.b[0]; - return ret; } - -void check93va (int z, ...) { - struct S93 arg; - va_list ap; - __builtin_va_start(ap,z); - arg = __builtin_va_arg(ap,struct S93); - __builtin_va_end(ap); } - -void check242va (int z, ...) { -struct S242 arg; -va_list ap; -__builtin_va_start(ap,z); - arg = __builtin_va_arg(ap,struct S242); - __builtin_va_end(ap); } - From clattner at apple.com Thu Jan 8 01:59:08 2009 From: clattner at apple.com (Chris Lattner) Date: Wed, 7 Jan 2009 23:59:08 -0800 Subject: [llvm-commits] [llvm] r61915 - in /llvm/trunk: lib/Transforms/Scalar/ScalarReplAggregates.cpp test/Transforms/ScalarRepl/copy-aggregate.ll In-Reply-To: <7A239BDC-C99E-41DC-B2FA-E06FDA64AB44@gmail.com> References: <200901080542.n085g6cx025501@zion.cs.uiuc.edu> <7A239BDC-C99E-41DC-B2FA-E06FDA64AB44@gmail.com> Message-ID: <3766BE3F-6D5B-4F55-8903-71E933B34900@apple.com> On Jan 7, 2009, at 11:34 PM, Bill Wendling wrote: > Hi Chris, > > This test is failing with this check in. It might need to be updated: > > Running /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore/test/ > FrontendC++/dg.exp ... > FAIL: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore/test/ > FrontendC++/2008-02-13-sret.cpp > Failed with exit(1) at line 1 > while running: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/ > llvmgcc42.roots/llvmgcc42~dst/Developer/usr/bin/llvm-gcc-4.2 -fstrict- > aliasing -Wstrict-aliasing -I/usr/include/c++/4.0.0/i686-apple-darwin9 > -I/usr/include/c++/4.0.0 -emit-llvm -w -S -O1 -m32 -emit-llvm / > Volumes/ > Sandbox/Buildbot/llvm/full-llvm/build/llvmCore/test/FrontendC++/ > 2008-02-13-sret.cpp -o - | /usr/bin/grep {store i32} | count 1 > count: expected 1 lines and got 0. > child process exited abnormally Nice, scalarrepl is doing a better job, compiling _Z8check242v to: define i64 @_Z8check242v() nounwind readonly { entry: %0 = load i8** getelementptr (%struct.S242* @s242, i32 0, i32 0), align 8 ; [#uses=1] %1 = ptrtoint i8* %0 to i32 ; [#uses=1] %2 = load i32* getelementptr (%struct.S242* @s242, i32 0, i32 1, i32 0), align 4 ; [#uses=1] %3 = zext i32 %1 to i64 ; [#uses=1] %4 = zext i32 %2 to i64 ; [#uses=1] %5 = shl i64 %4, 32 ; [#uses=1] %6 = or i64 %5, %3 ; [#uses=1] ret i64 %6 } instead of keeping the temporary alloca. I just decided to delete the test. Thanks Bill, -Chris From isanbard at gmail.com Thu Jan 8 02:26:47 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 08 Jan 2009 08:26:47 -0000 Subject: [llvm-commits] [llvm] r61922 - in /llvm/trunk: include/llvm/ADT/StringMap.h unittests/ADT/StringMapTest.cpp Message-ID: <200901080826.n088Qlc8030782@zion.cs.uiuc.edu> Author: void Date: Thu Jan 8 02:26:46 2009 New Revision: 61922 URL: http://llvm.org/viewvc/llvm-project?rev=61922&view=rev Log: * Don't explicitly cast "0" to "void*". This doesn't work well with specialized StringMapEntryInitializer classes. Leave it for the compiler to figure out what the type is and what "0" should be transformed into. * Un-disable the unit tests which test the StringMapEntryInitializer class. Modified: llvm/trunk/include/llvm/ADT/StringMap.h llvm/trunk/unittests/ADT/StringMapTest.cpp Modified: llvm/trunk/include/llvm/ADT/StringMap.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/StringMap.h?rev=61922&r1=61921&r2=61922&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/StringMap.h (original) +++ llvm/trunk/include/llvm/ADT/StringMap.h Thu Jan 8 02:26:46 2009 @@ -182,7 +182,7 @@ template static StringMapEntry *Create(const char *KeyStart, const char *KeyEnd, AllocatorTy &Allocator) { - return Create(KeyStart, KeyEnd, Allocator, (void*)0); + return Create(KeyStart, KeyEnd, Allocator, 0); } @@ -195,7 +195,7 @@ } static StringMapEntry *Create(const char *KeyStart, const char *KeyEnd) { - return Create(KeyStart, KeyEnd, (void*)0); + return Create(KeyStart, KeyEnd, 0); } /// GetStringMapEntryFromValue - Given a value that is known to be embedded @@ -378,7 +378,7 @@ StringMapEntry &GetOrCreateValue(const char *KeyStart, const char *KeyEnd) { - return GetOrCreateValue(KeyStart, KeyEnd, (void*)0); + return GetOrCreateValue(KeyStart, KeyEnd, 0); } /// remove - Remove the specified key/value pair from the map, but do not Modified: llvm/trunk/unittests/ADT/StringMapTest.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/StringMapTest.cpp?rev=61922&r1=61921&r2=61922&view=diff ============================================================================== --- llvm/trunk/unittests/ADT/StringMapTest.cpp (original) +++ llvm/trunk/unittests/ADT/StringMapTest.cpp Thu Jan 8 02:26:46 2009 @@ -11,6 +11,19 @@ #include "llvm/ADT/StringMap.h" using namespace llvm; +namespace llvm { + +template <> +class StringMapEntryInitializer { +public: + template + static void Initialize(StringMapEntry &T, InitTy InitVal) { + T.second = InitVal; + } +}; + +} + namespace { // Test fixture @@ -140,10 +153,11 @@ // Test StringMapEntry::Create() method. // DISABLED because this fails without a StringMapEntryInitializer, and // I can't get it to compile with one. -TEST_F(StringMapTest, DISABLED_StringMapEntryTest) { +TEST_F(StringMapTest, StringMapEntryTest) { + MallocAllocator A; StringMap::value_type* entry = StringMap::value_type::Create( - testKeyFirst, testKeyLast, 1u); + testKeyFirst, testKeyLast, A, 1u); EXPECT_STREQ(testKey, entry->first()); EXPECT_EQ(1u, entry->second); } @@ -151,7 +165,7 @@ // Test insert() method // DISABLED because this fails without a StringMapEntryInitializer, and // I can't get it to compile with one. -TEST_F(StringMapTest, DISABLED_InsertTest) { +TEST_F(StringMapTest, InsertTest) { SCOPED_TRACE("InsertTest"); testMap.insert( StringMap::value_type::Create( From isanbard at gmail.com Thu Jan 8 02:58:52 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 8 Jan 2009 00:58:52 -0800 Subject: [llvm-commits] [llvm] r61915 - in /llvm/trunk: lib/Transforms/Scalar/ScalarReplAggregates.cpp test/Transforms/ScalarRepl/copy-aggregate.ll In-Reply-To: <3766BE3F-6D5B-4F55-8903-71E933B34900@apple.com> References: <200901080542.n085g6cx025501@zion.cs.uiuc.edu> <7A239BDC-C99E-41DC-B2FA-E06FDA64AB44@gmail.com> <3766BE3F-6D5B-4F55-8903-71E933B34900@apple.com> Message-ID: On Jan 7, 2009, at 11:59 PM, Chris Lattner wrote: > On Jan 7, 2009, at 11:34 PM, Bill Wendling wrote: > >> Hi Chris, >> >> This test is failing with this check in. It might need to be updated: >> >> Running /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore/test/ >> FrontendC++/dg.exp ... >> FAIL: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore/test/ >> FrontendC++/2008-02-13-sret.cpp >> Failed with exit(1) at line 1 >> while running: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/ >> llvmgcc42.roots/llvmgcc42~dst/Developer/usr/bin/llvm-gcc-4.2 - >> fstrict- >> aliasing -Wstrict-aliasing -I/usr/include/c++/4.0.0/i686-apple- >> darwin9 >> -I/usr/include/c++/4.0.0 -emit-llvm -w -S -O1 -m32 -emit-llvm / >> Volumes/ >> Sandbox/Buildbot/llvm/full-llvm/build/llvmCore/test/FrontendC++/ >> 2008-02-13-sret.cpp -o - | /usr/bin/grep {store i32} | count 1 >> count: expected 1 lines and got 0. >> child process exited abnormally > > Nice, scalarrepl is doing a better job, compiling _Z8check242v to: > Groove! :-) -bw From isanbard at gmail.com Thu Jan 8 03:31:36 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 08 Jan 2009 09:31:36 -0000 Subject: [llvm-commits] [llvm] r61923 - /llvm/trunk/unittests/ADT/StringMapTest.cpp Message-ID: <200901080931.n089VbsT010558@zion.cs.uiuc.edu> Author: void Date: Thu Jan 8 03:31:36 2009 New Revision: 61923 URL: http://llvm.org/viewvc/llvm-project?rev=61923&view=rev Log: Some generic clean-ups. Also make the StringMapEntryInitializer specialization apply only to the tests that are actually testing it. Modified: llvm/trunk/unittests/ADT/StringMapTest.cpp Modified: llvm/trunk/unittests/ADT/StringMapTest.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/StringMapTest.cpp?rev=61923&r1=61922&r2=61923&view=diff ============================================================================== --- llvm/trunk/unittests/ADT/StringMapTest.cpp (original) +++ llvm/trunk/unittests/ADT/StringMapTest.cpp Thu Jan 8 03:31:36 2009 @@ -11,19 +11,6 @@ #include "llvm/ADT/StringMap.h" using namespace llvm; -namespace llvm { - -template <> -class StringMapEntryInitializer { -public: - template - static void Initialize(StringMapEntry &T, InitTy InitVal) { - T.second = InitVal; - } -}; - -} - namespace { // Test fixture @@ -83,13 +70,13 @@ const char* StringMapTest::testKeyLast = testKey + sizeof(testKey) - 1; const std::string StringMapTest::testKeyStr(testKey); -// Empty map tests +// Empty map tests. TEST_F(StringMapTest, EmptyMapTest) { SCOPED_TRACE("EmptyMapTest"); assertEmptyMap(); } -// Constant map tests +// Constant map tests. TEST_F(StringMapTest, ConstEmptyMapTest) { const StringMap& constTestMap = testMap; @@ -106,18 +93,18 @@ EXPECT_EQ(0u, constTestMap.count(testKeyStr)); EXPECT_TRUE(constTestMap.find(testKey) == constTestMap.end()); EXPECT_TRUE(constTestMap.find(testKeyFirst, testKeyLast) == - constTestMap.end()); + constTestMap.end()); EXPECT_TRUE(constTestMap.find(testKeyStr) == constTestMap.end()); } -// A map with a single entry +// A map with a single entry. TEST_F(StringMapTest, SingleEntryMapTest) { SCOPED_TRACE("SingleEntryMapTest"); testMap[testKey] = testValue; assertSingleItemMap(); } -// Test clear() method +// Test clear() method. TEST_F(StringMapTest, ClearTest) { SCOPED_TRACE("ClearTest"); testMap[testKey] = testValue; @@ -125,7 +112,7 @@ assertEmptyMap(); } -// Test erase(iterator) method +// Test erase(iterator) method. TEST_F(StringMapTest, EraseIteratorTest) { SCOPED_TRACE("EraseIteratorTest"); testMap[testKey] = testValue; @@ -133,7 +120,7 @@ assertEmptyMap(); } -// Test erase(value) method +// Test erase(value) method. TEST_F(StringMapTest, EraseValueTest) { SCOPED_TRACE("EraseValueTest"); testMap[testKey] = testValue; @@ -141,7 +128,7 @@ assertEmptyMap(); } -// Test inserting two values and erasing one +// Test inserting two values and erasing one. TEST_F(StringMapTest, InsertAndEraseTest) { SCOPED_TRACE("InsertAndEraseTest"); testMap[testKey] = testValue; @@ -150,30 +137,7 @@ assertSingleItemMap(); } -// Test StringMapEntry::Create() method. -// DISABLED because this fails without a StringMapEntryInitializer, and -// I can't get it to compile with one. -TEST_F(StringMapTest, StringMapEntryTest) { - MallocAllocator A; - StringMap::value_type* entry = - StringMap::value_type::Create( - testKeyFirst, testKeyLast, A, 1u); - EXPECT_STREQ(testKey, entry->first()); - EXPECT_EQ(1u, entry->second); -} - -// Test insert() method -// DISABLED because this fails without a StringMapEntryInitializer, and -// I can't get it to compile with one. -TEST_F(StringMapTest, InsertTest) { - SCOPED_TRACE("InsertTest"); - testMap.insert( - StringMap::value_type::Create( - testKeyFirst, testKeyLast, testMap.getAllocator(), 1u)); - assertSingleItemMap(); -} - -// A more complex iteration test +// A more complex iteration test. TEST_F(StringMapTest, IterationTest) { bool visited[100]; @@ -200,4 +164,39 @@ } } +} // end anonymous namespace + +namespace llvm { + +template <> +class StringMapEntryInitializer { +public: + template + static void Initialize(StringMapEntry &T, InitTy InitVal) { + T.second = InitVal; + } +}; + +} // end llvm namespace + +namespace { + +// Test StringMapEntry::Create() method. +TEST_F(StringMapTest, StringMapEntryTest) { + StringMap::value_type* entry = + StringMap::value_type::Create( + testKeyFirst, testKeyLast, 1u); + EXPECT_STREQ(testKey, entry->first()); + EXPECT_EQ(1u, entry->second); +} + +// Test insert() method. +TEST_F(StringMapTest, InsertTest) { + SCOPED_TRACE("InsertTest"); + testMap.insert( + StringMap::value_type::Create( + testKeyFirst, testKeyLast, testMap.getAllocator(), 1u)); + assertSingleItemMap(); } + +} // end anonymous namespace From baldrick at free.fr Thu Jan 8 07:28:47 2009 From: baldrick at free.fr (Duncan Sands) Date: Thu, 8 Jan 2009 14:28:47 +0100 Subject: [llvm-commits] [llvm] r61915 - in /llvm/trunk: lib/Transforms/Scalar/ScalarReplAggregates.cpp test/Transforms/ScalarRepl/copy-aggregate.ll In-Reply-To: <200901080542.n085g6cx025501@zion.cs.uiuc.edu> References: <200901080542.n085g6cx025501@zion.cs.uiuc.edu> Message-ID: <200901081428.47824.baldrick@free.fr> Hi Chris, > +/// RewriteLoadUserOfWholeAlloca - We found an load of the entire allocation to > +/// an integer. Load the individual pieces to form the aggregate value. what if the type has alignment or other padding? Probably you should just not bother if HasPadding returns true. Ciao, Duncan. From brukman at gmail.com Thu Jan 8 09:33:58 2009 From: brukman at gmail.com (Misha Brukman) Date: Thu, 8 Jan 2009 10:33:58 -0500 Subject: [llvm-commits] [llvm] r61922 - in /llvm/trunk: include/llvm/ADT/StringMap.h unittests/ADT/StringMapTest.cpp In-Reply-To: <200901080826.n088Qlc8030782@zion.cs.uiuc.edu> References: <200901080826.n088Qlc8030782@zion.cs.uiuc.edu> Message-ID: 2009/1/8 Bill Wendling > Modified: llvm/trunk/unittests/ADT/StringMapTest.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/StringMapTest.cpp?rev=61922&r1=61921&r2=61922&view=diff > > > ============================================================================== > --- llvm/trunk/unittests/ADT/StringMapTest.cpp (original) > +++ llvm/trunk/unittests/ADT/StringMapTest.cpp Thu Jan 8 02:26:46 2009 > @@ -11,6 +11,19 @@ > #include "llvm/ADT/StringMap.h" > using namespace llvm; > > +namespace llvm { > + > +template <> > +class StringMapEntryInitializer { > +public: > + template > + static void Initialize(StringMapEntry &T, InitTy InitVal) { > + T.second = InitVal; > + } > +}; > + > +} > + Bill, I'm curious as to why you added this functionality to the unittest rather than directly into StringMap.h? Isn't this necessary there as well for correctness, or am I missing something? -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090108/5a01f301/attachment.html From brukman+llvm at gmail.com Thu Jan 8 09:50:24 2009 From: brukman+llvm at gmail.com (Misha Brukman) Date: Thu, 08 Jan 2009 15:50:24 -0000 Subject: [llvm-commits] [llvm] r61926 - /llvm/trunk/lib/CodeGen/RegAllocPBQP.cpp Message-ID: <200901081550.n08FoOCc023634@zion.cs.uiuc.edu> Author: brukman Date: Thu Jan 8 09:50:22 2009 New Revision: 61926 URL: http://llvm.org/viewvc/llvm-project?rev=61926&view=rev Log: * Alphabetized #includes * Removed trailing whitespace 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=61926&r1=61925&r2=61926&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/RegAllocPBQP.cpp (original) +++ llvm/trunk/lib/CodeGen/RegAllocPBQP.cpp Thu Jan 8 09:50:22 2009 @@ -6,17 +6,17 @@ // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// -// +// // This file contains a Partitioned Boolean Quadratic Programming (PBQP) based // register allocator for LLVM. This allocator works by constructing a PBQP // problem representing the register allocation problem under consideration, // solving this using a PBQP solver, and mapping the solution back to a // register assignment. If any variables are selected for spilling then spill -// code is inserted and the process repeated. +// code is inserted and the process repeated. // // The PBQP solver (pbqp.c) provided for this allocator uses a heuristic tuned // for register allocation. For more information on PBQP for register -// allocation see the following papers: +// allocation see the following papers: // // (1) Hames, L. and Scholz, B. 2006. Nearly optimal register allocation with // PBQP. In Proceedings of the 7th Joint Modular Languages Conference @@ -26,7 +26,7 @@ // architectures. In Proceedings of the Joint Conference on Languages, // Compilers and Tools for Embedded Systems (LCTES'02), ACM Press, New York, // NY, USA, 139-148. -// +// // Author: Lang Hames // Email: lhames at gmail.com // @@ -36,21 +36,21 @@ #include "PBQP.h" #include "VirtRegMap.h" -#include "llvm/CodeGen/MachineFunctionPass.h" -#include "llvm/CodeGen/RegAllocRegistry.h" -#include "llvm/CodeGen/RegisterCoalescer.h" #include "llvm/CodeGen/LiveIntervalAnalysis.h" #include "llvm/CodeGen/LiveStackAnalysis.h" -#include "llvm/CodeGen/MachineRegisterInfo.h" +#include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineLoopInfo.h" -#include "llvm/Target/TargetMachine.h" -#include "llvm/Target/TargetInstrInfo.h" +#include "llvm/CodeGen/MachineRegisterInfo.h" +#include "llvm/CodeGen/RegAllocRegistry.h" +#include "llvm/CodeGen/RegisterCoalescer.h" #include "llvm/Support/Debug.h" -#include +#include "llvm/Target/TargetInstrInfo.h" +#include "llvm/Target/TargetMachine.h" +#include #include +#include #include #include -#include using namespace llvm; @@ -68,7 +68,7 @@ public: static char ID; - + //! Construct a PBQP register allocator. PBQPRegAlloc() : MachineFunctionPass((intptr_t)&ID) {} @@ -119,7 +119,7 @@ LiveIntervalSet vregIntervalsToAlloc, emptyVRegIntervals; - + //! Builds a PBQP cost vector. template PBQPVector* buildCostVector(unsigned vReg, @@ -170,7 +170,7 @@ //! \brief Given a solved PBQP problem maps this solution back to a register //! assignment. - bool mapPBQPToRegAlloc(pbqp *problem); + bool mapPBQPToRegAlloc(pbqp *problem); //! \brief Postprocessing before final spilling. Sets basic block "live in" //! variables. @@ -209,9 +209,9 @@ // No coalesce - on to the next preg. if (cmItr == coalesces.end()) continue; - - // We have a coalesce - insert the benefit. - (*v)[ai + 1] = -cmItr->second; + + // We have a coalesce - insert the benefit. + (*v)[ai + 1] = -cmItr->second; } return v; @@ -232,7 +232,7 @@ // both intervals to memory safely (the cost for each individual allocation // to memory is accounted for by the cost vectors for each live interval). PBQPMatrix *m = new PBQPMatrix(allowed1.size() + 1, allowed2.size() + 1); - + // Assume this is a zero matrix until proven otherwise. Zero matrices occur // between interfering live ranges with non-overlapping register sets (e.g. // non-overlapping reg classes, or disjoint sets of allowed regs within the @@ -244,9 +244,9 @@ // Row index. Starts at 1, since the 0th row is for the spill option, which // is always zero. - unsigned ri = 1; + unsigned ri = 1; - // Iterate over allowed sets, insert infinities where required. + // Iterate over allowed sets, insert infinities where required. for (RegContainerIterator a1Itr = allowed1.begin(), a1End = allowed1.end(); a1Itr != a1End; ++a1Itr) { @@ -321,7 +321,7 @@ // If the row and column represent the same register insert a beneficial // cost to preference this allocation - it would allow us to eliminate a - // move instruction. + // move instruction. if (reg1 == *a2Itr) { (*m)[ri][ci] = -cBenefit; isZeroMatrix = false; @@ -348,7 +348,7 @@ typedef MachineFunction::const_iterator MFIterator; typedef MachineBasicBlock::const_iterator MBBIterator; typedef LiveInterval::const_vni_iterator VNIIterator; - + CoalesceMap coalescesFound; // To find coalesces we need to iterate over the function looking for @@ -378,7 +378,7 @@ // If both registers are physical then we can't coalesce. if (srcRegIsPhysical && dstRegIsPhysical) continue; - + // If it's a copy that includes a virtual register but the source and // destination classes differ then we can't coalesce, so continue with // the next instruction. @@ -408,7 +408,7 @@ } // If we've made it here we have a copy with compatible register classes. - // We can probably coalesce, but we need to consider overlap. + // We can probably coalesce, but we need to consider overlap. const LiveInterval *srcLI = &lis->getInterval(srcReg), *dstLI = &lis->getInterval(dstReg); @@ -421,7 +421,7 @@ bool badDef = false; // Test all defs of the source range. - for (VNIIterator + for (VNIIterator vniItr = srcLI->vni_begin(), vniEnd = srcLI->vni_end(); vniItr != vniEnd; ++vniItr) { @@ -436,12 +436,12 @@ // If we have a bad def give up, continue to the next instruction. if (badDef) continue; - + // Otherwise test definitions of the destination range. for (VNIIterator vniItr = dstLI->vni_begin(), vniEnd = dstLI->vni_end(); vniItr != vniEnd; ++vniItr) { - + // We want to make sure we skip the copy instruction itself. if ((*vniItr)->copy == instr) continue; @@ -451,7 +451,7 @@ break; } } - + // As before a bad def we give up and continue to the next instr. if (badDef) continue; @@ -462,7 +462,7 @@ // We're good to go with the coalesce. float cBenefit = powf(10.0f, loopInfo->getLoopDepth(mbb)) / 5.0; - + coalescesFound[RegPair(srcReg, dstReg)] = cBenefit; coalescesFound[RegPair(dstReg, srcReg)] = cBenefit; } @@ -521,7 +521,7 @@ // Iterate over vreg intervals, construct live interval <-> node number // mappings. - for (LiveIntervalSet::const_iterator + for (LiveIntervalSet::const_iterator itr = vregIntervalsToAlloc.begin(), end = vregIntervalsToAlloc.end(); itr != end; ++itr) { const LiveInterval *li = *itr; @@ -545,7 +545,7 @@ // Grab pointers to the interval and its register class. const LiveInterval *li = node2LI[node]; const TargetRegisterClass *liRC = mri->getRegClass(li->reg); - + // Start by assuming all allocable registers in the class are allowed... RegVector liAllowed(liRC->allocation_order_begin(*mf), liRC->allocation_order_end(*mf)); @@ -570,7 +570,7 @@ // Remove the overlapping reg... RegVector::iterator eraseItr = std::find(liAllowed.begin(), liAllowed.end(), pReg); - + if (eraseItr != liAllowed.end()) liAllowed.erase(eraseItr); @@ -581,7 +581,7 @@ for (; *aliasItr != 0; ++aliasItr) { RegVector::iterator eraseItr = std::find(liAllowed.begin(), liAllowed.end(), *aliasItr); - + if (eraseItr != liAllowed.end()) { liAllowed.erase(eraseItr); } @@ -595,7 +595,7 @@ // Set the spill cost to the interval weight, or epsilon if the // interval weight is zero - PBQPNum spillCost = (li->weight != 0.0) ? + PBQPNum spillCost = (li->weight != 0.0) ? li->weight : std::numeric_limits::min(); // Build a cost vector for this interval. @@ -626,7 +626,7 @@ else if (li->overlaps(*li2)) { m = buildInterferenceMatrix(allowedSets[node1], allowedSets[node2]); } - + if (m != 0) { add_pbqp_edgecosts(solver, node1, node2, m); delete m; @@ -635,13 +635,13 @@ } // We're done, PBQP problem constructed - return it. - return solver; + return solver; } void PBQPRegAlloc::addStackInterval(const LiveInterval *spilled, float &weight) { int stackSlot = vrm->getStackSlot(spilled->reg); - - if (stackSlot == VirtRegMap::NO_STACK_SLOT) + + if (stackSlot == VirtRegMap::NO_STACK_SLOT) return; LiveInterval &stackInterval = lss->getOrCreateInterval(stackSlot); @@ -658,13 +658,13 @@ } bool PBQPRegAlloc::mapPBQPToRegAlloc(pbqp *problem) { - + // Set to true if we have any spills bool anotherRoundNeeded = false; // Clear the existing allocation. vrm->clearAllVirt(); - + // Iterate over the nodes mapping the PBQP solution to a register assignment. for (unsigned node = 0; node < node2LI.size(); ++node) { unsigned virtReg = node2LI[node]->reg, @@ -734,18 +734,18 @@ for (LiveIntervalSet::const_iterator itr = emptyVRegIntervals.begin(), end = emptyVRegIntervals.end(); itr != end; ++itr) { - LiveInterval *li = *itr; + LiveInterval *li = *itr; unsigned physReg = li->preference; if (physReg == 0) { const TargetRegisterClass *liRC = mri->getRegClass(li->reg); - physReg = *liRC->allocation_order_begin(*mf); + physReg = *liRC->allocation_order_begin(*mf); } - - vrm->assignVirt2Phys(li->reg, physReg); + + vrm->assignVirt2Phys(li->reg, physReg); } - + // Finally iterate over the basic blocks to compute and set the live-in sets. SmallVector liveInMBBs; MachineBasicBlock *entryMBB = &*mf->begin(); @@ -755,7 +755,7 @@ const LiveInterval *li = liItr->second; unsigned reg = 0; - + // Get the physical register for this interval if (TargetRegisterInfo::isPhysicalRegister(li->reg)) { reg = li->reg; @@ -771,7 +771,7 @@ // Iterate over the ranges of the current interval... for (LRIterator lrItr = li->begin(), lrEnd = li->end(); lrItr != lrEnd; ++lrItr) { - + // Find the set of basic blocks which this range is live into... if (lis->findLiveInMBBs(lrItr->start, lrItr->end, liveInMBBs)) { // And add the physreg for this interval to their live-in sets. @@ -786,7 +786,7 @@ } } } - + } bool PBQPRegAlloc::runOnMachineFunction(MachineFunction &MF) { @@ -807,17 +807,17 @@ DOUT << "PBQP Register Allocating for " << mf->getFunction()->getName() << "\n"; // Allocator main loop: - // + // // * Map current regalloc problem to a PBQP problem // * Solve the PBQP problem // * Map the solution back to a register allocation // * Spill if necessary - // + // // This process is continued till no more spills are generated. // Find the vreg intervals in need of allocation. findVRegIntervalsToAlloc(); - + // If there aren't any then we're done here. if (vregIntervalsToAlloc.empty() && emptyVRegIntervals.empty()) return true; @@ -832,12 +832,12 @@ DOUT << " PBQP Regalloc round " << round << ":\n"; pbqp *problem = constructPBQPProblem(); - + solve_pbqp(problem); - + pbqpAllocComplete = mapPBQPToRegAlloc(problem); - free_pbqp(problem); + free_pbqp(problem); ++round; } @@ -858,7 +858,7 @@ std::auto_ptr spiller(createSpiller()); spiller->runOnMachineFunction(*mf, *vrm); - return true; + return true; } FunctionPass* llvm::createPBQPRegisterAllocator() { From brukman+llvm at gmail.com Thu Jan 8 10:40:28 2009 From: brukman+llvm at gmail.com (Misha Brukman) Date: Thu, 08 Jan 2009 16:40:28 -0000 Subject: [llvm-commits] [llvm] r61927 - in /llvm/trunk: CREDITS.TXT lib/CodeGen/RegAllocPBQP.cpp Message-ID: <200901081640.n08GeSXa025203@zion.cs.uiuc.edu> Author: brukman Date: Thu Jan 8 10:40:25 2009 New Revision: 61927 URL: http://llvm.org/viewvc/llvm-project?rev=61927&view=rev Log: * Moved author attribution to CREDITS.TXT * Removed trailing whitespace Modified: llvm/trunk/CREDITS.TXT llvm/trunk/lib/CodeGen/RegAllocPBQP.cpp Modified: llvm/trunk/CREDITS.TXT URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/CREDITS.TXT?rev=61927&r1=61926&r2=61927&view=diff ============================================================================== --- llvm/trunk/CREDITS.TXT (original) +++ llvm/trunk/CREDITS.TXT Thu Jan 8 10:40:25 2009 @@ -1,6 +1,6 @@ This file is a partial list of people who have contributed to the LLVM project. If you have contributed a patch or made some other contribution to -LLVM, please submit a patch to this file to add yourself, and it will be +LLVM, please submit a patch to this file to add yourself, and it will be done! The list is sorted by name and formatted to allow easy grepping and @@ -33,7 +33,7 @@ N: Neil Booth E: neil at daikokuya.co.uk -D: APFloat implementation. +D: APFloat implementation. N: Misha Brukman E: brukman+llvm at uiuc.edu @@ -82,7 +82,7 @@ E: gaeke at uiuc.edu W: http://www.students.uiuc.edu/~gaeke/ D: Portions of X86 static and JIT compilers; initial SparcV8 backend -D: Dynamic trace optimizer +D: Dynamic trace optimizer D: FreeBSD/X86 compatibility fixes, the llvm-nm tool N: Nicolas Geoffray @@ -114,6 +114,10 @@ E: ggreif at gmail.com D: Improvements for space efficiency +N: Lang Hames +E: lhames at gmail.com +D: PBQP-based register allocator + N: Gordon Henriksen E: gordonhenriksen at mac.com D: Pluggable GC support @@ -126,7 +130,7 @@ N: Paolo Invernizzi E: arathorn at fastwebnet.it -D: Visual C++ compatibility fixes +D: Visual C++ compatibility fixes N: Patrick Jenkins E: patjenk at wam.umd.edu @@ -168,7 +172,7 @@ E: jlaskey at apple.com D: Improvements to the PPC backend, instruction scheduling D: Debug and Dwarf implementation -D: Auto upgrade mangler +D: Auto upgrade mangler D: llvm-gcc4 svn wrangler N: Chris Lattner @@ -217,7 +221,7 @@ N: Morten Ofstad E: morten at hue.no -D: Visual C++ compatibility fixes +D: Visual C++ compatibility fixes N: Richard Osborne E: richard at xmos.com Modified: llvm/trunk/lib/CodeGen/RegAllocPBQP.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegAllocPBQP.cpp?rev=61927&r1=61926&r2=61927&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/RegAllocPBQP.cpp (original) +++ llvm/trunk/lib/CodeGen/RegAllocPBQP.cpp Thu Jan 8 10:40:25 2009 @@ -16,7 +16,7 @@ // // The PBQP solver (pbqp.c) provided for this allocator uses a heuristic tuned // for register allocation. For more information on PBQP for register -// allocation see the following papers: +// allocation, see the following papers: // // (1) Hames, L. and Scholz, B. 2006. Nearly optimal register allocation with // PBQP. In Proceedings of the 7th Joint Modular Languages Conference @@ -27,9 +27,6 @@ // Compilers and Tools for Embedded Systems (LCTES'02), ACM Press, New York, // NY, USA, 139-148. // -// Author: Lang Hames -// Email: lhames at gmail.com -// //===----------------------------------------------------------------------===// #define DEBUG_TYPE "regalloc" From dpatel at apple.com Thu Jan 8 11:19:22 2009 From: dpatel at apple.com (Devang Patel) Date: Thu, 08 Jan 2009 17:19:22 -0000 Subject: [llvm-commits] [llvm] r61928 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Message-ID: <200901081719.n08HJMkY027122@zion.cs.uiuc.edu> Author: dpatel Date: Thu Jan 8 11:19:22 2009 New Revision: 61928 URL: http://llvm.org/viewvc/llvm-project?rev=61928&view=rev Log: Add DebugInfo based APIs to record source line info. Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61928&r1=61927&r2=61928&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Thu Jan 8 11:19:22 2009 @@ -1166,6 +1166,26 @@ }; //===----------------------------------------------------------------------===// +/// SourceLineInfo - This class is used to record source line correspondence. +/// +class SrcLineInfo { + unsigned Line; // Source line number. + unsigned Column; // Source column. + unsigned SourceID; // Source ID number. + unsigned LabelID; // Label in code ID number. +public: + SrcLineInfo(unsigned L, unsigned C, unsigned S, unsigned I) + : Line(L), Column(C), SourceID(S), LabelID(I) {} + + // Accessors + unsigned getLine() const { return Line; } + unsigned getColumn() const { return Column; } + unsigned getSourceID() const { return SourceID; } + unsigned getLabelID() const { return LabelID; } +}; + + +//===----------------------------------------------------------------------===// /// SrcFileInfo - This class is used to track source information. /// class SrcFileInfo { @@ -1259,7 +1279,7 @@ /// CompileUnits - All the compile units involved in this build. The index /// of each entry in this vector corresponds to the sources in MMI. std::vector CompileUnits; - DenseMap DW_CUs; + DenseMap DW_CUs; /// AbbreviationsSet - Used to uniquely define abbreviations. /// @@ -1277,6 +1297,9 @@ // SourceFiles - Uniquing vector for source files. UniqueVector SrcFiles; + // Lines - List of of source line correspondence. + std::vector Lines; + FoldingSet ValuesSet; /// Values - A list of all the unique values in use. @@ -2539,6 +2562,23 @@ return VariableDie; } + unsigned RecordSourceLine(Value *V, unsigned Line, unsigned Col) { + CompileUnit *Unit = DW_CUs[V]; + assert (Unit && "Unable to find CompileUnit"); + unsigned ID = NextLabelID(); + Lines.push_back(SrcLineInfo(Line, Col, Unit->getID(), ID)); + return ID; + } + + unsigned getRecordSourceLineCount() { + return Lines.size(); + } + + unsigned RecordSource(const std::string &Directory, + const std::string &File) { + unsigned DID = Directories.insert(Directory); + return SrcFiles.insert(SrcFileInfo(DID,File)); + } /// RecordRegionStart - Indicate the start of a region. /// @@ -3447,9 +3487,8 @@ for (std::vector::iterator RI = Result.begin(), RE = Result.end(); RI != RE; ++RI) { DICompileUnit *DIUnit = new DICompileUnit(*RI); - unsigned DID = Directories.insert(DIUnit->getDirectory()); - unsigned ID = SrcFiles.insert(SrcFileInfo(DID, - DIUnit->getFilename())); + unsigned ID = RecordSource(DIUnit->getDirectory(), + DIUnit->getFilename()); DIE *Die = new DIE(DW_TAG_compile_unit); AddSectionOffset(Die, DW_AT_stmt_list, DW_FORM_data4, From sabre at nondot.org Thu Jan 8 12:28:31 2009 From: sabre at nondot.org (Chris Lattner) Date: Thu, 8 Jan 2009 10:28:31 -0800 (PST) Subject: [llvm-commits] [llvm] r61915 - in /llvm/trunk: lib/Transforms/Scalar/ScalarReplAggregates.cpp test/Transforms/ScalarRepl/copy-aggregate.ll In-Reply-To: <200901081428.47824.baldrick@free.fr> References: <200901080542.n085g6cx025501@zion.cs.uiuc.edu> <200901081428.47824.baldrick@free.fr> Message-ID: On Thu, 8 Jan 2009, Duncan Sands wrote: > Hi Chris, >> +/// RewriteLoadUserOfWholeAlloca - We found an load of the entire allocation to >> +/// an integer. Load the individual pieces to form the aggregate value. > > what if the type has alignment or other padding? Probably you should just not bother > if HasPadding returns true. Before deciding that it is safe to do the xform, SROA.cpp:612 sets "isMemCpySrc" to true if there is a load like this. "isMemCpySrc" is used to handle the padding cases. -Chris -- http://nondot.org/sabre/ http://llvm.org/ From sabre at nondot.org Thu Jan 8 13:01:46 2009 From: sabre at nondot.org (Chris Lattner) Date: Thu, 08 Jan 2009 19:01:46 -0000 Subject: [llvm-commits] [llvm] r61931 [1/2] - /llvm/trunk/test/Assembler/2004-09-29-VerifierIsReallySlow.ll Message-ID: <200901081901.n08J1kRA030539@zion.cs.uiuc.edu> Author: lattner Date: Thu Jan 8 13:01:45 2009 New Revision: 61931 URL: http://llvm.org/viewvc/llvm-project?rev=61931&view=rev Log: this testcase is huge and hasn't regressed ever, I don't think it is worth keeping. Removed: llvm/trunk/test/Assembler/2004-09-29-VerifierIsReallySlow.ll From sabre at nondot.org Thu Jan 8 13:01:46 2009 From: sabre at nondot.org (Chris Lattner) Date: Thu, 08 Jan 2009 19:01:46 -0000 Subject: [llvm-commits] [llvm] r61931 [2/2] - /llvm/trunk/test/Assembler/2004-09-29-VerifierIsReallySlow.ll Message-ID: <200901081901.n08J1lZE030543@zion.cs.uiuc.edu> Removed: llvm/trunk/test/Assembler/2004-09-29-VerifierIsReallySlow.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/2004-09-29-VerifierIsReallySlow.ll?rev=61930&view=auto ============================================================================== --- llvm/trunk/test/Assembler/2004-09-29-VerifierIsReallySlow.ll (original) +++ llvm/trunk/test/Assembler/2004-09-29-VerifierIsReallySlow.ll (removed) @@ -1,24452 +0,0 @@ -; Check to see that the verifier does not take an outrageous amount of time on -; this testcase. -; RUN: llvm-as %s -o /dev/null -f - -%"complex long double" = type { double, double } -%"struct.std::dcomplex" = type { %"complex long double" } - -declare %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_(%"struct.std::dcomplex"*, %"struct.std::dcomplex"*) - -declare %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_(%"struct.std::dcomplex"*, %"struct.std::dcomplex"*) - -declare %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_(%"struct.std::dcomplex"*, %"struct.std::dcomplex"*) - -define void @_Z11determinantPA6_St8dcomplex(%"struct.std::dcomplex"* %agg.result, [6 x %"struct.std::dcomplex"]* %_m) { -entry: - %mem_tmp.i34350 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34336 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34322 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34308 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34294 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34280 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34266 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34252 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34238 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34224 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34210 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34196 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34182 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34168 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34134 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34080 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34066 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34052 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34038 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34024 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i34010 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33996 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33982 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33968 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33954 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33940 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33926 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33912 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33898 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33864 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33810 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33796 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33782 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33768 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33754 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33740 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33726 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33712 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33698 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33684 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33670 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33656 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33642 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33628 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33594 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33540 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33526 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33512 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33498 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33484 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33470 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33456 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33442 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33428 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33414 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33400 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33386 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33372 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33358 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33324 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33270 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33214 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33200 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33186 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33172 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33158 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33144 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33130 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33116 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33102 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33088 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33074 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33060 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33046 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i33032 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32998 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32944 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32930 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32916 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32902 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32888 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32874 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32860 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32846 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32832 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32818 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32804 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32790 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32776 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32762 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32728 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32674 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32660 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32646 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32632 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32618 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32604 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32590 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32576 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32562 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32548 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32534 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32520 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32506 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32492 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32458 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32404 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32390 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32376 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32362 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32348 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32334 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32320 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32306 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32292 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32278 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32264 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32250 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32236 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32222 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32188 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32134 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32078 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32064 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32050 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32036 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32022 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i32008 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31994 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31980 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31966 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31952 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31938 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31924 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31910 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31896 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31862 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31808 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31794 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31780 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31766 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31752 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31738 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31724 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31710 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31696 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31682 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31668 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31654 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31640 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31626 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31592 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31538 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31524 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31510 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31496 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31482 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31468 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31454 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31440 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31426 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31412 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31398 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31384 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31370 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31356 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31322 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31268 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31254 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31240 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31226 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31212 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31198 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31184 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31170 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31156 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31142 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31128 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31114 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31100 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31086 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i31052 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30998 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30942 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30928 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30914 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30900 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30886 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30872 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30858 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30844 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30830 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30816 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30802 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30788 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30774 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30760 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30726 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30672 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30658 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30644 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30630 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30616 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30602 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30588 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30574 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30560 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30546 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30532 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30518 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30504 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30490 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30456 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30402 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30388 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30374 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30360 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30346 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30332 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30318 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30304 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30290 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30276 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30262 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30248 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30234 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30220 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30186 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30132 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30118 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30104 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30090 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30076 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30062 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30048 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30034 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30020 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i30006 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29992 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29978 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29964 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29950 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29916 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29862 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29806 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29792 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29778 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29764 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29750 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29736 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29722 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29708 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29694 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29680 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29666 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29652 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29638 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29624 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29590 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29536 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29522 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29508 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29494 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29480 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29466 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29452 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29438 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29424 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29410 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29396 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29382 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29368 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29354 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29320 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29266 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29252 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29238 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29224 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29210 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29196 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29182 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29168 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29154 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29140 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29126 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29112 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29098 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29084 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i29050 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28996 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28982 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28968 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28954 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28940 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28926 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28912 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28898 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28884 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28870 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28856 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28842 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28828 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28814 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28780 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28726 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28670 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28614 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28600 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28586 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28572 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28558 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28544 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28530 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28516 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28502 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28488 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28474 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28460 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28446 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28432 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28398 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28344 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28330 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28316 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28302 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28288 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28274 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28260 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28246 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28232 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28218 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28204 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28190 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28176 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28162 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28128 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28074 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28060 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28046 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28032 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28018 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i28004 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27990 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27976 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27962 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27948 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27934 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27920 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27906 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27892 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27858 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27804 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27790 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27776 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27762 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27748 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27734 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27720 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27706 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27692 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27678 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27664 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27650 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27636 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27622 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27588 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27534 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27478 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27464 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27450 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27436 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27422 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27408 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27394 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27380 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27366 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27352 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27338 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27324 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27310 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27296 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27262 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27208 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27194 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27180 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27166 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27152 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27138 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27124 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27110 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27096 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27082 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27068 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27054 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27040 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i27026 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26992 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26938 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26924 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26910 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26896 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26882 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26868 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26854 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26840 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26826 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26812 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26798 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26784 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26770 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26756 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26722 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26668 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26654 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26640 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26626 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26612 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26598 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26584 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26570 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26556 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26542 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26528 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26514 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26500 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26486 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26452 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26398 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26342 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26328 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26314 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26300 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26286 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26272 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26258 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26244 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26230 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26216 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26202 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26188 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26174 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26160 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26126 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26072 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26058 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26044 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26030 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26016 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i26002 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25988 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25974 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25960 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25946 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25932 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25918 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25904 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25890 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25856 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25802 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25788 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25774 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25760 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25746 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25732 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25718 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25704 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25690 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25676 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25662 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25648 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25634 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25620 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25586 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25532 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25518 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25504 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25490 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25476 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25462 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25448 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25434 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25420 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25406 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25392 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25378 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25364 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25350 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25316 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25262 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25206 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25192 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25178 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25164 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25150 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25136 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25122 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25108 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25094 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25080 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25066 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25052 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25038 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i25024 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24990 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24936 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24922 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24908 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24894 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24880 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24866 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24852 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24838 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24824 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24810 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24796 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24782 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24768 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24754 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24720 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24666 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24652 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24638 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24624 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24610 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24596 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24582 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24568 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24554 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24540 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24526 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24512 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24498 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24484 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24450 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24396 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24382 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24368 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24354 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24340 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24326 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24312 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24298 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24284 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24270 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24256 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24242 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24228 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24214 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24180 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24126 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24070 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24056 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24042 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24028 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24014 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i24000 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23986 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23972 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23958 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23944 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23930 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23916 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23902 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23888 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23854 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23800 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23786 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23772 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23758 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23744 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23730 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23716 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23702 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23688 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23674 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23660 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23646 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23632 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23618 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23584 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23530 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23516 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23502 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23488 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23474 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23460 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23446 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23432 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23418 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23404 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23390 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23376 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23362 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23348 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23314 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23260 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23246 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23232 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23218 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23204 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23190 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23176 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23162 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23148 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23134 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23120 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23106 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23092 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23078 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i23044 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22990 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22934 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22878 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22864 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22850 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22836 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22822 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22808 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22794 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22780 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22766 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22752 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22738 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22724 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22710 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22696 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22662 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22608 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22594 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22580 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22566 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22552 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22538 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22524 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22510 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22496 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22482 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22468 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22454 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22440 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22426 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22392 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22338 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22324 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22310 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22296 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22282 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22268 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22254 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22240 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22226 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22212 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22198 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22184 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22170 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22156 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22122 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22068 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22054 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22040 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22026 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i22012 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21998 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21984 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21970 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21956 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21942 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21928 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21914 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21900 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21886 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21852 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21798 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21742 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21728 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21714 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21700 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21686 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21672 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21658 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21644 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21630 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21616 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21602 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21588 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21574 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21560 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21526 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21472 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21458 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21444 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21430 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21416 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21402 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21388 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21374 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21360 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21346 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21332 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21318 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21304 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21290 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21256 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21202 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21188 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21174 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21160 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21146 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21132 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21118 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21104 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21090 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21076 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21062 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21048 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21034 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i21020 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20986 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20932 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20918 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20904 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20890 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20876 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20862 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20848 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20834 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20820 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20806 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20792 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20778 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20764 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20750 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20716 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20662 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20606 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20592 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20578 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20564 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20550 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20536 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20522 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20508 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20494 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20480 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20466 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20452 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20438 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20424 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20390 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20336 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20322 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20308 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20294 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20280 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20266 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20252 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20238 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20224 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20210 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20196 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20182 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20168 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20154 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20120 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20066 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20052 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20038 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20024 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i20010 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19996 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19982 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19968 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19954 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19940 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19926 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19912 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19898 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19884 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19850 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19796 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19782 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19768 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19754 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19740 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19726 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19712 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19698 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19684 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19670 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19656 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19642 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19628 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19614 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19580 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19526 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19470 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19456 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19442 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19428 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19414 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19400 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19386 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19372 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19358 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19344 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19330 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19316 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19302 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19288 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19254 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19200 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19186 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19172 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19158 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19144 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19130 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19116 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19102 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19088 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19074 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19060 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19046 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19032 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i19018 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18984 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18930 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18916 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18902 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18888 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18874 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18860 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18846 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18832 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18818 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18804 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18790 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18776 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18762 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18748 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18714 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18660 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18646 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18632 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18618 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18604 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18590 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18576 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18562 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18548 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18534 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18520 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18506 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18492 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18478 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18444 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18390 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18334 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18320 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18306 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18292 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18278 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18264 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18250 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18236 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18222 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18208 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18194 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18180 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18166 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18152 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18118 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18064 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18050 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18036 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18022 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i18008 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17994 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17980 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17966 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17952 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17938 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17924 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17910 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17896 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17882 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17848 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17794 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17780 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17766 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17752 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17738 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17724 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17710 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17696 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17682 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17668 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17654 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17640 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17626 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17612 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17578 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17524 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17510 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17496 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17482 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17468 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17454 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17440 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17426 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17412 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17398 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17384 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17370 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17356 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17342 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17308 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17254 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17198 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17142 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17128 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17114 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17100 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17086 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17072 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17058 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17044 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17030 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17016 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i17002 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16988 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16974 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16960 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16926 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16872 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16858 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16844 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16830 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16816 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16802 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16788 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16774 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16760 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16746 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16732 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16718 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16704 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16690 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16656 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16602 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16588 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16574 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16560 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16546 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16532 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16518 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16504 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16490 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16476 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16462 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16448 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16434 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16420 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16386 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16332 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16318 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16304 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16290 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16276 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16262 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16248 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16234 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16220 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16206 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16192 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16178 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16164 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16150 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16116 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16062 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i16006 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15992 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15978 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15964 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15950 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15936 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15922 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15908 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15894 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15880 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15866 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15852 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15838 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15824 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15790 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15736 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15722 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15708 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15694 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15680 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15666 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15652 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15638 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15624 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15610 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15596 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15582 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15568 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15554 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15520 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15466 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15452 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15438 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15424 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15410 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15396 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15382 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15368 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15354 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15340 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15326 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15312 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15298 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15284 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15250 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15196 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15182 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15168 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15154 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15140 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15126 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15112 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15098 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15084 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15070 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15056 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15042 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15028 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i15014 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14980 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14926 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14870 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14856 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14842 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14828 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14814 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14800 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14786 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14772 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14758 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14744 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14730 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14716 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14702 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14688 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14654 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14600 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14586 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14572 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14558 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14544 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14530 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14516 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14502 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14488 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14474 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14460 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14446 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14432 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14418 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14384 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14330 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14316 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14302 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14288 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14274 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14260 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14246 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14232 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14218 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14204 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14190 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14176 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14162 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14148 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14114 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14060 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14046 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14032 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14018 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i14004 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13990 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13976 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13962 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13948 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13934 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13920 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13906 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13892 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13878 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13844 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13790 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13734 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13720 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13706 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13692 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13678 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13664 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13650 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13636 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13622 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13608 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13594 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13580 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13566 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13552 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13518 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13464 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13450 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13436 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13422 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13408 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13394 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13380 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13366 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13352 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13338 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13324 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13310 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13296 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13282 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13248 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13194 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13180 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13166 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13152 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13138 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13124 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13110 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13096 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13082 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13068 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13054 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13040 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13026 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i13012 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12978 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12924 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12910 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12896 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12882 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12868 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12854 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12840 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12826 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12812 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12798 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12784 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12770 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12756 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12742 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12708 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12654 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12598 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12584 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12570 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12556 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12542 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12528 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12514 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12500 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12486 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12472 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12458 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12444 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12430 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12416 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12382 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12328 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12314 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12300 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12286 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12272 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12258 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12244 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12230 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12216 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12202 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12188 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12174 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12160 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12146 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12112 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12058 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12044 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12030 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12016 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i12002 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11988 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11974 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11960 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11946 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11932 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11918 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11904 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11890 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11876 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11842 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11788 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11774 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11760 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11746 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11732 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11718 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11704 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11690 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11676 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11662 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11648 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11634 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11620 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11606 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11572 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11518 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11462 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11406 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11392 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11378 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11364 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11350 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11336 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11322 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11308 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11294 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11280 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11266 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11252 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11238 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11224 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11190 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11136 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11122 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11108 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11094 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11080 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11066 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11052 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11038 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11024 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i11010 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10996 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10982 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10968 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10954 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10920 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10866 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10852 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10838 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10824 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10810 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10796 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10782 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10768 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10754 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10740 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10726 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10712 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10698 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10684 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10650 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10596 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10582 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10568 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10554 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10540 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10526 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10512 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10498 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10484 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10470 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10456 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10442 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10428 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10414 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10380 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10326 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10270 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10256 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10242 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10228 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10214 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10200 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10186 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10172 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10158 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10144 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10130 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10116 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10102 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10088 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10054 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i10000 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9986 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9972 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9958 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9944 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9930 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9916 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9902 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9888 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9874 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9860 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9846 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9832 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9818 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9784 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9730 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9716 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9702 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9688 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9674 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9660 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9646 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9632 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9618 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9604 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9590 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9576 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9562 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9548 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9514 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9460 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9446 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9432 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9418 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9404 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9390 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9376 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9362 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9348 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9334 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9320 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9306 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9292 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9278 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9244 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9190 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9134 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9120 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9106 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9092 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9078 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9064 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9050 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9036 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9022 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i9008 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8994 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8980 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8966 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8952 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8918 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8864 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8850 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8836 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8822 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8808 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8794 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8780 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8766 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8752 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8738 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8724 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8710 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8696 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8682 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8648 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8594 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8580 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8566 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8552 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8538 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8524 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8510 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8496 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8482 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8468 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8454 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8440 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8426 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8412 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8378 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8324 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8310 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8296 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8282 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8268 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8254 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8240 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8226 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8212 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8198 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8184 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8170 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8156 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8142 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8108 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i8054 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7998 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7984 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7970 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7956 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7942 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7928 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7914 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7900 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7886 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7872 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7858 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7844 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7830 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7816 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7782 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7728 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7714 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7700 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7686 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7672 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7658 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7644 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7630 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7616 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7602 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7588 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7574 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7560 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7546 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7512 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7458 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7444 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7430 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7416 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7402 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7388 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7374 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7360 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7346 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7332 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7318 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7304 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7290 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7276 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7242 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7188 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7174 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7160 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7146 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7132 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7118 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7104 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7090 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7076 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7062 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7048 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7034 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7020 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i7006 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6972 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6918 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6862 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6848 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6834 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6820 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6806 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6792 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6778 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6764 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6750 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6736 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6722 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6708 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6694 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6680 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6646 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6592 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6578 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6564 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6550 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6536 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6522 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6508 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6494 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6480 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6466 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6452 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6438 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6424 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6410 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6376 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6322 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6308 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6294 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6280 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6266 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6252 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6238 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6224 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6210 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6196 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6182 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6168 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6154 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6140 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6106 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6052 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6038 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6024 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i6010 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5996 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5982 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5968 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5954 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5940 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5926 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5912 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5898 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5884 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5870 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5836 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5782 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5726 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5670 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5656 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5642 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5628 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5614 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5600 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5586 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5572 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5558 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5544 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5530 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5516 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5502 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5488 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5454 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5400 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5386 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5372 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5358 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5344 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5330 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5316 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5302 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5288 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5274 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5260 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5246 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5232 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5218 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5184 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5130 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5116 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5102 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5088 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5074 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5060 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5046 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5032 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5018 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i5004 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4990 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4976 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4962 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4948 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4914 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4860 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4846 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4832 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4818 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4804 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4790 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4776 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4762 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4748 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4734 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4720 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4706 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4692 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4678 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4644 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4590 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4534 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4520 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4506 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4492 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4478 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4464 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4450 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4436 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4422 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4408 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4394 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4380 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4366 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4352 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4318 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4264 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4250 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4236 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4222 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4208 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4194 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4180 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4166 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4152 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4138 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4124 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4110 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4096 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4082 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i4048 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3994 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3980 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3966 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3952 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3938 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3924 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3910 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3896 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3882 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3868 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3854 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3840 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3826 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3812 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3778 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3724 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3710 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3696 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3682 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3668 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3654 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3640 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3626 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3612 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3598 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3584 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3570 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3556 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3542 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3508 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3454 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3398 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3384 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3370 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3356 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3342 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3328 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3314 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3300 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3286 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3272 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3258 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3244 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3230 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3216 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3182 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3128 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3114 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3100 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3086 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3072 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3058 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3044 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3030 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3016 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i3002 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2988 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2974 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2960 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2946 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2912 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2858 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2844 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2830 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2816 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2802 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2788 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2774 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2760 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2746 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2732 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2718 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2704 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2690 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2676 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2642 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2588 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2574 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2560 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2546 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2532 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2518 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2504 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2490 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2476 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2462 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2448 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2434 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2420 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2406 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2372 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2318 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2262 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2248 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2234 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2220 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2206 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2192 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2178 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2164 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2150 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2136 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2122 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2108 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2094 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2080 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i2046 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1992 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1978 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1964 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1950 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1936 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1922 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1908 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1894 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1880 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1866 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1852 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1838 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1824 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1810 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1776 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1722 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1708 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1694 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1680 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1666 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1652 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1638 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1624 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1610 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1596 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1582 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1568 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1554 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1540 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1506 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1452 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1438 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1424 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1410 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1396 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1382 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1368 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1354 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1340 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1326 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1312 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1298 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1284 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1270 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1236 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1182 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1126 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1112 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1098 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1084 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1070 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1056 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1042 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1028 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1014 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i1000 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i986 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i972 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i958 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i944 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i910 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i856 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i842 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i828 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i814 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i800 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i786 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i772 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i758 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i744 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i730 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i716 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i702 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i688 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i674 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i640 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i586 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i572 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i558 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i544 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i530 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i516 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i502 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i488 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i474 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i460 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i446 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i432 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i418 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i404 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i370 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i316 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i302 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i288 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i274 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i260 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i246 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i232 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i218 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i204 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i190 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i176 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i162 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i148 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i134 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i100 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i46 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.i = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %ret5 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=8] - %ret4 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=32] - %ret3 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=122] - %mem_tmp.5 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.6 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.9 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.10 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.13 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.20 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.21 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.24 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.25 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.28 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.35 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.36 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.39 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.40 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.43 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.50 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.51 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.54 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.55 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.58 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.66 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.67 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.70 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.71 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.74 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.81 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.82 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.85 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.86 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.89 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.96 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.97 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.100 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.101 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.104 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.111 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.112 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.115 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.116 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.119 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.127 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.128 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.131 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.132 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.135 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.142 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.143 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.146 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.147 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.150 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.157 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.158 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.161 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.162 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.165 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.172 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.173 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.176 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.177 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.180 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.188 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.189 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.192 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.193 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.196 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.203 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.204 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.207 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.208 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.211 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.218 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.219 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.222 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.223 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.226 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.233 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.234 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.237 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.238 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.241 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.249 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.250 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.253 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.254 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.257 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.264 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.265 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.268 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.269 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.272 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.279 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.280 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.283 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.284 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.287 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.294 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.295 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.298 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.299 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.302 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.311 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.312 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.315 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.316 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.319 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.326 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.327 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.330 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.331 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.334 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.341 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.342 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.345 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.346 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.349 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.356 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.357 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.360 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.361 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.364 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.372 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.373 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.376 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.377 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.380 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.387 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.388 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.391 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.392 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.395 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.402 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.403 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.406 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.407 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.410 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.417 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.418 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.421 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.422 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.425 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.433 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.434 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.437 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.438 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.441 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.448 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.449 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.452 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.453 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.456 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.463 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.464 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.467 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.468 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.471 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.478 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.479 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.482 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.483 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.486 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.494 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.495 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.498 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.499 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.502 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.509 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.510 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.513 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.514 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.517 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.524 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.525 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.528 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.529 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.532 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.539 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.540 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.543 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.544 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.547 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.555 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.556 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.559 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.560 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.563 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.570 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.571 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.574 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.575 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.578 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.585 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.586 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.589 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.590 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.593 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.600 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.601 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.604 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.605 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.608 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.617 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.618 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.621 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.622 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.625 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.632 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.633 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.636 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.637 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.640 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.647 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.648 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.651 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.652 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.655 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.662 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.663 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.666 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.667 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.670 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.678 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.679 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.682 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.683 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.686 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.693 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.694 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.697 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.698 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.701 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.708 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.709 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.712 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.713 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.716 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.723 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.724 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.727 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.728 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.731 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.739 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.740 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.743 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.744 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.747 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.754 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.755 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.758 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.759 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.762 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.769 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.770 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.773 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.774 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.777 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.784 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.785 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.788 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.789 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.792 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.800 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.801 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.804 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.805 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.808 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.815 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.816 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.819 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.820 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.823 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.830 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.831 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.834 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.835 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.838 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.845 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.846 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.849 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.850 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.853 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.861 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.862 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.865 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.866 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.869 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.876 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.877 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.880 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.881 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.884 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.891 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.892 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.895 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.896 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.899 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.906 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.907 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.910 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.911 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.914 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.923 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.924 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.927 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.928 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.931 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.938 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.939 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.942 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.943 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.946 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.953 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.954 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.957 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.958 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.961 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.968 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.969 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.972 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.973 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.976 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.984 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.985 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.988 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.989 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.992 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.999 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1000 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1003 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1004 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1007 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1014 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1015 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1018 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1019 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1022 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1029 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1030 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1033 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1034 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1037 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1045 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1046 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1049 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1050 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1053 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1060 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1061 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1064 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1065 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1068 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1075 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1076 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1079 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1080 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1083 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1090 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1091 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1094 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1095 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1098 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1106 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1107 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1110 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1111 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1114 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1121 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1122 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1125 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1126 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1129 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1136 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1137 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1140 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1141 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1144 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1151 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1152 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1155 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1156 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1159 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1167 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1168 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1171 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1172 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1175 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1182 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1183 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1186 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1187 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1190 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1197 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1198 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1201 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1202 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1205 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1212 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1213 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1216 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1217 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1220 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1229 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1230 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1233 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1234 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1237 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1244 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1245 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1248 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1249 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1252 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1259 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1260 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1263 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1264 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1267 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1274 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1275 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1278 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1279 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1282 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1290 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1291 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1294 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1295 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1298 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1305 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1306 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1309 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1310 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1313 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1320 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1321 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1324 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1325 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1328 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1335 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1336 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1339 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1340 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1343 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1351 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1352 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1355 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1356 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1359 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1366 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1367 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1370 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1371 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1374 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1381 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1382 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1385 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1386 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1389 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1396 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1397 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1400 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1401 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1404 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1412 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1413 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1416 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1417 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1420 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1427 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1428 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1431 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1432 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1435 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1442 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1443 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1446 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1447 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1450 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1457 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1458 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1461 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1462 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1465 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1473 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1474 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1477 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1478 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1481 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1488 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1489 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1492 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1493 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1496 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1503 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1504 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1507 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1508 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1511 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1518 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1519 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1522 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1523 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1526 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1535 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1536 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1539 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1540 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1543 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1550 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1551 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1554 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1555 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1558 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1565 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1566 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1569 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1570 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1573 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1580 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1581 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1584 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1585 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1588 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1596 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1597 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1600 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1601 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1604 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1611 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1612 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1615 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1616 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1619 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1626 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1627 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1630 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1631 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1634 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1641 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1642 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1645 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1646 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1649 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1657 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1658 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1661 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1662 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1665 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1672 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1673 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1676 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1677 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1680 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1687 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1688 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1691 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1692 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1695 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1702 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1703 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1706 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1707 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1710 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1718 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1719 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1722 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1723 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1726 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1733 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1734 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1737 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1738 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1741 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1748 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1749 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1752 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1753 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1756 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1763 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1764 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1767 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1768 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1771 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1779 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1780 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1783 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1784 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1787 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1794 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1795 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1798 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1799 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1802 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1809 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1810 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1813 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1814 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1817 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1824 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1825 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1828 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1829 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %mem_tmp.1832 = alloca %"struct.std::dcomplex" ; <%"struct.std::dcomplex"*> [#uses=3] - %tmp.2.i = getelementptr %"struct.std::dcomplex"* %agg.result, i32 0, i32 0, i32 0 ; [#uses=13] - store double 0.000000e+00, double* %tmp.2.i - %tmp.6.i = getelementptr %"struct.std::dcomplex"* %agg.result, i32 0, i32 0, i32 1 ; [#uses=13] - store double 0.000000e+00, double* %tmp.6.i - %tmp.2.i34368 = getelementptr %"struct.std::dcomplex"* %ret5, i32 0, i32 0, i32 0 ; [#uses=66] - store double 0.000000e+00, double* %tmp.2.i34368 - %tmp.6.i34369 = getelementptr %"struct.std::dcomplex"* %ret5, i32 0, i32 0, i32 1 ; [#uses=66] - store double 0.000000e+00, double* %tmp.6.i34369 - %tmp.2.i34366 = getelementptr %"struct.std::dcomplex"* %ret4, i32 0, i32 0, i32 0 ; [#uses=270] - store double 0.000000e+00, double* %tmp.2.i34366 - %tmp.6.i34367 = getelementptr %"struct.std::dcomplex"* %ret4, i32 0, i32 0, i32 1 ; [#uses=270] - store double 0.000000e+00, double* %tmp.6.i34367 - %tmp.2.i34364 = getelementptr %"struct.std::dcomplex"* %ret3, i32 0, i32 0, i32 0 ; [#uses=121] - store double 0.000000e+00, double* %tmp.2.i34364 - %tmp.6.i34365 = getelementptr %"struct.std::dcomplex"* %ret3, i32 0, i32 0, i32 1 ; [#uses=121] - store double 0.000000e+00, double* %tmp.6.i34365 - %tmp.6 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 1, i32 1 ; <%"struct.std::dcomplex"*> [#uses=120] - %tmp.4.i34351 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34350, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i34352 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 0, i32 0, i32 0, i32 0 ; [#uses=120] - %tmp.6.i34353 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i34353, double* %tmp.4.i34351 - %tmp.7.i34354 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34350, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i34355 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 0, i32 0, i32 0, i32 1 ; [#uses=120] - %tmp.9.i34356 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i34356, double* %tmp.7.i34354 - %tmp.0.i34357 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i34350, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i34359 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34357, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34360 = load double* %tmp.14.i34359 ; [#uses=1] - %tmp.17.i34362 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34357, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34363 = load double* %tmp.17.i34362 ; [#uses=1] - %tmp.12 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 1, i32 0 ; <%"struct.std::dcomplex"*> [#uses=120] - %tmp.4.i34337 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34336, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i34338 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 0, i32 1, i32 0, i32 0 ; [#uses=120] - %tmp.6.i34339 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i34339, double* %tmp.4.i34337 - %tmp.7.i34340 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34336, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i34341 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 0, i32 1, i32 0, i32 1 ; [#uses=120] - %tmp.9.i34342 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i34342, double* %tmp.7.i34340 - %tmp.0.i34343 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i34336, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i34344 = getelementptr %"struct.std::dcomplex"* %mem_tmp.5, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i34345 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34343, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34346 = load double* %tmp.14.i34345 ; [#uses=1] - store double %tmp.15.i34346, double* %tmp.13.i34344 - %tmp.16.i34347 = getelementptr %"struct.std::dcomplex"* %mem_tmp.5, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i34348 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34343, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34349 = load double* %tmp.17.i34348 ; [#uses=1] - store double %tmp.18.i34349, double* %tmp.16.i34347 - %tmp.4.i34323 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34322, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i34360, double* %tmp.4.i34323 - %tmp.7.i34326 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34322, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i34363, double* %tmp.7.i34326 - %tmp.0.i34329 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i34322, %"struct.std::dcomplex"* %mem_tmp.5 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i34331 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34329, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34332 = load double* %tmp.14.i34331 ; [#uses=1] - %tmp.17.i34334 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34329, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34335 = load double* %tmp.17.i34334 ; [#uses=1] - %tmp.15 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 2, i32 2 ; <%"struct.std::dcomplex"*> [#uses=60] - %tmp.4.i34309 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34308, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i34332, double* %tmp.4.i34309 - %tmp.7.i34312 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34308, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i34335, double* %tmp.7.i34312 - %tmp.0.i34315 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i34308, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i34317 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34315, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34318 = load double* %tmp.14.i34317 ; [#uses=1] - %tmp.17.i34320 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34315, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34321 = load double* %tmp.17.i34320 ; [#uses=1] - %tmp.21 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 1, i32 2 ; <%"struct.std::dcomplex"*> [#uses=120] - %tmp.4.i34295 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34294, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i34297 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i34297, double* %tmp.4.i34295 - %tmp.7.i34298 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34294, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i34300 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i34300, double* %tmp.7.i34298 - %tmp.0.i34301 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i34294, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i34303 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34301, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34304 = load double* %tmp.14.i34303 ; [#uses=1] - %tmp.17.i34306 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34301, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34307 = load double* %tmp.17.i34306 ; [#uses=1] - %tmp.4.i34281 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34280, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i34282 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 0, i32 2, i32 0, i32 0 ; [#uses=120] - %tmp.6.i34283 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i34283, double* %tmp.4.i34281 - %tmp.7.i34284 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34280, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i34285 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 0, i32 2, i32 0, i32 1 ; [#uses=120] - %tmp.9.i34286 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i34286, double* %tmp.7.i34284 - %tmp.0.i34287 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i34280, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i34288 = getelementptr %"struct.std::dcomplex"* %mem_tmp.9, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i34289 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34287, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34290 = load double* %tmp.14.i34289 ; [#uses=1] - store double %tmp.15.i34290, double* %tmp.13.i34288 - %tmp.16.i34291 = getelementptr %"struct.std::dcomplex"* %mem_tmp.9, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i34292 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34287, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34293 = load double* %tmp.17.i34292 ; [#uses=1] - store double %tmp.18.i34293, double* %tmp.16.i34291 - %tmp.4.i34267 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34266, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i34304, double* %tmp.4.i34267 - %tmp.7.i34270 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34266, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i34307, double* %tmp.7.i34270 - %tmp.0.i34273 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i34266, %"struct.std::dcomplex"* %mem_tmp.9 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i34275 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34273, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34276 = load double* %tmp.14.i34275 ; [#uses=1] - %tmp.17.i34278 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34273, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34279 = load double* %tmp.17.i34278 ; [#uses=1] - %tmp.30 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 2, i32 0 ; <%"struct.std::dcomplex"*> [#uses=60] - %tmp.4.i34253 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34252, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i34276, double* %tmp.4.i34253 - %tmp.7.i34256 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34252, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i34279, double* %tmp.7.i34256 - %tmp.0.i34259 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i34252, %"struct.std::dcomplex"* %tmp.30 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i34260 = getelementptr %"struct.std::dcomplex"* %mem_tmp.6, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i34261 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34259, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34262 = load double* %tmp.14.i34261 ; [#uses=1] - store double %tmp.15.i34262, double* %tmp.13.i34260 - %tmp.16.i34263 = getelementptr %"struct.std::dcomplex"* %mem_tmp.6, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i34264 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34259, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34265 = load double* %tmp.17.i34264 ; [#uses=1] - store double %tmp.18.i34265, double* %tmp.16.i34263 - %tmp.4.i34239 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34238, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i34318, double* %tmp.4.i34239 - %tmp.7.i34242 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34238, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i34321, double* %tmp.7.i34242 - %tmp.0.i34245 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i34238, %"struct.std::dcomplex"* %mem_tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i34247 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34245, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34248 = load double* %tmp.14.i34247 ; [#uses=1] - %tmp.17.i34250 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34245, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34251 = load double* %tmp.17.i34250 ; [#uses=1] - %tmp.4.i34225 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34224, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i34227 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i34227, double* %tmp.4.i34225 - %tmp.7.i34228 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34224, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i34230 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i34230, double* %tmp.7.i34228 - %tmp.0.i34231 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i34224, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i34233 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34231, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34234 = load double* %tmp.14.i34233 ; [#uses=1] - %tmp.17.i34236 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34231, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34237 = load double* %tmp.17.i34236 ; [#uses=1] - %tmp.4.i34211 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34210, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i34213 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i34213, double* %tmp.4.i34211 - %tmp.7.i34214 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34210, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i34216 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i34216, double* %tmp.7.i34214 - %tmp.0.i34217 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i34210, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i34218 = getelementptr %"struct.std::dcomplex"* %mem_tmp.13, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i34219 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34217, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34220 = load double* %tmp.14.i34219 ; [#uses=1] - store double %tmp.15.i34220, double* %tmp.13.i34218 - %tmp.16.i34221 = getelementptr %"struct.std::dcomplex"* %mem_tmp.13, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i34222 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34217, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34223 = load double* %tmp.17.i34222 ; [#uses=1] - store double %tmp.18.i34223, double* %tmp.16.i34221 - %tmp.4.i34197 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34196, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i34234, double* %tmp.4.i34197 - %tmp.7.i34200 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34196, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i34237, double* %tmp.7.i34200 - %tmp.0.i34203 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i34196, %"struct.std::dcomplex"* %mem_tmp.13 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i34205 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34203, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34206 = load double* %tmp.14.i34205 ; [#uses=1] - %tmp.17.i34208 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34203, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34209 = load double* %tmp.17.i34208 ; [#uses=1] - %tmp.45 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 2, i32 1 ; <%"struct.std::dcomplex"*> [#uses=60] - %tmp.4.i34183 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34182, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i34206, double* %tmp.4.i34183 - %tmp.7.i34186 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34182, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i34209, double* %tmp.7.i34186 - %tmp.0.i34189 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i34182, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i34190 = getelementptr %"struct.std::dcomplex"* %mem_tmp.10, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i34191 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34189, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34192 = load double* %tmp.14.i34191 ; [#uses=1] - store double %tmp.15.i34192, double* %tmp.13.i34190 - %tmp.16.i34193 = getelementptr %"struct.std::dcomplex"* %mem_tmp.10, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i34194 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34189, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34195 = load double* %tmp.17.i34194 ; [#uses=1] - store double %tmp.18.i34195, double* %tmp.16.i34193 - %tmp.4.i34169 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34168, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i34248, double* %tmp.4.i34169 - %tmp.7.i34172 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34168, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i34251, double* %tmp.7.i34172 - %tmp.0.i34175 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i34168, %"struct.std::dcomplex"* %mem_tmp.10 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i34177 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34175, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34178 = load double* %tmp.14.i34177 ; [#uses=1] - %tmp.17.i34180 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34175, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34181 = load double* %tmp.17.i34180 ; [#uses=1] - store double %tmp.15.i34178, double* %tmp.2.i34364 - store double %tmp.18.i34181, double* %tmp.6.i34365 - %tmp.4.i34135 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34134, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i34136 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 3, i32 3, i32 0, i32 0 ; [#uses=20] - %tmp.6.i34137 = load double* %tmp.5.i34136 ; [#uses=1] - store double %tmp.6.i34137, double* %tmp.4.i34135 - %tmp.7.i34138 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34134, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i34139 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 3, i32 3, i32 0, i32 1 ; [#uses=20] - %tmp.9.i34140 = load double* %tmp.8.i34139 ; [#uses=1] - store double %tmp.9.i34140, double* %tmp.7.i34138 - %tmp.0.i34141 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i34134, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i34143 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34141, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34144 = load double* %tmp.14.i34143 ; [#uses=1] - %tmp.17.i34146 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34141, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34147 = load double* %tmp.17.i34146 ; [#uses=1] - %tmp.7.i34101 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i34115 = add double %tmp.7.i34101, %tmp.15.i34144 ; [#uses=1] - store double %tmp.15.i34115, double* %tmp.2.i34366 - %tmp.26.i34122 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i34133 = add double %tmp.26.i34122, %tmp.18.i34147 ; [#uses=1] - store double %tmp.31.i34133, double* %tmp.6.i34367 - %tmp.4.i34081 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34080, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i34082 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 0, i32 3, i32 0, i32 0 ; [#uses=120] - %tmp.6.i34083 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i34083, double* %tmp.4.i34081 - %tmp.7.i34084 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34080, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i34085 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 0, i32 3, i32 0, i32 1 ; [#uses=120] - %tmp.9.i34086 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i34086, double* %tmp.7.i34084 - %tmp.0.i34087 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i34080, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i34089 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34087, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34090 = load double* %tmp.14.i34089 ; [#uses=1] - %tmp.17.i34092 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34087, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34093 = load double* %tmp.17.i34092 ; [#uses=1] - %tmp.62 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 1, i32 3 ; <%"struct.std::dcomplex"*> [#uses=120] - %tmp.4.i34067 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34066, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i34069 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i34069, double* %tmp.4.i34067 - %tmp.7.i34070 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34066, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i34072 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i34072, double* %tmp.7.i34070 - %tmp.0.i34073 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i34066, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i34074 = getelementptr %"struct.std::dcomplex"* %mem_tmp.20, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i34075 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34073, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34076 = load double* %tmp.14.i34075 ; [#uses=1] - store double %tmp.15.i34076, double* %tmp.13.i34074 - %tmp.16.i34077 = getelementptr %"struct.std::dcomplex"* %mem_tmp.20, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i34078 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34073, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34079 = load double* %tmp.17.i34078 ; [#uses=1] - store double %tmp.18.i34079, double* %tmp.16.i34077 - %tmp.4.i34053 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34052, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i34090, double* %tmp.4.i34053 - %tmp.7.i34056 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34052, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i34093, double* %tmp.7.i34056 - %tmp.0.i34059 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i34052, %"struct.std::dcomplex"* %mem_tmp.20 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i34061 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34059, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34062 = load double* %tmp.14.i34061 ; [#uses=1] - %tmp.17.i34064 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34059, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34065 = load double* %tmp.17.i34064 ; [#uses=1] - %tmp.4.i34039 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34038, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i34062, double* %tmp.4.i34039 - %tmp.7.i34042 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34038, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i34065, double* %tmp.7.i34042 - %tmp.0.i34045 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i34038, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i34047 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34045, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34048 = load double* %tmp.14.i34047 ; [#uses=1] - %tmp.17.i34050 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34045, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34051 = load double* %tmp.17.i34050 ; [#uses=1] - %tmp.4.i34025 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34024, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i34027 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i34027, double* %tmp.4.i34025 - %tmp.7.i34028 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34024, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i34030 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i34030, double* %tmp.7.i34028 - %tmp.0.i34031 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i34024, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i34033 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34031, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34034 = load double* %tmp.14.i34033 ; [#uses=1] - %tmp.17.i34036 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34031, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34037 = load double* %tmp.17.i34036 ; [#uses=1] - %tmp.4.i34011 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34010, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i34013 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i34013, double* %tmp.4.i34011 - %tmp.7.i34014 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i34010, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i34016 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i34016, double* %tmp.7.i34014 - %tmp.0.i34017 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i34010, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i34018 = getelementptr %"struct.std::dcomplex"* %mem_tmp.24, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i34019 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34017, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34020 = load double* %tmp.14.i34019 ; [#uses=1] - store double %tmp.15.i34020, double* %tmp.13.i34018 - %tmp.16.i34021 = getelementptr %"struct.std::dcomplex"* %mem_tmp.24, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i34022 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34017, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34023 = load double* %tmp.17.i34022 ; [#uses=1] - store double %tmp.18.i34023, double* %tmp.16.i34021 - %tmp.4.i33997 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33996, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i34034, double* %tmp.4.i33997 - %tmp.7.i34000 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33996, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i34037, double* %tmp.7.i34000 - %tmp.0.i34003 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i33996, %"struct.std::dcomplex"* %mem_tmp.24 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i34005 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34003, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i34006 = load double* %tmp.14.i34005 ; [#uses=1] - %tmp.17.i34008 = getelementptr %"struct.std::dcomplex"* %tmp.0.i34003, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i34009 = load double* %tmp.17.i34008 ; [#uses=1] - %tmp.4.i33983 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33982, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i34006, double* %tmp.4.i33983 - %tmp.7.i33986 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33982, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i34009, double* %tmp.7.i33986 - %tmp.0.i33989 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33982, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33990 = getelementptr %"struct.std::dcomplex"* %mem_tmp.21, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33991 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33989, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33992 = load double* %tmp.14.i33991 ; [#uses=1] - store double %tmp.15.i33992, double* %tmp.13.i33990 - %tmp.16.i33993 = getelementptr %"struct.std::dcomplex"* %mem_tmp.21, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33994 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33989, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33995 = load double* %tmp.17.i33994 ; [#uses=1] - store double %tmp.18.i33995, double* %tmp.16.i33993 - %tmp.4.i33969 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33968, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i34048, double* %tmp.4.i33969 - %tmp.7.i33972 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33968, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i34051, double* %tmp.7.i33972 - %tmp.0.i33975 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33968, %"struct.std::dcomplex"* %mem_tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33977 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33975, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33978 = load double* %tmp.14.i33977 ; [#uses=1] - %tmp.17.i33980 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33975, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33981 = load double* %tmp.17.i33980 ; [#uses=1] - %tmp.4.i33955 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33954, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33957 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i33957, double* %tmp.4.i33955 - %tmp.7.i33958 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33954, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33960 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i33960, double* %tmp.7.i33958 - %tmp.0.i33961 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33954, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33963 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33961, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33964 = load double* %tmp.14.i33963 ; [#uses=1] - %tmp.17.i33966 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33961, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33967 = load double* %tmp.17.i33966 ; [#uses=1] - %tmp.4.i33941 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33940, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33943 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i33943, double* %tmp.4.i33941 - %tmp.7.i33944 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33940, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33946 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i33946, double* %tmp.7.i33944 - %tmp.0.i33947 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33940, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33948 = getelementptr %"struct.std::dcomplex"* %mem_tmp.28, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33949 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33947, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33950 = load double* %tmp.14.i33949 ; [#uses=1] - store double %tmp.15.i33950, double* %tmp.13.i33948 - %tmp.16.i33951 = getelementptr %"struct.std::dcomplex"* %mem_tmp.28, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33952 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33947, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33953 = load double* %tmp.17.i33952 ; [#uses=1] - store double %tmp.18.i33953, double* %tmp.16.i33951 - %tmp.4.i33927 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33926, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33964, double* %tmp.4.i33927 - %tmp.7.i33930 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33926, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33967, double* %tmp.7.i33930 - %tmp.0.i33933 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i33926, %"struct.std::dcomplex"* %mem_tmp.28 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33935 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33933, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33936 = load double* %tmp.14.i33935 ; [#uses=1] - %tmp.17.i33938 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33933, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33939 = load double* %tmp.17.i33938 ; [#uses=1] - %tmp.95 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 2, i32 3 ; <%"struct.std::dcomplex"*> [#uses=60] - %tmp.4.i33913 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33912, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33936, double* %tmp.4.i33913 - %tmp.7.i33916 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33912, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33939, double* %tmp.7.i33916 - %tmp.0.i33919 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33912, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33920 = getelementptr %"struct.std::dcomplex"* %mem_tmp.25, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33921 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33919, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33922 = load double* %tmp.14.i33921 ; [#uses=1] - store double %tmp.15.i33922, double* %tmp.13.i33920 - %tmp.16.i33923 = getelementptr %"struct.std::dcomplex"* %mem_tmp.25, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33924 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33919, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33925 = load double* %tmp.17.i33924 ; [#uses=1] - store double %tmp.18.i33925, double* %tmp.16.i33923 - %tmp.4.i33899 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33898, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33978, double* %tmp.4.i33899 - %tmp.7.i33902 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33898, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33981, double* %tmp.7.i33902 - %tmp.0.i33905 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33898, %"struct.std::dcomplex"* %mem_tmp.25 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33907 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33905, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33908 = load double* %tmp.14.i33907 ; [#uses=1] - %tmp.17.i33910 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33905, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33911 = load double* %tmp.17.i33910 ; [#uses=1] - store double %tmp.15.i33908, double* %tmp.2.i34364 - store double %tmp.18.i33911, double* %tmp.6.i34365 - %tmp.4.i33865 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33864, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i33866 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 3, i32 0, i32 0, i32 0 ; [#uses=20] - %tmp.6.i33867 = load double* %tmp.5.i33866 ; [#uses=1] - store double %tmp.6.i33867, double* %tmp.4.i33865 - %tmp.7.i33868 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33864, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i33869 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 3, i32 0, i32 0, i32 1 ; [#uses=20] - %tmp.9.i33870 = load double* %tmp.8.i33869 ; [#uses=1] - store double %tmp.9.i33870, double* %tmp.7.i33868 - %tmp.0.i33871 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33864, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33873 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33871, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33874 = load double* %tmp.14.i33873 ; [#uses=1] - %tmp.17.i33876 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33871, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33877 = load double* %tmp.17.i33876 ; [#uses=1] - %tmp.7.i33831 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i33845 = add double %tmp.7.i33831, %tmp.15.i33874 ; [#uses=1] - store double %tmp.15.i33845, double* %tmp.2.i34366 - %tmp.26.i33852 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i33863 = add double %tmp.26.i33852, %tmp.18.i33877 ; [#uses=1] - store double %tmp.31.i33863, double* %tmp.6.i34367 - %tmp.4.i33811 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33810, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33813 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i33813, double* %tmp.4.i33811 - %tmp.7.i33814 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33810, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33816 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i33816, double* %tmp.7.i33814 - %tmp.0.i33817 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33810, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33819 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33817, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33820 = load double* %tmp.14.i33819 ; [#uses=1] - %tmp.17.i33822 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33817, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33823 = load double* %tmp.17.i33822 ; [#uses=1] - %tmp.4.i33797 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33796, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33799 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i33799, double* %tmp.4.i33797 - %tmp.7.i33800 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33796, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33802 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i33802, double* %tmp.7.i33800 - %tmp.0.i33803 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33796, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33804 = getelementptr %"struct.std::dcomplex"* %mem_tmp.35, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33805 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33803, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33806 = load double* %tmp.14.i33805 ; [#uses=1] - store double %tmp.15.i33806, double* %tmp.13.i33804 - %tmp.16.i33807 = getelementptr %"struct.std::dcomplex"* %mem_tmp.35, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33808 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33803, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33809 = load double* %tmp.17.i33808 ; [#uses=1] - store double %tmp.18.i33809, double* %tmp.16.i33807 - %tmp.4.i33783 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33782, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33820, double* %tmp.4.i33783 - %tmp.7.i33786 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33782, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33823, double* %tmp.7.i33786 - %tmp.0.i33789 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i33782, %"struct.std::dcomplex"* %mem_tmp.35 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33791 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33789, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33792 = load double* %tmp.14.i33791 ; [#uses=1] - %tmp.17.i33794 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33789, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33795 = load double* %tmp.17.i33794 ; [#uses=1] - %tmp.4.i33769 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33768, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33792, double* %tmp.4.i33769 - %tmp.7.i33772 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33768, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33795, double* %tmp.7.i33772 - %tmp.0.i33775 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33768, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33777 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33775, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33778 = load double* %tmp.14.i33777 ; [#uses=1] - %tmp.17.i33780 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33775, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33781 = load double* %tmp.17.i33780 ; [#uses=1] - %tmp.4.i33755 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33754, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33757 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i33757, double* %tmp.4.i33755 - %tmp.7.i33758 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33754, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33760 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i33760, double* %tmp.7.i33758 - %tmp.0.i33761 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33754, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33763 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33761, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33764 = load double* %tmp.14.i33763 ; [#uses=1] - %tmp.17.i33766 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33761, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33767 = load double* %tmp.17.i33766 ; [#uses=1] - %tmp.4.i33741 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33740, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33743 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i33743, double* %tmp.4.i33741 - %tmp.7.i33744 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33740, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33746 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i33746, double* %tmp.7.i33744 - %tmp.0.i33747 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33740, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33748 = getelementptr %"struct.std::dcomplex"* %mem_tmp.39, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33749 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33747, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33750 = load double* %tmp.14.i33749 ; [#uses=1] - store double %tmp.15.i33750, double* %tmp.13.i33748 - %tmp.16.i33751 = getelementptr %"struct.std::dcomplex"* %mem_tmp.39, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33752 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33747, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33753 = load double* %tmp.17.i33752 ; [#uses=1] - store double %tmp.18.i33753, double* %tmp.16.i33751 - %tmp.4.i33727 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33726, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33764, double* %tmp.4.i33727 - %tmp.7.i33730 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33726, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33767, double* %tmp.7.i33730 - %tmp.0.i33733 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i33726, %"struct.std::dcomplex"* %mem_tmp.39 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33735 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33733, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33736 = load double* %tmp.14.i33735 ; [#uses=1] - %tmp.17.i33738 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33733, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33739 = load double* %tmp.17.i33738 ; [#uses=1] - %tmp.4.i33713 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33712, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33736, double* %tmp.4.i33713 - %tmp.7.i33716 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33712, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33739, double* %tmp.7.i33716 - %tmp.0.i33719 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33712, %"struct.std::dcomplex"* %tmp.30 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33720 = getelementptr %"struct.std::dcomplex"* %mem_tmp.36, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33721 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33719, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33722 = load double* %tmp.14.i33721 ; [#uses=1] - store double %tmp.15.i33722, double* %tmp.13.i33720 - %tmp.16.i33723 = getelementptr %"struct.std::dcomplex"* %mem_tmp.36, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33724 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33719, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33725 = load double* %tmp.17.i33724 ; [#uses=1] - store double %tmp.18.i33725, double* %tmp.16.i33723 - %tmp.4.i33699 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33698, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33778, double* %tmp.4.i33699 - %tmp.7.i33702 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33698, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33781, double* %tmp.7.i33702 - %tmp.0.i33705 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33698, %"struct.std::dcomplex"* %mem_tmp.36 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33707 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33705, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33708 = load double* %tmp.14.i33707 ; [#uses=1] - %tmp.17.i33710 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33705, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33711 = load double* %tmp.17.i33710 ; [#uses=1] - %tmp.4.i33685 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33684, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33687 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i33687, double* %tmp.4.i33685 - %tmp.7.i33688 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33684, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33690 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i33690, double* %tmp.7.i33688 - %tmp.0.i33691 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33684, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33693 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33691, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33694 = load double* %tmp.14.i33693 ; [#uses=1] - %tmp.17.i33696 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33691, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33697 = load double* %tmp.17.i33696 ; [#uses=1] - %tmp.4.i33671 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33670, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33673 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i33673, double* %tmp.4.i33671 - %tmp.7.i33674 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33670, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33676 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i33676, double* %tmp.7.i33674 - %tmp.0.i33677 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33670, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33678 = getelementptr %"struct.std::dcomplex"* %mem_tmp.43, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33679 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33677, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33680 = load double* %tmp.14.i33679 ; [#uses=1] - store double %tmp.15.i33680, double* %tmp.13.i33678 - %tmp.16.i33681 = getelementptr %"struct.std::dcomplex"* %mem_tmp.43, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33682 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33677, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33683 = load double* %tmp.17.i33682 ; [#uses=1] - store double %tmp.18.i33683, double* %tmp.16.i33681 - %tmp.4.i33657 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33656, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33694, double* %tmp.4.i33657 - %tmp.7.i33660 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33656, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33697, double* %tmp.7.i33660 - %tmp.0.i33663 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i33656, %"struct.std::dcomplex"* %mem_tmp.43 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33665 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33663, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33666 = load double* %tmp.14.i33665 ; [#uses=1] - %tmp.17.i33668 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33663, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33669 = load double* %tmp.17.i33668 ; [#uses=1] - %tmp.4.i33643 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33642, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33666, double* %tmp.4.i33643 - %tmp.7.i33646 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33642, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33669, double* %tmp.7.i33646 - %tmp.0.i33649 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33642, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33650 = getelementptr %"struct.std::dcomplex"* %mem_tmp.40, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33651 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33649, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33652 = load double* %tmp.14.i33651 ; [#uses=1] - store double %tmp.15.i33652, double* %tmp.13.i33650 - %tmp.16.i33653 = getelementptr %"struct.std::dcomplex"* %mem_tmp.40, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33654 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33649, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33655 = load double* %tmp.17.i33654 ; [#uses=1] - store double %tmp.18.i33655, double* %tmp.16.i33653 - %tmp.4.i33629 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33628, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33708, double* %tmp.4.i33629 - %tmp.7.i33632 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33628, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33711, double* %tmp.7.i33632 - %tmp.0.i33635 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33628, %"struct.std::dcomplex"* %mem_tmp.40 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33637 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33635, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33638 = load double* %tmp.14.i33637 ; [#uses=1] - %tmp.17.i33640 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33635, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33641 = load double* %tmp.17.i33640 ; [#uses=1] - store double %tmp.15.i33638, double* %tmp.2.i34364 - store double %tmp.18.i33641, double* %tmp.6.i34365 - %tmp.4.i33595 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33594, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i33596 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 3, i32 1, i32 0, i32 0 ; [#uses=20] - %tmp.6.i33597 = load double* %tmp.5.i33596 ; [#uses=1] - store double %tmp.6.i33597, double* %tmp.4.i33595 - %tmp.7.i33598 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33594, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i33599 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 3, i32 1, i32 0, i32 1 ; [#uses=20] - %tmp.9.i33600 = load double* %tmp.8.i33599 ; [#uses=1] - store double %tmp.9.i33600, double* %tmp.7.i33598 - %tmp.0.i33601 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33594, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33603 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33601, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33604 = load double* %tmp.14.i33603 ; [#uses=1] - %tmp.17.i33606 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33601, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33607 = load double* %tmp.17.i33606 ; [#uses=1] - %tmp.7.i33561 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i33575 = add double %tmp.7.i33561, %tmp.15.i33604 ; [#uses=1] - store double %tmp.15.i33575, double* %tmp.2.i34366 - %tmp.26.i33582 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i33593 = add double %tmp.26.i33582, %tmp.18.i33607 ; [#uses=1] - store double %tmp.31.i33593, double* %tmp.6.i34367 - %tmp.4.i33541 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33540, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33543 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i33543, double* %tmp.4.i33541 - %tmp.7.i33544 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33540, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33546 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i33546, double* %tmp.7.i33544 - %tmp.0.i33547 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33540, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33549 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33547, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33550 = load double* %tmp.14.i33549 ; [#uses=1] - %tmp.17.i33552 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33547, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33553 = load double* %tmp.17.i33552 ; [#uses=1] - %tmp.4.i33527 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33526, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33529 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i33529, double* %tmp.4.i33527 - %tmp.7.i33530 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33526, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33532 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i33532, double* %tmp.7.i33530 - %tmp.0.i33533 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33526, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33534 = getelementptr %"struct.std::dcomplex"* %mem_tmp.50, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33535 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33533, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33536 = load double* %tmp.14.i33535 ; [#uses=1] - store double %tmp.15.i33536, double* %tmp.13.i33534 - %tmp.16.i33537 = getelementptr %"struct.std::dcomplex"* %mem_tmp.50, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33538 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33533, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33539 = load double* %tmp.17.i33538 ; [#uses=1] - store double %tmp.18.i33539, double* %tmp.16.i33537 - %tmp.4.i33513 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33512, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33550, double* %tmp.4.i33513 - %tmp.7.i33516 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33512, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33553, double* %tmp.7.i33516 - %tmp.0.i33519 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i33512, %"struct.std::dcomplex"* %mem_tmp.50 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33521 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33519, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33522 = load double* %tmp.14.i33521 ; [#uses=1] - %tmp.17.i33524 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33519, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33525 = load double* %tmp.17.i33524 ; [#uses=1] - %tmp.4.i33499 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33498, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33522, double* %tmp.4.i33499 - %tmp.7.i33502 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33498, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33525, double* %tmp.7.i33502 - %tmp.0.i33505 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33498, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33507 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33505, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33508 = load double* %tmp.14.i33507 ; [#uses=1] - %tmp.17.i33510 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33505, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33511 = load double* %tmp.17.i33510 ; [#uses=1] - %tmp.4.i33485 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33484, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33487 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i33487, double* %tmp.4.i33485 - %tmp.7.i33488 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33484, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33490 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i33490, double* %tmp.7.i33488 - %tmp.0.i33491 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33484, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33493 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33491, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33494 = load double* %tmp.14.i33493 ; [#uses=1] - %tmp.17.i33496 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33491, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33497 = load double* %tmp.17.i33496 ; [#uses=1] - %tmp.4.i33471 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33470, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33473 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i33473, double* %tmp.4.i33471 - %tmp.7.i33474 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33470, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33476 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i33476, double* %tmp.7.i33474 - %tmp.0.i33477 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33470, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33478 = getelementptr %"struct.std::dcomplex"* %mem_tmp.54, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33479 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33477, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33480 = load double* %tmp.14.i33479 ; [#uses=1] - store double %tmp.15.i33480, double* %tmp.13.i33478 - %tmp.16.i33481 = getelementptr %"struct.std::dcomplex"* %mem_tmp.54, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33482 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33477, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33483 = load double* %tmp.17.i33482 ; [#uses=1] - store double %tmp.18.i33483, double* %tmp.16.i33481 - %tmp.4.i33457 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33456, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33494, double* %tmp.4.i33457 - %tmp.7.i33460 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33456, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33497, double* %tmp.7.i33460 - %tmp.0.i33463 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i33456, %"struct.std::dcomplex"* %mem_tmp.54 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33465 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33463, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33466 = load double* %tmp.14.i33465 ; [#uses=1] - %tmp.17.i33468 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33463, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33469 = load double* %tmp.17.i33468 ; [#uses=1] - %tmp.4.i33443 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33442, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33466, double* %tmp.4.i33443 - %tmp.7.i33446 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33442, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33469, double* %tmp.7.i33446 - %tmp.0.i33449 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33442, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33450 = getelementptr %"struct.std::dcomplex"* %mem_tmp.51, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33451 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33449, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33452 = load double* %tmp.14.i33451 ; [#uses=1] - store double %tmp.15.i33452, double* %tmp.13.i33450 - %tmp.16.i33453 = getelementptr %"struct.std::dcomplex"* %mem_tmp.51, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33454 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33449, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33455 = load double* %tmp.17.i33454 ; [#uses=1] - store double %tmp.18.i33455, double* %tmp.16.i33453 - %tmp.4.i33429 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33428, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33508, double* %tmp.4.i33429 - %tmp.7.i33432 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33428, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33511, double* %tmp.7.i33432 - %tmp.0.i33435 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33428, %"struct.std::dcomplex"* %mem_tmp.51 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33437 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33435, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33438 = load double* %tmp.14.i33437 ; [#uses=1] - %tmp.17.i33440 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33435, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33441 = load double* %tmp.17.i33440 ; [#uses=1] - %tmp.4.i33415 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33414, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33417 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i33417, double* %tmp.4.i33415 - %tmp.7.i33418 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33414, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33420 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i33420, double* %tmp.7.i33418 - %tmp.0.i33421 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33414, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33423 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33421, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33424 = load double* %tmp.14.i33423 ; [#uses=1] - %tmp.17.i33426 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33421, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33427 = load double* %tmp.17.i33426 ; [#uses=1] - %tmp.4.i33401 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33400, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33403 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i33403, double* %tmp.4.i33401 - %tmp.7.i33404 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33400, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33406 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i33406, double* %tmp.7.i33404 - %tmp.0.i33407 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33400, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33408 = getelementptr %"struct.std::dcomplex"* %mem_tmp.58, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33409 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33407, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33410 = load double* %tmp.14.i33409 ; [#uses=1] - store double %tmp.15.i33410, double* %tmp.13.i33408 - %tmp.16.i33411 = getelementptr %"struct.std::dcomplex"* %mem_tmp.58, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33412 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33407, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33413 = load double* %tmp.17.i33412 ; [#uses=1] - store double %tmp.18.i33413, double* %tmp.16.i33411 - %tmp.4.i33387 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33386, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33424, double* %tmp.4.i33387 - %tmp.7.i33390 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33386, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33427, double* %tmp.7.i33390 - %tmp.0.i33393 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i33386, %"struct.std::dcomplex"* %mem_tmp.58 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33395 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33393, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33396 = load double* %tmp.14.i33395 ; [#uses=1] - %tmp.17.i33398 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33393, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33399 = load double* %tmp.17.i33398 ; [#uses=1] - %tmp.4.i33373 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33372, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33396, double* %tmp.4.i33373 - %tmp.7.i33376 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33372, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33399, double* %tmp.7.i33376 - %tmp.0.i33379 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33372, %"struct.std::dcomplex"* %tmp.30 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33380 = getelementptr %"struct.std::dcomplex"* %mem_tmp.55, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33381 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33379, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33382 = load double* %tmp.14.i33381 ; [#uses=1] - store double %tmp.15.i33382, double* %tmp.13.i33380 - %tmp.16.i33383 = getelementptr %"struct.std::dcomplex"* %mem_tmp.55, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33384 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33379, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33385 = load double* %tmp.17.i33384 ; [#uses=1] - store double %tmp.18.i33385, double* %tmp.16.i33383 - %tmp.4.i33359 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33358, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33438, double* %tmp.4.i33359 - %tmp.7.i33362 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33358, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33441, double* %tmp.7.i33362 - %tmp.0.i33365 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33358, %"struct.std::dcomplex"* %mem_tmp.55 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33367 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33365, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33368 = load double* %tmp.14.i33367 ; [#uses=1] - %tmp.17.i33370 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33365, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33371 = load double* %tmp.17.i33370 ; [#uses=1] - store double %tmp.15.i33368, double* %tmp.2.i34364 - store double %tmp.18.i33371, double* %tmp.6.i34365 - %tmp.4.i33325 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33324, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i33326 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 3, i32 2, i32 0, i32 0 ; [#uses=20] - %tmp.6.i33327 = load double* %tmp.5.i33326 ; [#uses=1] - store double %tmp.6.i33327, double* %tmp.4.i33325 - %tmp.7.i33328 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33324, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i33329 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 3, i32 2, i32 0, i32 1 ; [#uses=20] - %tmp.9.i33330 = load double* %tmp.8.i33329 ; [#uses=1] - store double %tmp.9.i33330, double* %tmp.7.i33328 - %tmp.0.i33331 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33324, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33333 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33331, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33334 = load double* %tmp.14.i33333 ; [#uses=1] - %tmp.17.i33336 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33331, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33337 = load double* %tmp.17.i33336 ; [#uses=1] - %tmp.7.i33291 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i33305 = add double %tmp.7.i33291, %tmp.15.i33334 ; [#uses=1] - store double %tmp.15.i33305, double* %tmp.2.i34366 - %tmp.26.i33312 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i33323 = add double %tmp.26.i33312, %tmp.18.i33337 ; [#uses=1] - store double %tmp.31.i33323, double* %tmp.6.i34367 - %tmp.4.i33271 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33270, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i33272 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 4, i32 4, i32 0, i32 0 ; [#uses=5] - %tmp.6.i33273 = load double* %tmp.5.i33272 ; [#uses=1] - store double %tmp.6.i33273, double* %tmp.4.i33271 - %tmp.7.i33274 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33270, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i33275 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 4, i32 4, i32 0, i32 1 ; [#uses=5] - %tmp.9.i33276 = load double* %tmp.8.i33275 ; [#uses=1] - store double %tmp.9.i33276, double* %tmp.7.i33274 - %tmp.0.i33277 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33270, %"struct.std::dcomplex"* %ret4 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33279 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33277, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33280 = load double* %tmp.14.i33279 ; [#uses=1] - %tmp.17.i33282 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33277, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33283 = load double* %tmp.17.i33282 ; [#uses=1] - %tmp.7.i33237 = load double* %tmp.2.i34368 ; [#uses=1] - %tmp.15.i33251 = add double %tmp.7.i33237, %tmp.15.i33280 ; [#uses=1] - store double %tmp.15.i33251, double* %tmp.2.i34368 - %tmp.26.i33258 = load double* %tmp.6.i34369 ; [#uses=1] - %tmp.31.i33269 = add double %tmp.26.i33258, %tmp.18.i33283 ; [#uses=1] - store double %tmp.31.i33269, double* %tmp.6.i34369 - store double 0.000000e+00, double* %tmp.2.i34366 - store double 0.000000e+00, double* %tmp.6.i34367 - %tmp.4.i33215 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33214, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33217 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i33217, double* %tmp.4.i33215 - %tmp.7.i33218 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33214, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33220 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i33220, double* %tmp.7.i33218 - %tmp.0.i33221 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33214, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33223 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33221, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33224 = load double* %tmp.14.i33223 ; [#uses=1] - %tmp.17.i33226 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33221, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33227 = load double* %tmp.17.i33226 ; [#uses=1] - %tmp.4.i33201 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33200, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33203 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i33203, double* %tmp.4.i33201 - %tmp.7.i33204 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33200, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33206 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i33206, double* %tmp.7.i33204 - %tmp.0.i33207 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33200, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33208 = getelementptr %"struct.std::dcomplex"* %mem_tmp.66, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33209 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33207, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33210 = load double* %tmp.14.i33209 ; [#uses=1] - store double %tmp.15.i33210, double* %tmp.13.i33208 - %tmp.16.i33211 = getelementptr %"struct.std::dcomplex"* %mem_tmp.66, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33212 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33207, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33213 = load double* %tmp.17.i33212 ; [#uses=1] - store double %tmp.18.i33213, double* %tmp.16.i33211 - %tmp.4.i33187 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33186, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33224, double* %tmp.4.i33187 - %tmp.7.i33190 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33186, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33227, double* %tmp.7.i33190 - %tmp.0.i33193 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i33186, %"struct.std::dcomplex"* %mem_tmp.66 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33195 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33193, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33196 = load double* %tmp.14.i33195 ; [#uses=1] - %tmp.17.i33198 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33193, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33199 = load double* %tmp.17.i33198 ; [#uses=1] - %tmp.220 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 2, i32 4 ; <%"struct.std::dcomplex"*> [#uses=60] - %tmp.4.i33173 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33172, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33196, double* %tmp.4.i33173 - %tmp.7.i33176 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33172, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33199, double* %tmp.7.i33176 - %tmp.0.i33179 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33172, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33181 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33179, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33182 = load double* %tmp.14.i33181 ; [#uses=1] - %tmp.17.i33184 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33179, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33185 = load double* %tmp.17.i33184 ; [#uses=1] - %tmp.226 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 1, i32 4 ; <%"struct.std::dcomplex"*> [#uses=120] - %tmp.4.i33159 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33158, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33161 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i33161, double* %tmp.4.i33159 - %tmp.7.i33162 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33158, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33164 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i33164, double* %tmp.7.i33162 - %tmp.0.i33165 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33158, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33167 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33165, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33168 = load double* %tmp.14.i33167 ; [#uses=1] - %tmp.17.i33170 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33165, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33171 = load double* %tmp.17.i33170 ; [#uses=1] - %tmp.4.i33145 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33144, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i33146 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 0, i32 4, i32 0, i32 0 ; [#uses=120] - %tmp.6.i33147 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i33147, double* %tmp.4.i33145 - %tmp.7.i33148 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33144, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i33149 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 0, i32 4, i32 0, i32 1 ; [#uses=120] - %tmp.9.i33150 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i33150, double* %tmp.7.i33148 - %tmp.0.i33151 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33144, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33152 = getelementptr %"struct.std::dcomplex"* %mem_tmp.70, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33153 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33151, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33154 = load double* %tmp.14.i33153 ; [#uses=1] - store double %tmp.15.i33154, double* %tmp.13.i33152 - %tmp.16.i33155 = getelementptr %"struct.std::dcomplex"* %mem_tmp.70, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33156 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33151, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33157 = load double* %tmp.17.i33156 ; [#uses=1] - store double %tmp.18.i33157, double* %tmp.16.i33155 - %tmp.4.i33131 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33130, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33168, double* %tmp.4.i33131 - %tmp.7.i33134 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33130, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33171, double* %tmp.7.i33134 - %tmp.0.i33137 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i33130, %"struct.std::dcomplex"* %mem_tmp.70 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33139 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33137, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33140 = load double* %tmp.14.i33139 ; [#uses=1] - %tmp.17.i33142 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33137, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33143 = load double* %tmp.17.i33142 ; [#uses=1] - %tmp.4.i33117 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33116, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33140, double* %tmp.4.i33117 - %tmp.7.i33120 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33116, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33143, double* %tmp.7.i33120 - %tmp.0.i33123 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33116, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33124 = getelementptr %"struct.std::dcomplex"* %mem_tmp.67, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33125 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33123, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33126 = load double* %tmp.14.i33125 ; [#uses=1] - store double %tmp.15.i33126, double* %tmp.13.i33124 - %tmp.16.i33127 = getelementptr %"struct.std::dcomplex"* %mem_tmp.67, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33128 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33123, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33129 = load double* %tmp.17.i33128 ; [#uses=1] - store double %tmp.18.i33129, double* %tmp.16.i33127 - %tmp.4.i33103 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33102, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33182, double* %tmp.4.i33103 - %tmp.7.i33106 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33102, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33185, double* %tmp.7.i33106 - %tmp.0.i33109 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33102, %"struct.std::dcomplex"* %mem_tmp.67 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33111 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33109, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33112 = load double* %tmp.14.i33111 ; [#uses=1] - %tmp.17.i33114 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33109, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33115 = load double* %tmp.17.i33114 ; [#uses=1] - %tmp.4.i33089 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33088, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33091 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i33091, double* %tmp.4.i33089 - %tmp.7.i33092 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33088, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33094 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i33094, double* %tmp.7.i33092 - %tmp.0.i33095 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33088, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33097 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33095, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33098 = load double* %tmp.14.i33097 ; [#uses=1] - %tmp.17.i33100 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33095, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33101 = load double* %tmp.17.i33100 ; [#uses=1] - %tmp.4.i33075 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33074, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33077 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i33077, double* %tmp.4.i33075 - %tmp.7.i33078 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33074, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33080 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i33080, double* %tmp.7.i33078 - %tmp.0.i33081 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33074, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33082 = getelementptr %"struct.std::dcomplex"* %mem_tmp.74, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33083 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33081, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33084 = load double* %tmp.14.i33083 ; [#uses=1] - store double %tmp.15.i33084, double* %tmp.13.i33082 - %tmp.16.i33085 = getelementptr %"struct.std::dcomplex"* %mem_tmp.74, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33086 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33081, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33087 = load double* %tmp.17.i33086 ; [#uses=1] - store double %tmp.18.i33087, double* %tmp.16.i33085 - %tmp.4.i33061 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33060, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33098, double* %tmp.4.i33061 - %tmp.7.i33064 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33060, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33101, double* %tmp.7.i33064 - %tmp.0.i33067 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i33060, %"struct.std::dcomplex"* %mem_tmp.74 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33069 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33067, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33070 = load double* %tmp.14.i33069 ; [#uses=1] - %tmp.17.i33072 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33067, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33073 = load double* %tmp.17.i33072 ; [#uses=1] - %tmp.4.i33047 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33046, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33070, double* %tmp.4.i33047 - %tmp.7.i33050 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33046, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33073, double* %tmp.7.i33050 - %tmp.0.i33053 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33046, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i33054 = getelementptr %"struct.std::dcomplex"* %mem_tmp.71, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i33055 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33053, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33056 = load double* %tmp.14.i33055 ; [#uses=1] - store double %tmp.15.i33056, double* %tmp.13.i33054 - %tmp.16.i33057 = getelementptr %"struct.std::dcomplex"* %mem_tmp.71, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i33058 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33053, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33059 = load double* %tmp.17.i33058 ; [#uses=1] - store double %tmp.18.i33059, double* %tmp.16.i33057 - %tmp.4.i33033 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33032, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i33112, double* %tmp.4.i33033 - %tmp.7.i33036 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i33032, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i33115, double* %tmp.7.i33036 - %tmp.0.i33039 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i33032, %"struct.std::dcomplex"* %mem_tmp.71 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33041 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33039, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33042 = load double* %tmp.14.i33041 ; [#uses=1] - %tmp.17.i33044 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33039, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33045 = load double* %tmp.17.i33044 ; [#uses=1] - store double %tmp.15.i33042, double* %tmp.2.i34364 - store double %tmp.18.i33045, double* %tmp.6.i34365 - %tmp.4.i32999 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32998, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i33001 = load double* %tmp.5.i33326 ; [#uses=1] - store double %tmp.6.i33001, double* %tmp.4.i32999 - %tmp.7.i33002 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32998, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i33004 = load double* %tmp.8.i33329 ; [#uses=1] - store double %tmp.9.i33004, double* %tmp.7.i33002 - %tmp.0.i33005 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32998, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i33007 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33005, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i33008 = load double* %tmp.14.i33007 ; [#uses=1] - %tmp.17.i33010 = getelementptr %"struct.std::dcomplex"* %tmp.0.i33005, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i33011 = load double* %tmp.17.i33010 ; [#uses=1] - %tmp.7.i32965 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i32979 = add double %tmp.7.i32965, %tmp.15.i33008 ; [#uses=1] - store double %tmp.15.i32979, double* %tmp.2.i34366 - %tmp.26.i32986 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i32997 = add double %tmp.26.i32986, %tmp.18.i33011 ; [#uses=1] - store double %tmp.31.i32997, double* %tmp.6.i34367 - %tmp.4.i32945 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32944, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32947 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i32947, double* %tmp.4.i32945 - %tmp.7.i32948 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32944, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32950 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i32950, double* %tmp.7.i32948 - %tmp.0.i32951 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32944, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32953 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32951, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32954 = load double* %tmp.14.i32953 ; [#uses=1] - %tmp.17.i32956 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32951, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32957 = load double* %tmp.17.i32956 ; [#uses=1] - %tmp.4.i32931 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32930, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32933 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i32933, double* %tmp.4.i32931 - %tmp.7.i32934 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32930, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32936 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i32936, double* %tmp.7.i32934 - %tmp.0.i32937 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32930, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i32938 = getelementptr %"struct.std::dcomplex"* %mem_tmp.81, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i32939 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32937, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32940 = load double* %tmp.14.i32939 ; [#uses=1] - store double %tmp.15.i32940, double* %tmp.13.i32938 - %tmp.16.i32941 = getelementptr %"struct.std::dcomplex"* %mem_tmp.81, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i32942 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32937, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32943 = load double* %tmp.17.i32942 ; [#uses=1] - store double %tmp.18.i32943, double* %tmp.16.i32941 - %tmp.4.i32917 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32916, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32954, double* %tmp.4.i32917 - %tmp.7.i32920 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32916, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32957, double* %tmp.7.i32920 - %tmp.0.i32923 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i32916, %"struct.std::dcomplex"* %mem_tmp.81 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32925 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32923, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32926 = load double* %tmp.14.i32925 ; [#uses=1] - %tmp.17.i32928 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32923, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32929 = load double* %tmp.17.i32928 ; [#uses=1] - %tmp.4.i32903 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32902, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32926, double* %tmp.4.i32903 - %tmp.7.i32906 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32902, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32929, double* %tmp.7.i32906 - %tmp.0.i32909 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32902, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32911 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32909, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32912 = load double* %tmp.14.i32911 ; [#uses=1] - %tmp.17.i32914 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32909, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32915 = load double* %tmp.17.i32914 ; [#uses=1] - %tmp.4.i32889 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32888, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32891 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i32891, double* %tmp.4.i32889 - %tmp.7.i32892 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32888, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32894 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i32894, double* %tmp.7.i32892 - %tmp.0.i32895 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32888, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32897 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32895, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32898 = load double* %tmp.14.i32897 ; [#uses=1] - %tmp.17.i32900 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32895, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32901 = load double* %tmp.17.i32900 ; [#uses=1] - %tmp.4.i32875 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32874, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32877 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i32877, double* %tmp.4.i32875 - %tmp.7.i32878 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32874, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32880 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i32880, double* %tmp.7.i32878 - %tmp.0.i32881 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32874, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i32882 = getelementptr %"struct.std::dcomplex"* %mem_tmp.85, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i32883 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32881, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32884 = load double* %tmp.14.i32883 ; [#uses=1] - store double %tmp.15.i32884, double* %tmp.13.i32882 - %tmp.16.i32885 = getelementptr %"struct.std::dcomplex"* %mem_tmp.85, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i32886 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32881, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32887 = load double* %tmp.17.i32886 ; [#uses=1] - store double %tmp.18.i32887, double* %tmp.16.i32885 - %tmp.4.i32861 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32860, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32898, double* %tmp.4.i32861 - %tmp.7.i32864 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32860, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32901, double* %tmp.7.i32864 - %tmp.0.i32867 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i32860, %"struct.std::dcomplex"* %mem_tmp.85 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32869 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32867, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32870 = load double* %tmp.14.i32869 ; [#uses=1] - %tmp.17.i32872 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32867, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32873 = load double* %tmp.17.i32872 ; [#uses=1] - %tmp.4.i32847 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32846, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32870, double* %tmp.4.i32847 - %tmp.7.i32850 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32846, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32873, double* %tmp.7.i32850 - %tmp.0.i32853 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32846, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i32854 = getelementptr %"struct.std::dcomplex"* %mem_tmp.82, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i32855 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32853, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32856 = load double* %tmp.14.i32855 ; [#uses=1] - store double %tmp.15.i32856, double* %tmp.13.i32854 - %tmp.16.i32857 = getelementptr %"struct.std::dcomplex"* %mem_tmp.82, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i32858 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32853, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32859 = load double* %tmp.17.i32858 ; [#uses=1] - store double %tmp.18.i32859, double* %tmp.16.i32857 - %tmp.4.i32833 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32832, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32912, double* %tmp.4.i32833 - %tmp.7.i32836 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32832, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32915, double* %tmp.7.i32836 - %tmp.0.i32839 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32832, %"struct.std::dcomplex"* %mem_tmp.82 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32841 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32839, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32842 = load double* %tmp.14.i32841 ; [#uses=1] - %tmp.17.i32844 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32839, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32845 = load double* %tmp.17.i32844 ; [#uses=1] - %tmp.4.i32819 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32818, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32821 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i32821, double* %tmp.4.i32819 - %tmp.7.i32822 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32818, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32824 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i32824, double* %tmp.7.i32822 - %tmp.0.i32825 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32818, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32827 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32825, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32828 = load double* %tmp.14.i32827 ; [#uses=1] - %tmp.17.i32830 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32825, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32831 = load double* %tmp.17.i32830 ; [#uses=1] - %tmp.4.i32805 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32804, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32807 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i32807, double* %tmp.4.i32805 - %tmp.7.i32808 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32804, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32810 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i32810, double* %tmp.7.i32808 - %tmp.0.i32811 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32804, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i32812 = getelementptr %"struct.std::dcomplex"* %mem_tmp.89, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i32813 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32811, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32814 = load double* %tmp.14.i32813 ; [#uses=1] - store double %tmp.15.i32814, double* %tmp.13.i32812 - %tmp.16.i32815 = getelementptr %"struct.std::dcomplex"* %mem_tmp.89, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i32816 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32811, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32817 = load double* %tmp.17.i32816 ; [#uses=1] - store double %tmp.18.i32817, double* %tmp.16.i32815 - %tmp.4.i32791 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32790, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32828, double* %tmp.4.i32791 - %tmp.7.i32794 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32790, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32831, double* %tmp.7.i32794 - %tmp.0.i32797 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i32790, %"struct.std::dcomplex"* %mem_tmp.89 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32799 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32797, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32800 = load double* %tmp.14.i32799 ; [#uses=1] - %tmp.17.i32802 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32797, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32803 = load double* %tmp.17.i32802 ; [#uses=1] - %tmp.4.i32777 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32776, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32800, double* %tmp.4.i32777 - %tmp.7.i32780 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32776, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32803, double* %tmp.7.i32780 - %tmp.0.i32783 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32776, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i32784 = getelementptr %"struct.std::dcomplex"* %mem_tmp.86, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i32785 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32783, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32786 = load double* %tmp.14.i32785 ; [#uses=1] - store double %tmp.15.i32786, double* %tmp.13.i32784 - %tmp.16.i32787 = getelementptr %"struct.std::dcomplex"* %mem_tmp.86, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i32788 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32783, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32789 = load double* %tmp.17.i32788 ; [#uses=1] - store double %tmp.18.i32789, double* %tmp.16.i32787 - %tmp.4.i32763 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32762, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32842, double* %tmp.4.i32763 - %tmp.7.i32766 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32762, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32845, double* %tmp.7.i32766 - %tmp.0.i32769 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32762, %"struct.std::dcomplex"* %mem_tmp.86 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32771 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32769, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32772 = load double* %tmp.14.i32771 ; [#uses=1] - %tmp.17.i32774 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32769, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32775 = load double* %tmp.17.i32774 ; [#uses=1] - store double %tmp.15.i32772, double* %tmp.2.i34364 - store double %tmp.18.i32775, double* %tmp.6.i34365 - %tmp.4.i32729 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32728, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32731 = load double* %tmp.5.i34136 ; [#uses=1] - store double %tmp.6.i32731, double* %tmp.4.i32729 - %tmp.7.i32732 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32728, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32734 = load double* %tmp.8.i34139 ; [#uses=1] - store double %tmp.9.i32734, double* %tmp.7.i32732 - %tmp.0.i32735 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32728, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32737 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32735, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32738 = load double* %tmp.14.i32737 ; [#uses=1] - %tmp.17.i32740 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32735, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32741 = load double* %tmp.17.i32740 ; [#uses=1] - %tmp.7.i32695 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i32709 = add double %tmp.7.i32695, %tmp.15.i32738 ; [#uses=1] - store double %tmp.15.i32709, double* %tmp.2.i34366 - %tmp.26.i32716 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i32727 = add double %tmp.26.i32716, %tmp.18.i32741 ; [#uses=1] - store double %tmp.31.i32727, double* %tmp.6.i34367 - %tmp.4.i32675 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32674, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32677 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i32677, double* %tmp.4.i32675 - %tmp.7.i32678 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32674, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32680 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i32680, double* %tmp.7.i32678 - %tmp.0.i32681 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32674, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32683 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32681, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32684 = load double* %tmp.14.i32683 ; [#uses=1] - %tmp.17.i32686 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32681, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32687 = load double* %tmp.17.i32686 ; [#uses=1] - %tmp.4.i32661 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32660, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32663 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i32663, double* %tmp.4.i32661 - %tmp.7.i32664 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32660, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32666 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i32666, double* %tmp.7.i32664 - %tmp.0.i32667 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32660, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i32668 = getelementptr %"struct.std::dcomplex"* %mem_tmp.96, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i32669 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32667, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32670 = load double* %tmp.14.i32669 ; [#uses=1] - store double %tmp.15.i32670, double* %tmp.13.i32668 - %tmp.16.i32671 = getelementptr %"struct.std::dcomplex"* %mem_tmp.96, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i32672 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32667, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32673 = load double* %tmp.17.i32672 ; [#uses=1] - store double %tmp.18.i32673, double* %tmp.16.i32671 - %tmp.4.i32647 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32646, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32684, double* %tmp.4.i32647 - %tmp.7.i32650 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32646, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32687, double* %tmp.7.i32650 - %tmp.0.i32653 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i32646, %"struct.std::dcomplex"* %mem_tmp.96 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32655 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32653, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32656 = load double* %tmp.14.i32655 ; [#uses=1] - %tmp.17.i32658 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32653, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32659 = load double* %tmp.17.i32658 ; [#uses=1] - %tmp.4.i32633 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32632, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32656, double* %tmp.4.i32633 - %tmp.7.i32636 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32632, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32659, double* %tmp.7.i32636 - %tmp.0.i32639 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32632, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32641 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32639, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32642 = load double* %tmp.14.i32641 ; [#uses=1] - %tmp.17.i32644 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32639, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32645 = load double* %tmp.17.i32644 ; [#uses=1] - %tmp.4.i32619 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32618, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32621 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i32621, double* %tmp.4.i32619 - %tmp.7.i32622 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32618, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32624 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i32624, double* %tmp.7.i32622 - %tmp.0.i32625 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32618, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32627 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32625, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32628 = load double* %tmp.14.i32627 ; [#uses=1] - %tmp.17.i32630 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32625, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32631 = load double* %tmp.17.i32630 ; [#uses=1] - %tmp.4.i32605 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32604, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32607 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i32607, double* %tmp.4.i32605 - %tmp.7.i32608 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32604, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32610 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i32610, double* %tmp.7.i32608 - %tmp.0.i32611 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32604, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i32612 = getelementptr %"struct.std::dcomplex"* %mem_tmp.100, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i32613 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32611, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32614 = load double* %tmp.14.i32613 ; [#uses=1] - store double %tmp.15.i32614, double* %tmp.13.i32612 - %tmp.16.i32615 = getelementptr %"struct.std::dcomplex"* %mem_tmp.100, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i32616 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32611, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32617 = load double* %tmp.17.i32616 ; [#uses=1] - store double %tmp.18.i32617, double* %tmp.16.i32615 - %tmp.4.i32591 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32590, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32628, double* %tmp.4.i32591 - %tmp.7.i32594 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32590, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32631, double* %tmp.7.i32594 - %tmp.0.i32597 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i32590, %"struct.std::dcomplex"* %mem_tmp.100 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32599 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32597, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32600 = load double* %tmp.14.i32599 ; [#uses=1] - %tmp.17.i32602 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32597, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32603 = load double* %tmp.17.i32602 ; [#uses=1] - %tmp.4.i32577 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32576, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32600, double* %tmp.4.i32577 - %tmp.7.i32580 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32576, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32603, double* %tmp.7.i32580 - %tmp.0.i32583 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32576, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i32584 = getelementptr %"struct.std::dcomplex"* %mem_tmp.97, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i32585 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32583, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32586 = load double* %tmp.14.i32585 ; [#uses=1] - store double %tmp.15.i32586, double* %tmp.13.i32584 - %tmp.16.i32587 = getelementptr %"struct.std::dcomplex"* %mem_tmp.97, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i32588 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32583, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32589 = load double* %tmp.17.i32588 ; [#uses=1] - store double %tmp.18.i32589, double* %tmp.16.i32587 - %tmp.4.i32563 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32562, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32642, double* %tmp.4.i32563 - %tmp.7.i32566 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32562, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32645, double* %tmp.7.i32566 - %tmp.0.i32569 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32562, %"struct.std::dcomplex"* %mem_tmp.97 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32571 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32569, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32572 = load double* %tmp.14.i32571 ; [#uses=1] - %tmp.17.i32574 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32569, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32575 = load double* %tmp.17.i32574 ; [#uses=1] - %tmp.4.i32549 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32548, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32551 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i32551, double* %tmp.4.i32549 - %tmp.7.i32552 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32548, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32554 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i32554, double* %tmp.7.i32552 - %tmp.0.i32555 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32548, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32557 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32555, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32558 = load double* %tmp.14.i32557 ; [#uses=1] - %tmp.17.i32560 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32555, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32561 = load double* %tmp.17.i32560 ; [#uses=1] - %tmp.4.i32535 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32534, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32537 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i32537, double* %tmp.4.i32535 - %tmp.7.i32538 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32534, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32540 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i32540, double* %tmp.7.i32538 - %tmp.0.i32541 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32534, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i32542 = getelementptr %"struct.std::dcomplex"* %mem_tmp.104, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i32543 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32541, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32544 = load double* %tmp.14.i32543 ; [#uses=1] - store double %tmp.15.i32544, double* %tmp.13.i32542 - %tmp.16.i32545 = getelementptr %"struct.std::dcomplex"* %mem_tmp.104, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i32546 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32541, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32547 = load double* %tmp.17.i32546 ; [#uses=1] - store double %tmp.18.i32547, double* %tmp.16.i32545 - %tmp.4.i32521 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32520, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32558, double* %tmp.4.i32521 - %tmp.7.i32524 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32520, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32561, double* %tmp.7.i32524 - %tmp.0.i32527 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i32520, %"struct.std::dcomplex"* %mem_tmp.104 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32529 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32527, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32530 = load double* %tmp.14.i32529 ; [#uses=1] - %tmp.17.i32532 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32527, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32533 = load double* %tmp.17.i32532 ; [#uses=1] - %tmp.4.i32507 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32506, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32530, double* %tmp.4.i32507 - %tmp.7.i32510 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32506, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32533, double* %tmp.7.i32510 - %tmp.0.i32513 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32506, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i32514 = getelementptr %"struct.std::dcomplex"* %mem_tmp.101, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i32515 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32513, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32516 = load double* %tmp.14.i32515 ; [#uses=1] - store double %tmp.15.i32516, double* %tmp.13.i32514 - %tmp.16.i32517 = getelementptr %"struct.std::dcomplex"* %mem_tmp.101, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i32518 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32513, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32519 = load double* %tmp.17.i32518 ; [#uses=1] - store double %tmp.18.i32519, double* %tmp.16.i32517 - %tmp.4.i32493 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32492, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32572, double* %tmp.4.i32493 - %tmp.7.i32496 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32492, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32575, double* %tmp.7.i32496 - %tmp.0.i32499 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32492, %"struct.std::dcomplex"* %mem_tmp.101 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32501 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32499, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32502 = load double* %tmp.14.i32501 ; [#uses=1] - %tmp.17.i32504 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32499, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32505 = load double* %tmp.17.i32504 ; [#uses=1] - store double %tmp.15.i32502, double* %tmp.2.i34364 - store double %tmp.18.i32505, double* %tmp.6.i34365 - %tmp.4.i32459 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32458, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i32460 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 3, i32 4, i32 0, i32 0 ; [#uses=20] - %tmp.6.i32461 = load double* %tmp.5.i32460 ; [#uses=1] - store double %tmp.6.i32461, double* %tmp.4.i32459 - %tmp.7.i32462 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32458, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i32463 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 3, i32 4, i32 0, i32 1 ; [#uses=20] - %tmp.9.i32464 = load double* %tmp.8.i32463 ; [#uses=1] - store double %tmp.9.i32464, double* %tmp.7.i32462 - %tmp.0.i32465 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32458, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32467 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32465, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32468 = load double* %tmp.14.i32467 ; [#uses=1] - %tmp.17.i32470 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32465, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32471 = load double* %tmp.17.i32470 ; [#uses=1] - %tmp.7.i32425 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i32439 = add double %tmp.7.i32425, %tmp.15.i32468 ; [#uses=1] - store double %tmp.15.i32439, double* %tmp.2.i34366 - %tmp.26.i32446 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i32457 = add double %tmp.26.i32446, %tmp.18.i32471 ; [#uses=1] - store double %tmp.31.i32457, double* %tmp.6.i34367 - %tmp.4.i32405 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32404, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32407 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i32407, double* %tmp.4.i32405 - %tmp.7.i32408 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32404, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32410 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i32410, double* %tmp.7.i32408 - %tmp.0.i32411 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32404, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32413 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32411, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32414 = load double* %tmp.14.i32413 ; [#uses=1] - %tmp.17.i32416 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32411, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32417 = load double* %tmp.17.i32416 ; [#uses=1] - %tmp.4.i32391 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32390, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32393 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i32393, double* %tmp.4.i32391 - %tmp.7.i32394 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32390, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32396 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i32396, double* %tmp.7.i32394 - %tmp.0.i32397 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32390, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i32398 = getelementptr %"struct.std::dcomplex"* %mem_tmp.111, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i32399 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32397, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32400 = load double* %tmp.14.i32399 ; [#uses=1] - store double %tmp.15.i32400, double* %tmp.13.i32398 - %tmp.16.i32401 = getelementptr %"struct.std::dcomplex"* %mem_tmp.111, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i32402 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32397, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32403 = load double* %tmp.17.i32402 ; [#uses=1] - store double %tmp.18.i32403, double* %tmp.16.i32401 - %tmp.4.i32377 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32376, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32414, double* %tmp.4.i32377 - %tmp.7.i32380 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32376, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32417, double* %tmp.7.i32380 - %tmp.0.i32383 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i32376, %"struct.std::dcomplex"* %mem_tmp.111 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32385 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32383, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32386 = load double* %tmp.14.i32385 ; [#uses=1] - %tmp.17.i32388 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32383, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32389 = load double* %tmp.17.i32388 ; [#uses=1] - %tmp.4.i32363 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32362, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32386, double* %tmp.4.i32363 - %tmp.7.i32366 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32362, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32389, double* %tmp.7.i32366 - %tmp.0.i32369 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32362, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32371 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32369, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32372 = load double* %tmp.14.i32371 ; [#uses=1] - %tmp.17.i32374 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32369, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32375 = load double* %tmp.17.i32374 ; [#uses=1] - %tmp.4.i32349 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32348, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32351 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i32351, double* %tmp.4.i32349 - %tmp.7.i32352 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32348, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32354 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i32354, double* %tmp.7.i32352 - %tmp.0.i32355 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32348, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32357 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32355, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32358 = load double* %tmp.14.i32357 ; [#uses=1] - %tmp.17.i32360 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32355, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32361 = load double* %tmp.17.i32360 ; [#uses=1] - %tmp.4.i32335 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32334, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32337 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i32337, double* %tmp.4.i32335 - %tmp.7.i32338 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32334, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32340 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i32340, double* %tmp.7.i32338 - %tmp.0.i32341 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32334, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i32342 = getelementptr %"struct.std::dcomplex"* %mem_tmp.115, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i32343 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32341, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32344 = load double* %tmp.14.i32343 ; [#uses=1] - store double %tmp.15.i32344, double* %tmp.13.i32342 - %tmp.16.i32345 = getelementptr %"struct.std::dcomplex"* %mem_tmp.115, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i32346 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32341, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32347 = load double* %tmp.17.i32346 ; [#uses=1] - store double %tmp.18.i32347, double* %tmp.16.i32345 - %tmp.4.i32321 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32320, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32358, double* %tmp.4.i32321 - %tmp.7.i32324 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32320, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32361, double* %tmp.7.i32324 - %tmp.0.i32327 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i32320, %"struct.std::dcomplex"* %mem_tmp.115 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32329 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32327, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32330 = load double* %tmp.14.i32329 ; [#uses=1] - %tmp.17.i32332 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32327, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32333 = load double* %tmp.17.i32332 ; [#uses=1] - %tmp.4.i32307 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32306, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32330, double* %tmp.4.i32307 - %tmp.7.i32310 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32306, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32333, double* %tmp.7.i32310 - %tmp.0.i32313 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32306, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i32314 = getelementptr %"struct.std::dcomplex"* %mem_tmp.112, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i32315 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32313, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32316 = load double* %tmp.14.i32315 ; [#uses=1] - store double %tmp.15.i32316, double* %tmp.13.i32314 - %tmp.16.i32317 = getelementptr %"struct.std::dcomplex"* %mem_tmp.112, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i32318 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32313, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32319 = load double* %tmp.17.i32318 ; [#uses=1] - store double %tmp.18.i32319, double* %tmp.16.i32317 - %tmp.4.i32293 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32292, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32372, double* %tmp.4.i32293 - %tmp.7.i32296 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32292, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32375, double* %tmp.7.i32296 - %tmp.0.i32299 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32292, %"struct.std::dcomplex"* %mem_tmp.112 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32301 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32299, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32302 = load double* %tmp.14.i32301 ; [#uses=1] - %tmp.17.i32304 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32299, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32305 = load double* %tmp.17.i32304 ; [#uses=1] - %tmp.4.i32279 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32278, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32281 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i32281, double* %tmp.4.i32279 - %tmp.7.i32282 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32278, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32284 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i32284, double* %tmp.7.i32282 - %tmp.0.i32285 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32278, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32287 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32285, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32288 = load double* %tmp.14.i32287 ; [#uses=1] - %tmp.17.i32290 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32285, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32291 = load double* %tmp.17.i32290 ; [#uses=1] - %tmp.4.i32265 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32264, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32267 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i32267, double* %tmp.4.i32265 - %tmp.7.i32268 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32264, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32270 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i32270, double* %tmp.7.i32268 - %tmp.0.i32271 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32264, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i32272 = getelementptr %"struct.std::dcomplex"* %mem_tmp.119, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i32273 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32271, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32274 = load double* %tmp.14.i32273 ; [#uses=1] - store double %tmp.15.i32274, double* %tmp.13.i32272 - %tmp.16.i32275 = getelementptr %"struct.std::dcomplex"* %mem_tmp.119, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i32276 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32271, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32277 = load double* %tmp.17.i32276 ; [#uses=1] - store double %tmp.18.i32277, double* %tmp.16.i32275 - %tmp.4.i32251 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32250, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32288, double* %tmp.4.i32251 - %tmp.7.i32254 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32250, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32291, double* %tmp.7.i32254 - %tmp.0.i32257 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i32250, %"struct.std::dcomplex"* %mem_tmp.119 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32259 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32257, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32260 = load double* %tmp.14.i32259 ; [#uses=1] - %tmp.17.i32262 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32257, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32263 = load double* %tmp.17.i32262 ; [#uses=1] - %tmp.4.i32237 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32236, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32260, double* %tmp.4.i32237 - %tmp.7.i32240 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32236, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32263, double* %tmp.7.i32240 - %tmp.0.i32243 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32236, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i32244 = getelementptr %"struct.std::dcomplex"* %mem_tmp.116, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i32245 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32243, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32246 = load double* %tmp.14.i32245 ; [#uses=1] - store double %tmp.15.i32246, double* %tmp.13.i32244 - %tmp.16.i32247 = getelementptr %"struct.std::dcomplex"* %mem_tmp.116, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i32248 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32243, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32249 = load double* %tmp.17.i32248 ; [#uses=1] - store double %tmp.18.i32249, double* %tmp.16.i32247 - %tmp.4.i32223 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32222, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32302, double* %tmp.4.i32223 - %tmp.7.i32226 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32222, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32305, double* %tmp.7.i32226 - %tmp.0.i32229 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32222, %"struct.std::dcomplex"* %mem_tmp.116 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32231 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32229, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32232 = load double* %tmp.14.i32231 ; [#uses=1] - %tmp.17.i32234 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32229, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32235 = load double* %tmp.17.i32234 ; [#uses=1] - store double %tmp.15.i32232, double* %tmp.2.i34364 - store double %tmp.18.i32235, double* %tmp.6.i34365 - %tmp.4.i32189 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32188, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32191 = load double* %tmp.5.i33596 ; [#uses=1] - store double %tmp.6.i32191, double* %tmp.4.i32189 - %tmp.7.i32192 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32188, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32194 = load double* %tmp.8.i33599 ; [#uses=1] - store double %tmp.9.i32194, double* %tmp.7.i32192 - %tmp.0.i32195 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32188, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32197 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32195, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32198 = load double* %tmp.14.i32197 ; [#uses=1] - %tmp.17.i32200 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32195, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32201 = load double* %tmp.17.i32200 ; [#uses=1] - %tmp.7.i32155 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i32169 = add double %tmp.7.i32155, %tmp.15.i32198 ; [#uses=1] - store double %tmp.15.i32169, double* %tmp.2.i34366 - %tmp.26.i32176 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i32187 = add double %tmp.26.i32176, %tmp.18.i32201 ; [#uses=1] - store double %tmp.31.i32187, double* %tmp.6.i34367 - %tmp.4.i32135 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32134, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i32136 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 4, i32 0, i32 0, i32 0 ; [#uses=5] - %tmp.6.i32137 = load double* %tmp.5.i32136 ; [#uses=1] - store double %tmp.6.i32137, double* %tmp.4.i32135 - %tmp.7.i32138 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32134, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i32139 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 4, i32 0, i32 0, i32 1 ; [#uses=5] - %tmp.9.i32140 = load double* %tmp.8.i32139 ; [#uses=1] - store double %tmp.9.i32140, double* %tmp.7.i32138 - %tmp.0.i32141 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32134, %"struct.std::dcomplex"* %ret4 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32143 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32141, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32144 = load double* %tmp.14.i32143 ; [#uses=1] - %tmp.17.i32146 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32141, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32147 = load double* %tmp.17.i32146 ; [#uses=1] - %tmp.7.i32101 = load double* %tmp.2.i34368 ; [#uses=1] - %tmp.15.i32115 = add double %tmp.7.i32101, %tmp.15.i32144 ; [#uses=1] - store double %tmp.15.i32115, double* %tmp.2.i34368 - %tmp.26.i32122 = load double* %tmp.6.i34369 ; [#uses=1] - %tmp.31.i32133 = add double %tmp.26.i32122, %tmp.18.i32147 ; [#uses=1] - store double %tmp.31.i32133, double* %tmp.6.i34369 - store double 0.000000e+00, double* %tmp.2.i34366 - store double 0.000000e+00, double* %tmp.6.i34367 - %tmp.4.i32079 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32078, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32081 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i32081, double* %tmp.4.i32079 - %tmp.7.i32082 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32078, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32084 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i32084, double* %tmp.7.i32082 - %tmp.0.i32085 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32078, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32087 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32085, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32088 = load double* %tmp.14.i32087 ; [#uses=1] - %tmp.17.i32090 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32085, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32091 = load double* %tmp.17.i32090 ; [#uses=1] - %tmp.4.i32065 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32064, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32067 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i32067, double* %tmp.4.i32065 - %tmp.7.i32068 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32064, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32070 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i32070, double* %tmp.7.i32068 - %tmp.0.i32071 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32064, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i32072 = getelementptr %"struct.std::dcomplex"* %mem_tmp.127, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i32073 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32071, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32074 = load double* %tmp.14.i32073 ; [#uses=1] - store double %tmp.15.i32074, double* %tmp.13.i32072 - %tmp.16.i32075 = getelementptr %"struct.std::dcomplex"* %mem_tmp.127, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i32076 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32071, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32077 = load double* %tmp.17.i32076 ; [#uses=1] - store double %tmp.18.i32077, double* %tmp.16.i32075 - %tmp.4.i32051 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32050, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32088, double* %tmp.4.i32051 - %tmp.7.i32054 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32050, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32091, double* %tmp.7.i32054 - %tmp.0.i32057 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i32050, %"struct.std::dcomplex"* %mem_tmp.127 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32059 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32057, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32060 = load double* %tmp.14.i32059 ; [#uses=1] - %tmp.17.i32062 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32057, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32063 = load double* %tmp.17.i32062 ; [#uses=1] - %tmp.4.i32037 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32036, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32060, double* %tmp.4.i32037 - %tmp.7.i32040 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32036, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32063, double* %tmp.7.i32040 - %tmp.0.i32043 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32036, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32045 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32043, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32046 = load double* %tmp.14.i32045 ; [#uses=1] - %tmp.17.i32048 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32043, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32049 = load double* %tmp.17.i32048 ; [#uses=1] - %tmp.4.i32023 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32022, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32025 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i32025, double* %tmp.4.i32023 - %tmp.7.i32026 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32022, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32028 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i32028, double* %tmp.7.i32026 - %tmp.0.i32029 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32022, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32031 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32029, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32032 = load double* %tmp.14.i32031 ; [#uses=1] - %tmp.17.i32034 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32029, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32035 = load double* %tmp.17.i32034 ; [#uses=1] - %tmp.4.i32009 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32008, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i32011 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i32011, double* %tmp.4.i32009 - %tmp.7.i32012 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i32008, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i32014 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i32014, double* %tmp.7.i32012 - %tmp.0.i32015 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i32008, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i32016 = getelementptr %"struct.std::dcomplex"* %mem_tmp.131, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i32017 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32015, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32018 = load double* %tmp.14.i32017 ; [#uses=1] - store double %tmp.15.i32018, double* %tmp.13.i32016 - %tmp.16.i32019 = getelementptr %"struct.std::dcomplex"* %mem_tmp.131, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i32020 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32015, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32021 = load double* %tmp.17.i32020 ; [#uses=1] - store double %tmp.18.i32021, double* %tmp.16.i32019 - %tmp.4.i31995 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31994, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32032, double* %tmp.4.i31995 - %tmp.7.i31998 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31994, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32035, double* %tmp.7.i31998 - %tmp.0.i32001 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i31994, %"struct.std::dcomplex"* %mem_tmp.131 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i32003 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32001, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i32004 = load double* %tmp.14.i32003 ; [#uses=1] - %tmp.17.i32006 = getelementptr %"struct.std::dcomplex"* %tmp.0.i32001, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i32007 = load double* %tmp.17.i32006 ; [#uses=1] - %tmp.4.i31981 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31980, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32004, double* %tmp.4.i31981 - %tmp.7.i31984 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31980, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32007, double* %tmp.7.i31984 - %tmp.0.i31987 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31980, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31988 = getelementptr %"struct.std::dcomplex"* %mem_tmp.128, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31989 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31987, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31990 = load double* %tmp.14.i31989 ; [#uses=1] - store double %tmp.15.i31990, double* %tmp.13.i31988 - %tmp.16.i31991 = getelementptr %"struct.std::dcomplex"* %mem_tmp.128, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31992 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31987, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31993 = load double* %tmp.17.i31992 ; [#uses=1] - store double %tmp.18.i31993, double* %tmp.16.i31991 - %tmp.4.i31967 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31966, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i32046, double* %tmp.4.i31967 - %tmp.7.i31970 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31966, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i32049, double* %tmp.7.i31970 - %tmp.0.i31973 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31966, %"struct.std::dcomplex"* %mem_tmp.128 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31975 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31973, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31976 = load double* %tmp.14.i31975 ; [#uses=1] - %tmp.17.i31978 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31973, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31979 = load double* %tmp.17.i31978 ; [#uses=1] - %tmp.4.i31953 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31952, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31955 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i31955, double* %tmp.4.i31953 - %tmp.7.i31956 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31952, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31958 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i31958, double* %tmp.7.i31956 - %tmp.0.i31959 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31952, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31961 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31959, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31962 = load double* %tmp.14.i31961 ; [#uses=1] - %tmp.17.i31964 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31959, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31965 = load double* %tmp.17.i31964 ; [#uses=1] - %tmp.4.i31939 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31938, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31941 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i31941, double* %tmp.4.i31939 - %tmp.7.i31942 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31938, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31944 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i31944, double* %tmp.7.i31942 - %tmp.0.i31945 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31938, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31946 = getelementptr %"struct.std::dcomplex"* %mem_tmp.135, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31947 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31945, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31948 = load double* %tmp.14.i31947 ; [#uses=1] - store double %tmp.15.i31948, double* %tmp.13.i31946 - %tmp.16.i31949 = getelementptr %"struct.std::dcomplex"* %mem_tmp.135, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31950 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31945, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31951 = load double* %tmp.17.i31950 ; [#uses=1] - store double %tmp.18.i31951, double* %tmp.16.i31949 - %tmp.4.i31925 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31924, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31962, double* %tmp.4.i31925 - %tmp.7.i31928 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31924, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31965, double* %tmp.7.i31928 - %tmp.0.i31931 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i31924, %"struct.std::dcomplex"* %mem_tmp.135 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31933 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31931, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31934 = load double* %tmp.14.i31933 ; [#uses=1] - %tmp.17.i31936 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31931, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31937 = load double* %tmp.17.i31936 ; [#uses=1] - %tmp.4.i31911 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31910, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31934, double* %tmp.4.i31911 - %tmp.7.i31914 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31910, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31937, double* %tmp.7.i31914 - %tmp.0.i31917 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31910, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31918 = getelementptr %"struct.std::dcomplex"* %mem_tmp.132, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31919 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31917, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31920 = load double* %tmp.14.i31919 ; [#uses=1] - store double %tmp.15.i31920, double* %tmp.13.i31918 - %tmp.16.i31921 = getelementptr %"struct.std::dcomplex"* %mem_tmp.132, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31922 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31917, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31923 = load double* %tmp.17.i31922 ; [#uses=1] - store double %tmp.18.i31923, double* %tmp.16.i31921 - %tmp.4.i31897 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31896, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31976, double* %tmp.4.i31897 - %tmp.7.i31900 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31896, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31979, double* %tmp.7.i31900 - %tmp.0.i31903 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31896, %"struct.std::dcomplex"* %mem_tmp.132 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31905 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31903, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31906 = load double* %tmp.14.i31905 ; [#uses=1] - %tmp.17.i31908 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31903, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31909 = load double* %tmp.17.i31908 ; [#uses=1] - store double %tmp.15.i31906, double* %tmp.2.i34364 - store double %tmp.18.i31909, double* %tmp.6.i34365 - %tmp.4.i31863 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31862, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31865 = load double* %tmp.5.i33866 ; [#uses=1] - store double %tmp.6.i31865, double* %tmp.4.i31863 - %tmp.7.i31866 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31862, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31868 = load double* %tmp.8.i33869 ; [#uses=1] - store double %tmp.9.i31868, double* %tmp.7.i31866 - %tmp.0.i31869 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31862, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31871 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31869, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31872 = load double* %tmp.14.i31871 ; [#uses=1] - %tmp.17.i31874 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31869, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31875 = load double* %tmp.17.i31874 ; [#uses=1] - %tmp.7.i31829 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i31843 = add double %tmp.7.i31829, %tmp.15.i31872 ; [#uses=1] - store double %tmp.15.i31843, double* %tmp.2.i34366 - %tmp.26.i31850 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i31861 = add double %tmp.26.i31850, %tmp.18.i31875 ; [#uses=1] - store double %tmp.31.i31861, double* %tmp.6.i34367 - %tmp.4.i31809 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31808, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31811 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i31811, double* %tmp.4.i31809 - %tmp.7.i31812 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31808, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31814 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i31814, double* %tmp.7.i31812 - %tmp.0.i31815 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31808, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31817 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31815, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31818 = load double* %tmp.14.i31817 ; [#uses=1] - %tmp.17.i31820 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31815, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31821 = load double* %tmp.17.i31820 ; [#uses=1] - %tmp.4.i31795 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31794, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31797 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i31797, double* %tmp.4.i31795 - %tmp.7.i31798 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31794, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31800 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i31800, double* %tmp.7.i31798 - %tmp.0.i31801 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31794, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31802 = getelementptr %"struct.std::dcomplex"* %mem_tmp.142, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31803 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31801, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31804 = load double* %tmp.14.i31803 ; [#uses=1] - store double %tmp.15.i31804, double* %tmp.13.i31802 - %tmp.16.i31805 = getelementptr %"struct.std::dcomplex"* %mem_tmp.142, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31806 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31801, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31807 = load double* %tmp.17.i31806 ; [#uses=1] - store double %tmp.18.i31807, double* %tmp.16.i31805 - %tmp.4.i31781 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31780, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31818, double* %tmp.4.i31781 - %tmp.7.i31784 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31780, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31821, double* %tmp.7.i31784 - %tmp.0.i31787 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i31780, %"struct.std::dcomplex"* %mem_tmp.142 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31789 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31787, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31790 = load double* %tmp.14.i31789 ; [#uses=1] - %tmp.17.i31792 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31787, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31793 = load double* %tmp.17.i31792 ; [#uses=1] - %tmp.4.i31767 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31766, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31790, double* %tmp.4.i31767 - %tmp.7.i31770 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31766, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31793, double* %tmp.7.i31770 - %tmp.0.i31773 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31766, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31775 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31773, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31776 = load double* %tmp.14.i31775 ; [#uses=1] - %tmp.17.i31778 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31773, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31779 = load double* %tmp.17.i31778 ; [#uses=1] - %tmp.4.i31753 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31752, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31755 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i31755, double* %tmp.4.i31753 - %tmp.7.i31756 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31752, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31758 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i31758, double* %tmp.7.i31756 - %tmp.0.i31759 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31752, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31761 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31759, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31762 = load double* %tmp.14.i31761 ; [#uses=1] - %tmp.17.i31764 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31759, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31765 = load double* %tmp.17.i31764 ; [#uses=1] - %tmp.4.i31739 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31738, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31741 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i31741, double* %tmp.4.i31739 - %tmp.7.i31742 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31738, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31744 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i31744, double* %tmp.7.i31742 - %tmp.0.i31745 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31738, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31746 = getelementptr %"struct.std::dcomplex"* %mem_tmp.146, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31747 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31745, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31748 = load double* %tmp.14.i31747 ; [#uses=1] - store double %tmp.15.i31748, double* %tmp.13.i31746 - %tmp.16.i31749 = getelementptr %"struct.std::dcomplex"* %mem_tmp.146, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31750 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31745, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31751 = load double* %tmp.17.i31750 ; [#uses=1] - store double %tmp.18.i31751, double* %tmp.16.i31749 - %tmp.4.i31725 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31724, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31762, double* %tmp.4.i31725 - %tmp.7.i31728 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31724, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31765, double* %tmp.7.i31728 - %tmp.0.i31731 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i31724, %"struct.std::dcomplex"* %mem_tmp.146 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31733 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31731, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31734 = load double* %tmp.14.i31733 ; [#uses=1] - %tmp.17.i31736 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31731, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31737 = load double* %tmp.17.i31736 ; [#uses=1] - %tmp.4.i31711 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31710, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31734, double* %tmp.4.i31711 - %tmp.7.i31714 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31710, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31737, double* %tmp.7.i31714 - %tmp.0.i31717 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31710, %"struct.std::dcomplex"* %tmp.30 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31718 = getelementptr %"struct.std::dcomplex"* %mem_tmp.143, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31719 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31717, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31720 = load double* %tmp.14.i31719 ; [#uses=1] - store double %tmp.15.i31720, double* %tmp.13.i31718 - %tmp.16.i31721 = getelementptr %"struct.std::dcomplex"* %mem_tmp.143, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31722 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31717, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31723 = load double* %tmp.17.i31722 ; [#uses=1] - store double %tmp.18.i31723, double* %tmp.16.i31721 - %tmp.4.i31697 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31696, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31776, double* %tmp.4.i31697 - %tmp.7.i31700 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31696, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31779, double* %tmp.7.i31700 - %tmp.0.i31703 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31696, %"struct.std::dcomplex"* %mem_tmp.143 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31705 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31703, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31706 = load double* %tmp.14.i31705 ; [#uses=1] - %tmp.17.i31708 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31703, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31709 = load double* %tmp.17.i31708 ; [#uses=1] - %tmp.4.i31683 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31682, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31685 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i31685, double* %tmp.4.i31683 - %tmp.7.i31686 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31682, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31688 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i31688, double* %tmp.7.i31686 - %tmp.0.i31689 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31682, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31691 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31689, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31692 = load double* %tmp.14.i31691 ; [#uses=1] - %tmp.17.i31694 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31689, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31695 = load double* %tmp.17.i31694 ; [#uses=1] - %tmp.4.i31669 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31668, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31671 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i31671, double* %tmp.4.i31669 - %tmp.7.i31672 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31668, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31674 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i31674, double* %tmp.7.i31672 - %tmp.0.i31675 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31668, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31676 = getelementptr %"struct.std::dcomplex"* %mem_tmp.150, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31677 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31675, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31678 = load double* %tmp.14.i31677 ; [#uses=1] - store double %tmp.15.i31678, double* %tmp.13.i31676 - %tmp.16.i31679 = getelementptr %"struct.std::dcomplex"* %mem_tmp.150, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31680 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31675, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31681 = load double* %tmp.17.i31680 ; [#uses=1] - store double %tmp.18.i31681, double* %tmp.16.i31679 - %tmp.4.i31655 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31654, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31692, double* %tmp.4.i31655 - %tmp.7.i31658 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31654, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31695, double* %tmp.7.i31658 - %tmp.0.i31661 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i31654, %"struct.std::dcomplex"* %mem_tmp.150 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31663 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31661, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31664 = load double* %tmp.14.i31663 ; [#uses=1] - %tmp.17.i31666 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31661, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31667 = load double* %tmp.17.i31666 ; [#uses=1] - %tmp.4.i31641 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31640, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31664, double* %tmp.4.i31641 - %tmp.7.i31644 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31640, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31667, double* %tmp.7.i31644 - %tmp.0.i31647 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31640, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31648 = getelementptr %"struct.std::dcomplex"* %mem_tmp.147, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31649 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31647, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31650 = load double* %tmp.14.i31649 ; [#uses=1] - store double %tmp.15.i31650, double* %tmp.13.i31648 - %tmp.16.i31651 = getelementptr %"struct.std::dcomplex"* %mem_tmp.147, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31652 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31647, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31653 = load double* %tmp.17.i31652 ; [#uses=1] - store double %tmp.18.i31653, double* %tmp.16.i31651 - %tmp.4.i31627 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31626, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31706, double* %tmp.4.i31627 - %tmp.7.i31630 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31626, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31709, double* %tmp.7.i31630 - %tmp.0.i31633 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31626, %"struct.std::dcomplex"* %mem_tmp.147 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31635 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31633, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31636 = load double* %tmp.14.i31635 ; [#uses=1] - %tmp.17.i31638 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31633, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31639 = load double* %tmp.17.i31638 ; [#uses=1] - store double %tmp.15.i31636, double* %tmp.2.i34364 - store double %tmp.18.i31639, double* %tmp.6.i34365 - %tmp.4.i31593 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31592, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31595 = load double* %tmp.5.i33326 ; [#uses=1] - store double %tmp.6.i31595, double* %tmp.4.i31593 - %tmp.7.i31596 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31592, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31598 = load double* %tmp.8.i33329 ; [#uses=1] - store double %tmp.9.i31598, double* %tmp.7.i31596 - %tmp.0.i31599 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31592, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31601 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31599, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31602 = load double* %tmp.14.i31601 ; [#uses=1] - %tmp.17.i31604 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31599, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31605 = load double* %tmp.17.i31604 ; [#uses=1] - %tmp.7.i31559 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i31573 = add double %tmp.7.i31559, %tmp.15.i31602 ; [#uses=1] - store double %tmp.15.i31573, double* %tmp.2.i34366 - %tmp.26.i31580 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i31591 = add double %tmp.26.i31580, %tmp.18.i31605 ; [#uses=1] - store double %tmp.31.i31591, double* %tmp.6.i34367 - %tmp.4.i31539 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31538, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31541 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i31541, double* %tmp.4.i31539 - %tmp.7.i31542 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31538, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31544 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i31544, double* %tmp.7.i31542 - %tmp.0.i31545 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31538, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31547 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31545, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31548 = load double* %tmp.14.i31547 ; [#uses=1] - %tmp.17.i31550 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31545, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31551 = load double* %tmp.17.i31550 ; [#uses=1] - %tmp.4.i31525 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31524, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31527 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i31527, double* %tmp.4.i31525 - %tmp.7.i31528 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31524, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31530 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i31530, double* %tmp.7.i31528 - %tmp.0.i31531 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31524, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31532 = getelementptr %"struct.std::dcomplex"* %mem_tmp.157, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31533 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31531, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31534 = load double* %tmp.14.i31533 ; [#uses=1] - store double %tmp.15.i31534, double* %tmp.13.i31532 - %tmp.16.i31535 = getelementptr %"struct.std::dcomplex"* %mem_tmp.157, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31536 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31531, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31537 = load double* %tmp.17.i31536 ; [#uses=1] - store double %tmp.18.i31537, double* %tmp.16.i31535 - %tmp.4.i31511 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31510, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31548, double* %tmp.4.i31511 - %tmp.7.i31514 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31510, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31551, double* %tmp.7.i31514 - %tmp.0.i31517 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i31510, %"struct.std::dcomplex"* %mem_tmp.157 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31519 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31517, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31520 = load double* %tmp.14.i31519 ; [#uses=1] - %tmp.17.i31522 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31517, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31523 = load double* %tmp.17.i31522 ; [#uses=1] - %tmp.4.i31497 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31496, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31520, double* %tmp.4.i31497 - %tmp.7.i31500 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31496, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31523, double* %tmp.7.i31500 - %tmp.0.i31503 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31496, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31505 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31503, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31506 = load double* %tmp.14.i31505 ; [#uses=1] - %tmp.17.i31508 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31503, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31509 = load double* %tmp.17.i31508 ; [#uses=1] - %tmp.4.i31483 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31482, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31485 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i31485, double* %tmp.4.i31483 - %tmp.7.i31486 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31482, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31488 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i31488, double* %tmp.7.i31486 - %tmp.0.i31489 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31482, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31491 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31489, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31492 = load double* %tmp.14.i31491 ; [#uses=1] - %tmp.17.i31494 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31489, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31495 = load double* %tmp.17.i31494 ; [#uses=1] - %tmp.4.i31469 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31468, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31471 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i31471, double* %tmp.4.i31469 - %tmp.7.i31472 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31468, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31474 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i31474, double* %tmp.7.i31472 - %tmp.0.i31475 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31468, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31476 = getelementptr %"struct.std::dcomplex"* %mem_tmp.161, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31477 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31475, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31478 = load double* %tmp.14.i31477 ; [#uses=1] - store double %tmp.15.i31478, double* %tmp.13.i31476 - %tmp.16.i31479 = getelementptr %"struct.std::dcomplex"* %mem_tmp.161, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31480 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31475, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31481 = load double* %tmp.17.i31480 ; [#uses=1] - store double %tmp.18.i31481, double* %tmp.16.i31479 - %tmp.4.i31455 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31454, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31492, double* %tmp.4.i31455 - %tmp.7.i31458 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31454, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31495, double* %tmp.7.i31458 - %tmp.0.i31461 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i31454, %"struct.std::dcomplex"* %mem_tmp.161 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31463 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31461, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31464 = load double* %tmp.14.i31463 ; [#uses=1] - %tmp.17.i31466 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31461, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31467 = load double* %tmp.17.i31466 ; [#uses=1] - %tmp.4.i31441 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31440, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31464, double* %tmp.4.i31441 - %tmp.7.i31444 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31440, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31467, double* %tmp.7.i31444 - %tmp.0.i31447 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31440, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31448 = getelementptr %"struct.std::dcomplex"* %mem_tmp.158, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31449 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31447, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31450 = load double* %tmp.14.i31449 ; [#uses=1] - store double %tmp.15.i31450, double* %tmp.13.i31448 - %tmp.16.i31451 = getelementptr %"struct.std::dcomplex"* %mem_tmp.158, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31452 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31447, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31453 = load double* %tmp.17.i31452 ; [#uses=1] - store double %tmp.18.i31453, double* %tmp.16.i31451 - %tmp.4.i31427 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31426, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31506, double* %tmp.4.i31427 - %tmp.7.i31430 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31426, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31509, double* %tmp.7.i31430 - %tmp.0.i31433 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31426, %"struct.std::dcomplex"* %mem_tmp.158 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31435 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31433, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31436 = load double* %tmp.14.i31435 ; [#uses=1] - %tmp.17.i31438 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31433, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31439 = load double* %tmp.17.i31438 ; [#uses=1] - %tmp.4.i31413 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31412, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31415 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i31415, double* %tmp.4.i31413 - %tmp.7.i31416 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31412, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31418 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i31418, double* %tmp.7.i31416 - %tmp.0.i31419 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31412, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31421 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31419, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31422 = load double* %tmp.14.i31421 ; [#uses=1] - %tmp.17.i31424 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31419, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31425 = load double* %tmp.17.i31424 ; [#uses=1] - %tmp.4.i31399 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31398, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31401 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i31401, double* %tmp.4.i31399 - %tmp.7.i31402 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31398, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31404 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i31404, double* %tmp.7.i31402 - %tmp.0.i31405 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31398, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31406 = getelementptr %"struct.std::dcomplex"* %mem_tmp.165, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31407 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31405, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31408 = load double* %tmp.14.i31407 ; [#uses=1] - store double %tmp.15.i31408, double* %tmp.13.i31406 - %tmp.16.i31409 = getelementptr %"struct.std::dcomplex"* %mem_tmp.165, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31410 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31405, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31411 = load double* %tmp.17.i31410 ; [#uses=1] - store double %tmp.18.i31411, double* %tmp.16.i31409 - %tmp.4.i31385 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31384, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31422, double* %tmp.4.i31385 - %tmp.7.i31388 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31384, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31425, double* %tmp.7.i31388 - %tmp.0.i31391 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i31384, %"struct.std::dcomplex"* %mem_tmp.165 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31393 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31391, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31394 = load double* %tmp.14.i31393 ; [#uses=1] - %tmp.17.i31396 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31391, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31397 = load double* %tmp.17.i31396 ; [#uses=1] - %tmp.4.i31371 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31370, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31394, double* %tmp.4.i31371 - %tmp.7.i31374 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31370, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31397, double* %tmp.7.i31374 - %tmp.0.i31377 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31370, %"struct.std::dcomplex"* %tmp.30 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31378 = getelementptr %"struct.std::dcomplex"* %mem_tmp.162, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31379 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31377, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31380 = load double* %tmp.14.i31379 ; [#uses=1] - store double %tmp.15.i31380, double* %tmp.13.i31378 - %tmp.16.i31381 = getelementptr %"struct.std::dcomplex"* %mem_tmp.162, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31382 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31377, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31383 = load double* %tmp.17.i31382 ; [#uses=1] - store double %tmp.18.i31383, double* %tmp.16.i31381 - %tmp.4.i31357 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31356, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31436, double* %tmp.4.i31357 - %tmp.7.i31360 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31356, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31439, double* %tmp.7.i31360 - %tmp.0.i31363 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31356, %"struct.std::dcomplex"* %mem_tmp.162 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31365 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31363, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31366 = load double* %tmp.14.i31365 ; [#uses=1] - %tmp.17.i31368 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31363, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31369 = load double* %tmp.17.i31368 ; [#uses=1] - store double %tmp.15.i31366, double* %tmp.2.i34364 - store double %tmp.18.i31369, double* %tmp.6.i34365 - %tmp.4.i31323 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31322, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31325 = load double* %tmp.5.i34136 ; [#uses=1] - store double %tmp.6.i31325, double* %tmp.4.i31323 - %tmp.7.i31326 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31322, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31328 = load double* %tmp.8.i34139 ; [#uses=1] - store double %tmp.9.i31328, double* %tmp.7.i31326 - %tmp.0.i31329 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31322, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31331 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31329, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31332 = load double* %tmp.14.i31331 ; [#uses=1] - %tmp.17.i31334 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31329, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31335 = load double* %tmp.17.i31334 ; [#uses=1] - %tmp.7.i31289 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i31303 = add double %tmp.7.i31289, %tmp.15.i31332 ; [#uses=1] - store double %tmp.15.i31303, double* %tmp.2.i34366 - %tmp.26.i31310 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i31321 = add double %tmp.26.i31310, %tmp.18.i31335 ; [#uses=1] - store double %tmp.31.i31321, double* %tmp.6.i34367 - %tmp.4.i31269 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31268, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31271 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i31271, double* %tmp.4.i31269 - %tmp.7.i31272 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31268, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31274 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i31274, double* %tmp.7.i31272 - %tmp.0.i31275 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31268, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31277 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31275, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31278 = load double* %tmp.14.i31277 ; [#uses=1] - %tmp.17.i31280 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31275, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31281 = load double* %tmp.17.i31280 ; [#uses=1] - %tmp.4.i31255 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31254, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31257 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i31257, double* %tmp.4.i31255 - %tmp.7.i31258 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31254, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31260 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i31260, double* %tmp.7.i31258 - %tmp.0.i31261 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31254, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31262 = getelementptr %"struct.std::dcomplex"* %mem_tmp.172, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31263 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31261, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31264 = load double* %tmp.14.i31263 ; [#uses=1] - store double %tmp.15.i31264, double* %tmp.13.i31262 - %tmp.16.i31265 = getelementptr %"struct.std::dcomplex"* %mem_tmp.172, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31266 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31261, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31267 = load double* %tmp.17.i31266 ; [#uses=1] - store double %tmp.18.i31267, double* %tmp.16.i31265 - %tmp.4.i31241 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31240, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31278, double* %tmp.4.i31241 - %tmp.7.i31244 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31240, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31281, double* %tmp.7.i31244 - %tmp.0.i31247 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i31240, %"struct.std::dcomplex"* %mem_tmp.172 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31249 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31247, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31250 = load double* %tmp.14.i31249 ; [#uses=1] - %tmp.17.i31252 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31247, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31253 = load double* %tmp.17.i31252 ; [#uses=1] - %tmp.4.i31227 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31226, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31250, double* %tmp.4.i31227 - %tmp.7.i31230 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31226, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31253, double* %tmp.7.i31230 - %tmp.0.i31233 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31226, %"struct.std::dcomplex"* %tmp.30 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31235 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31233, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31236 = load double* %tmp.14.i31235 ; [#uses=1] - %tmp.17.i31238 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31233, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31239 = load double* %tmp.17.i31238 ; [#uses=1] - %tmp.4.i31213 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31212, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31215 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i31215, double* %tmp.4.i31213 - %tmp.7.i31216 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31212, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31218 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i31218, double* %tmp.7.i31216 - %tmp.0.i31219 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31212, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31221 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31219, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31222 = load double* %tmp.14.i31221 ; [#uses=1] - %tmp.17.i31224 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31219, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31225 = load double* %tmp.17.i31224 ; [#uses=1] - %tmp.4.i31199 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31198, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31201 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i31201, double* %tmp.4.i31199 - %tmp.7.i31202 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31198, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31204 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i31204, double* %tmp.7.i31202 - %tmp.0.i31205 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31198, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31206 = getelementptr %"struct.std::dcomplex"* %mem_tmp.176, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31207 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31205, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31208 = load double* %tmp.14.i31207 ; [#uses=1] - store double %tmp.15.i31208, double* %tmp.13.i31206 - %tmp.16.i31209 = getelementptr %"struct.std::dcomplex"* %mem_tmp.176, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31210 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31205, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31211 = load double* %tmp.17.i31210 ; [#uses=1] - store double %tmp.18.i31211, double* %tmp.16.i31209 - %tmp.4.i31185 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31184, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31222, double* %tmp.4.i31185 - %tmp.7.i31188 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31184, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31225, double* %tmp.7.i31188 - %tmp.0.i31191 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i31184, %"struct.std::dcomplex"* %mem_tmp.176 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31193 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31191, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31194 = load double* %tmp.14.i31193 ; [#uses=1] - %tmp.17.i31196 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31191, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31197 = load double* %tmp.17.i31196 ; [#uses=1] - %tmp.4.i31171 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31170, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31194, double* %tmp.4.i31171 - %tmp.7.i31174 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31170, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31197, double* %tmp.7.i31174 - %tmp.0.i31177 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31170, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31178 = getelementptr %"struct.std::dcomplex"* %mem_tmp.173, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31179 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31177, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31180 = load double* %tmp.14.i31179 ; [#uses=1] - store double %tmp.15.i31180, double* %tmp.13.i31178 - %tmp.16.i31181 = getelementptr %"struct.std::dcomplex"* %mem_tmp.173, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31182 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31177, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31183 = load double* %tmp.17.i31182 ; [#uses=1] - store double %tmp.18.i31183, double* %tmp.16.i31181 - %tmp.4.i31157 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31156, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31236, double* %tmp.4.i31157 - %tmp.7.i31160 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31156, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31239, double* %tmp.7.i31160 - %tmp.0.i31163 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31156, %"struct.std::dcomplex"* %mem_tmp.173 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31165 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31163, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31166 = load double* %tmp.14.i31165 ; [#uses=1] - %tmp.17.i31168 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31163, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31169 = load double* %tmp.17.i31168 ; [#uses=1] - %tmp.4.i31143 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31142, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31145 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i31145, double* %tmp.4.i31143 - %tmp.7.i31146 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31142, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31148 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i31148, double* %tmp.7.i31146 - %tmp.0.i31149 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31142, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31151 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31149, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31152 = load double* %tmp.14.i31151 ; [#uses=1] - %tmp.17.i31154 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31149, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31155 = load double* %tmp.17.i31154 ; [#uses=1] - %tmp.4.i31129 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31128, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31131 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i31131, double* %tmp.4.i31129 - %tmp.7.i31132 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31128, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31134 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i31134, double* %tmp.7.i31132 - %tmp.0.i31135 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31128, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31136 = getelementptr %"struct.std::dcomplex"* %mem_tmp.180, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31137 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31135, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31138 = load double* %tmp.14.i31137 ; [#uses=1] - store double %tmp.15.i31138, double* %tmp.13.i31136 - %tmp.16.i31139 = getelementptr %"struct.std::dcomplex"* %mem_tmp.180, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31140 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31135, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31141 = load double* %tmp.17.i31140 ; [#uses=1] - store double %tmp.18.i31141, double* %tmp.16.i31139 - %tmp.4.i31115 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31114, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31152, double* %tmp.4.i31115 - %tmp.7.i31118 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31114, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31155, double* %tmp.7.i31118 - %tmp.0.i31121 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i31114, %"struct.std::dcomplex"* %mem_tmp.180 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31123 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31121, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31124 = load double* %tmp.14.i31123 ; [#uses=1] - %tmp.17.i31126 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31121, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31127 = load double* %tmp.17.i31126 ; [#uses=1] - %tmp.4.i31101 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31100, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31124, double* %tmp.4.i31101 - %tmp.7.i31104 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31100, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31127, double* %tmp.7.i31104 - %tmp.0.i31107 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31100, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i31108 = getelementptr %"struct.std::dcomplex"* %mem_tmp.177, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i31109 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31107, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31110 = load double* %tmp.14.i31109 ; [#uses=1] - store double %tmp.15.i31110, double* %tmp.13.i31108 - %tmp.16.i31111 = getelementptr %"struct.std::dcomplex"* %mem_tmp.177, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i31112 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31107, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31113 = load double* %tmp.17.i31112 ; [#uses=1] - store double %tmp.18.i31113, double* %tmp.16.i31111 - %tmp.4.i31087 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31086, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i31166, double* %tmp.4.i31087 - %tmp.7.i31090 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31086, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i31169, double* %tmp.7.i31090 - %tmp.0.i31093 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31086, %"struct.std::dcomplex"* %mem_tmp.177 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31095 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31093, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31096 = load double* %tmp.14.i31095 ; [#uses=1] - %tmp.17.i31098 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31093, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31099 = load double* %tmp.17.i31098 ; [#uses=1] - store double %tmp.15.i31096, double* %tmp.2.i34364 - store double %tmp.18.i31099, double* %tmp.6.i34365 - %tmp.4.i31053 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31052, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i31055 = load double* %tmp.5.i32460 ; [#uses=1] - store double %tmp.6.i31055, double* %tmp.4.i31053 - %tmp.7.i31056 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i31052, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i31058 = load double* %tmp.8.i32463 ; [#uses=1] - store double %tmp.9.i31058, double* %tmp.7.i31056 - %tmp.0.i31059 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i31052, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31061 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31059, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31062 = load double* %tmp.14.i31061 ; [#uses=1] - %tmp.17.i31064 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31059, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31065 = load double* %tmp.17.i31064 ; [#uses=1] - %tmp.7.i31019 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i31033 = add double %tmp.7.i31019, %tmp.15.i31062 ; [#uses=1] - store double %tmp.15.i31033, double* %tmp.2.i34366 - %tmp.26.i31040 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i31051 = add double %tmp.26.i31040, %tmp.18.i31065 ; [#uses=1] - store double %tmp.31.i31051, double* %tmp.6.i34367 - %tmp.4.i30999 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30998, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i31000 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 4, i32 1, i32 0, i32 0 ; [#uses=5] - %tmp.6.i31001 = load double* %tmp.5.i31000 ; [#uses=1] - store double %tmp.6.i31001, double* %tmp.4.i30999 - %tmp.7.i31002 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30998, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i31003 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 4, i32 1, i32 0, i32 1 ; [#uses=5] - %tmp.9.i31004 = load double* %tmp.8.i31003 ; [#uses=1] - store double %tmp.9.i31004, double* %tmp.7.i31002 - %tmp.0.i31005 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30998, %"struct.std::dcomplex"* %ret4 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i31007 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31005, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i31008 = load double* %tmp.14.i31007 ; [#uses=1] - %tmp.17.i31010 = getelementptr %"struct.std::dcomplex"* %tmp.0.i31005, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i31011 = load double* %tmp.17.i31010 ; [#uses=1] - %tmp.7.i30965 = load double* %tmp.2.i34368 ; [#uses=1] - %tmp.15.i30979 = add double %tmp.7.i30965, %tmp.15.i31008 ; [#uses=1] - store double %tmp.15.i30979, double* %tmp.2.i34368 - %tmp.26.i30986 = load double* %tmp.6.i34369 ; [#uses=1] - %tmp.31.i30997 = add double %tmp.26.i30986, %tmp.18.i31011 ; [#uses=1] - store double %tmp.31.i30997, double* %tmp.6.i34369 - store double 0.000000e+00, double* %tmp.2.i34366 - store double 0.000000e+00, double* %tmp.6.i34367 - %tmp.4.i30943 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30942, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30945 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i30945, double* %tmp.4.i30943 - %tmp.7.i30946 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30942, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30948 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i30948, double* %tmp.7.i30946 - %tmp.0.i30949 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30942, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30951 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30949, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30952 = load double* %tmp.14.i30951 ; [#uses=1] - %tmp.17.i30954 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30949, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30955 = load double* %tmp.17.i30954 ; [#uses=1] - %tmp.4.i30929 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30928, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30931 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i30931, double* %tmp.4.i30929 - %tmp.7.i30932 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30928, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30934 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i30934, double* %tmp.7.i30932 - %tmp.0.i30935 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30928, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30936 = getelementptr %"struct.std::dcomplex"* %mem_tmp.188, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30937 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30935, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30938 = load double* %tmp.14.i30937 ; [#uses=1] - store double %tmp.15.i30938, double* %tmp.13.i30936 - %tmp.16.i30939 = getelementptr %"struct.std::dcomplex"* %mem_tmp.188, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30940 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30935, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30941 = load double* %tmp.17.i30940 ; [#uses=1] - store double %tmp.18.i30941, double* %tmp.16.i30939 - %tmp.4.i30915 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30914, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30952, double* %tmp.4.i30915 - %tmp.7.i30918 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30914, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30955, double* %tmp.7.i30918 - %tmp.0.i30921 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i30914, %"struct.std::dcomplex"* %mem_tmp.188 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30923 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30921, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30924 = load double* %tmp.14.i30923 ; [#uses=1] - %tmp.17.i30926 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30921, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30927 = load double* %tmp.17.i30926 ; [#uses=1] - %tmp.4.i30901 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30900, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30924, double* %tmp.4.i30901 - %tmp.7.i30904 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30900, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30927, double* %tmp.7.i30904 - %tmp.0.i30907 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30900, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30909 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30907, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30910 = load double* %tmp.14.i30909 ; [#uses=1] - %tmp.17.i30912 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30907, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30913 = load double* %tmp.17.i30912 ; [#uses=1] - %tmp.4.i30887 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30886, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30889 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i30889, double* %tmp.4.i30887 - %tmp.7.i30890 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30886, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30892 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i30892, double* %tmp.7.i30890 - %tmp.0.i30893 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30886, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30895 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30893, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30896 = load double* %tmp.14.i30895 ; [#uses=1] - %tmp.17.i30898 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30893, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30899 = load double* %tmp.17.i30898 ; [#uses=1] - %tmp.4.i30873 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30872, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30875 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i30875, double* %tmp.4.i30873 - %tmp.7.i30876 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30872, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30878 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i30878, double* %tmp.7.i30876 - %tmp.0.i30879 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30872, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30880 = getelementptr %"struct.std::dcomplex"* %mem_tmp.192, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30881 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30879, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30882 = load double* %tmp.14.i30881 ; [#uses=1] - store double %tmp.15.i30882, double* %tmp.13.i30880 - %tmp.16.i30883 = getelementptr %"struct.std::dcomplex"* %mem_tmp.192, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30884 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30879, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30885 = load double* %tmp.17.i30884 ; [#uses=1] - store double %tmp.18.i30885, double* %tmp.16.i30883 - %tmp.4.i30859 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30858, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30896, double* %tmp.4.i30859 - %tmp.7.i30862 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30858, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30899, double* %tmp.7.i30862 - %tmp.0.i30865 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i30858, %"struct.std::dcomplex"* %mem_tmp.192 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30867 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30865, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30868 = load double* %tmp.14.i30867 ; [#uses=1] - %tmp.17.i30870 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30865, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30871 = load double* %tmp.17.i30870 ; [#uses=1] - %tmp.4.i30845 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30844, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30868, double* %tmp.4.i30845 - %tmp.7.i30848 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30844, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30871, double* %tmp.7.i30848 - %tmp.0.i30851 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30844, %"struct.std::dcomplex"* %tmp.30 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30852 = getelementptr %"struct.std::dcomplex"* %mem_tmp.189, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30853 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30851, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30854 = load double* %tmp.14.i30853 ; [#uses=1] - store double %tmp.15.i30854, double* %tmp.13.i30852 - %tmp.16.i30855 = getelementptr %"struct.std::dcomplex"* %mem_tmp.189, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30856 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30851, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30857 = load double* %tmp.17.i30856 ; [#uses=1] - store double %tmp.18.i30857, double* %tmp.16.i30855 - %tmp.4.i30831 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30830, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30910, double* %tmp.4.i30831 - %tmp.7.i30834 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30830, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30913, double* %tmp.7.i30834 - %tmp.0.i30837 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30830, %"struct.std::dcomplex"* %mem_tmp.189 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30839 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30837, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30840 = load double* %tmp.14.i30839 ; [#uses=1] - %tmp.17.i30842 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30837, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30843 = load double* %tmp.17.i30842 ; [#uses=1] - %tmp.4.i30817 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30816, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30819 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i30819, double* %tmp.4.i30817 - %tmp.7.i30820 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30816, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30822 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i30822, double* %tmp.7.i30820 - %tmp.0.i30823 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30816, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30825 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30823, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30826 = load double* %tmp.14.i30825 ; [#uses=1] - %tmp.17.i30828 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30823, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30829 = load double* %tmp.17.i30828 ; [#uses=1] - %tmp.4.i30803 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30802, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30805 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i30805, double* %tmp.4.i30803 - %tmp.7.i30806 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30802, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30808 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i30808, double* %tmp.7.i30806 - %tmp.0.i30809 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30802, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30810 = getelementptr %"struct.std::dcomplex"* %mem_tmp.196, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30811 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30809, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30812 = load double* %tmp.14.i30811 ; [#uses=1] - store double %tmp.15.i30812, double* %tmp.13.i30810 - %tmp.16.i30813 = getelementptr %"struct.std::dcomplex"* %mem_tmp.196, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30814 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30809, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30815 = load double* %tmp.17.i30814 ; [#uses=1] - store double %tmp.18.i30815, double* %tmp.16.i30813 - %tmp.4.i30789 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30788, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30826, double* %tmp.4.i30789 - %tmp.7.i30792 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30788, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30829, double* %tmp.7.i30792 - %tmp.0.i30795 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i30788, %"struct.std::dcomplex"* %mem_tmp.196 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30797 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30795, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30798 = load double* %tmp.14.i30797 ; [#uses=1] - %tmp.17.i30800 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30795, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30801 = load double* %tmp.17.i30800 ; [#uses=1] - %tmp.4.i30775 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30774, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30798, double* %tmp.4.i30775 - %tmp.7.i30778 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30774, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30801, double* %tmp.7.i30778 - %tmp.0.i30781 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30774, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30782 = getelementptr %"struct.std::dcomplex"* %mem_tmp.193, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30783 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30781, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30784 = load double* %tmp.14.i30783 ; [#uses=1] - store double %tmp.15.i30784, double* %tmp.13.i30782 - %tmp.16.i30785 = getelementptr %"struct.std::dcomplex"* %mem_tmp.193, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30786 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30781, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30787 = load double* %tmp.17.i30786 ; [#uses=1] - store double %tmp.18.i30787, double* %tmp.16.i30785 - %tmp.4.i30761 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30760, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30840, double* %tmp.4.i30761 - %tmp.7.i30764 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30760, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30843, double* %tmp.7.i30764 - %tmp.0.i30767 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30760, %"struct.std::dcomplex"* %mem_tmp.193 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30769 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30767, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30770 = load double* %tmp.14.i30769 ; [#uses=1] - %tmp.17.i30772 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30767, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30773 = load double* %tmp.17.i30772 ; [#uses=1] - store double %tmp.15.i30770, double* %tmp.2.i34364 - store double %tmp.18.i30773, double* %tmp.6.i34365 - %tmp.4.i30727 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30726, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30729 = load double* %tmp.5.i32460 ; [#uses=1] - store double %tmp.6.i30729, double* %tmp.4.i30727 - %tmp.7.i30730 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30726, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30732 = load double* %tmp.8.i32463 ; [#uses=1] - store double %tmp.9.i30732, double* %tmp.7.i30730 - %tmp.0.i30733 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30726, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30735 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30733, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30736 = load double* %tmp.14.i30735 ; [#uses=1] - %tmp.17.i30738 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30733, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30739 = load double* %tmp.17.i30738 ; [#uses=1] - %tmp.7.i30693 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i30707 = add double %tmp.7.i30693, %tmp.15.i30736 ; [#uses=1] - store double %tmp.15.i30707, double* %tmp.2.i34366 - %tmp.26.i30714 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i30725 = add double %tmp.26.i30714, %tmp.18.i30739 ; [#uses=1] - store double %tmp.31.i30725, double* %tmp.6.i34367 - %tmp.4.i30673 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30672, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30675 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i30675, double* %tmp.4.i30673 - %tmp.7.i30676 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30672, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30678 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i30678, double* %tmp.7.i30676 - %tmp.0.i30679 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30672, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30681 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30679, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30682 = load double* %tmp.14.i30681 ; [#uses=1] - %tmp.17.i30684 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30679, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30685 = load double* %tmp.17.i30684 ; [#uses=1] - %tmp.4.i30659 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30658, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30661 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i30661, double* %tmp.4.i30659 - %tmp.7.i30662 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30658, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30664 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i30664, double* %tmp.7.i30662 - %tmp.0.i30665 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30658, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30666 = getelementptr %"struct.std::dcomplex"* %mem_tmp.203, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30667 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30665, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30668 = load double* %tmp.14.i30667 ; [#uses=1] - store double %tmp.15.i30668, double* %tmp.13.i30666 - %tmp.16.i30669 = getelementptr %"struct.std::dcomplex"* %mem_tmp.203, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30670 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30665, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30671 = load double* %tmp.17.i30670 ; [#uses=1] - store double %tmp.18.i30671, double* %tmp.16.i30669 - %tmp.4.i30645 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30644, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30682, double* %tmp.4.i30645 - %tmp.7.i30648 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30644, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30685, double* %tmp.7.i30648 - %tmp.0.i30651 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i30644, %"struct.std::dcomplex"* %mem_tmp.203 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30653 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30651, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30654 = load double* %tmp.14.i30653 ; [#uses=1] - %tmp.17.i30656 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30651, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30657 = load double* %tmp.17.i30656 ; [#uses=1] - %tmp.4.i30631 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30630, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30654, double* %tmp.4.i30631 - %tmp.7.i30634 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30630, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30657, double* %tmp.7.i30634 - %tmp.0.i30637 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30630, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30639 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30637, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30640 = load double* %tmp.14.i30639 ; [#uses=1] - %tmp.17.i30642 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30637, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30643 = load double* %tmp.17.i30642 ; [#uses=1] - %tmp.4.i30617 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30616, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30619 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i30619, double* %tmp.4.i30617 - %tmp.7.i30620 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30616, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30622 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i30622, double* %tmp.7.i30620 - %tmp.0.i30623 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30616, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30625 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30623, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30626 = load double* %tmp.14.i30625 ; [#uses=1] - %tmp.17.i30628 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30623, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30629 = load double* %tmp.17.i30628 ; [#uses=1] - %tmp.4.i30603 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30602, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30605 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i30605, double* %tmp.4.i30603 - %tmp.7.i30606 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30602, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30608 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i30608, double* %tmp.7.i30606 - %tmp.0.i30609 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30602, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30610 = getelementptr %"struct.std::dcomplex"* %mem_tmp.207, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30611 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30609, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30612 = load double* %tmp.14.i30611 ; [#uses=1] - store double %tmp.15.i30612, double* %tmp.13.i30610 - %tmp.16.i30613 = getelementptr %"struct.std::dcomplex"* %mem_tmp.207, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30614 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30609, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30615 = load double* %tmp.17.i30614 ; [#uses=1] - store double %tmp.18.i30615, double* %tmp.16.i30613 - %tmp.4.i30589 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30588, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30626, double* %tmp.4.i30589 - %tmp.7.i30592 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30588, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30629, double* %tmp.7.i30592 - %tmp.0.i30595 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i30588, %"struct.std::dcomplex"* %mem_tmp.207 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30597 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30595, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30598 = load double* %tmp.14.i30597 ; [#uses=1] - %tmp.17.i30600 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30595, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30601 = load double* %tmp.17.i30600 ; [#uses=1] - %tmp.4.i30575 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30574, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30598, double* %tmp.4.i30575 - %tmp.7.i30578 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30574, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30601, double* %tmp.7.i30578 - %tmp.0.i30581 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30574, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30582 = getelementptr %"struct.std::dcomplex"* %mem_tmp.204, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30583 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30581, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30584 = load double* %tmp.14.i30583 ; [#uses=1] - store double %tmp.15.i30584, double* %tmp.13.i30582 - %tmp.16.i30585 = getelementptr %"struct.std::dcomplex"* %mem_tmp.204, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30586 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30581, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30587 = load double* %tmp.17.i30586 ; [#uses=1] - store double %tmp.18.i30587, double* %tmp.16.i30585 - %tmp.4.i30561 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30560, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30640, double* %tmp.4.i30561 - %tmp.7.i30564 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30560, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30643, double* %tmp.7.i30564 - %tmp.0.i30567 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30560, %"struct.std::dcomplex"* %mem_tmp.204 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30569 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30567, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30570 = load double* %tmp.14.i30569 ; [#uses=1] - %tmp.17.i30572 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30567, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30573 = load double* %tmp.17.i30572 ; [#uses=1] - %tmp.4.i30547 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30546, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30549 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i30549, double* %tmp.4.i30547 - %tmp.7.i30550 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30546, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30552 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i30552, double* %tmp.7.i30550 - %tmp.0.i30553 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30546, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30555 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30553, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30556 = load double* %tmp.14.i30555 ; [#uses=1] - %tmp.17.i30558 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30553, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30559 = load double* %tmp.17.i30558 ; [#uses=1] - %tmp.4.i30533 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30532, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30535 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i30535, double* %tmp.4.i30533 - %tmp.7.i30536 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30532, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30538 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i30538, double* %tmp.7.i30536 - %tmp.0.i30539 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30532, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30540 = getelementptr %"struct.std::dcomplex"* %mem_tmp.211, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30541 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30539, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30542 = load double* %tmp.14.i30541 ; [#uses=1] - store double %tmp.15.i30542, double* %tmp.13.i30540 - %tmp.16.i30543 = getelementptr %"struct.std::dcomplex"* %mem_tmp.211, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30544 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30539, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30545 = load double* %tmp.17.i30544 ; [#uses=1] - store double %tmp.18.i30545, double* %tmp.16.i30543 - %tmp.4.i30519 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30518, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30556, double* %tmp.4.i30519 - %tmp.7.i30522 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30518, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30559, double* %tmp.7.i30522 - %tmp.0.i30525 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i30518, %"struct.std::dcomplex"* %mem_tmp.211 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30527 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30525, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30528 = load double* %tmp.14.i30527 ; [#uses=1] - %tmp.17.i30530 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30525, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30531 = load double* %tmp.17.i30530 ; [#uses=1] - %tmp.4.i30505 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30504, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30528, double* %tmp.4.i30505 - %tmp.7.i30508 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30504, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30531, double* %tmp.7.i30508 - %tmp.0.i30511 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30504, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30512 = getelementptr %"struct.std::dcomplex"* %mem_tmp.208, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30513 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30511, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30514 = load double* %tmp.14.i30513 ; [#uses=1] - store double %tmp.15.i30514, double* %tmp.13.i30512 - %tmp.16.i30515 = getelementptr %"struct.std::dcomplex"* %mem_tmp.208, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30516 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30511, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30517 = load double* %tmp.17.i30516 ; [#uses=1] - store double %tmp.18.i30517, double* %tmp.16.i30515 - %tmp.4.i30491 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30490, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30570, double* %tmp.4.i30491 - %tmp.7.i30494 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30490, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30573, double* %tmp.7.i30494 - %tmp.0.i30497 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30490, %"struct.std::dcomplex"* %mem_tmp.208 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30499 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30497, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30500 = load double* %tmp.14.i30499 ; [#uses=1] - %tmp.17.i30502 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30497, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30503 = load double* %tmp.17.i30502 ; [#uses=1] - store double %tmp.15.i30500, double* %tmp.2.i34364 - store double %tmp.18.i30503, double* %tmp.6.i34365 - %tmp.4.i30457 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30456, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30459 = load double* %tmp.5.i33866 ; [#uses=1] - store double %tmp.6.i30459, double* %tmp.4.i30457 - %tmp.7.i30460 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30456, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30462 = load double* %tmp.8.i33869 ; [#uses=1] - store double %tmp.9.i30462, double* %tmp.7.i30460 - %tmp.0.i30463 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30456, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30465 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30463, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30466 = load double* %tmp.14.i30465 ; [#uses=1] - %tmp.17.i30468 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30463, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30469 = load double* %tmp.17.i30468 ; [#uses=1] - %tmp.7.i30423 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i30437 = add double %tmp.7.i30423, %tmp.15.i30466 ; [#uses=1] - store double %tmp.15.i30437, double* %tmp.2.i34366 - %tmp.26.i30444 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i30455 = add double %tmp.26.i30444, %tmp.18.i30469 ; [#uses=1] - store double %tmp.31.i30455, double* %tmp.6.i34367 - %tmp.4.i30403 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30402, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30405 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i30405, double* %tmp.4.i30403 - %tmp.7.i30406 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30402, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30408 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i30408, double* %tmp.7.i30406 - %tmp.0.i30409 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30402, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30411 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30409, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30412 = load double* %tmp.14.i30411 ; [#uses=1] - %tmp.17.i30414 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30409, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30415 = load double* %tmp.17.i30414 ; [#uses=1] - %tmp.4.i30389 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30388, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30391 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i30391, double* %tmp.4.i30389 - %tmp.7.i30392 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30388, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30394 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i30394, double* %tmp.7.i30392 - %tmp.0.i30395 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30388, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30396 = getelementptr %"struct.std::dcomplex"* %mem_tmp.218, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30397 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30395, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30398 = load double* %tmp.14.i30397 ; [#uses=1] - store double %tmp.15.i30398, double* %tmp.13.i30396 - %tmp.16.i30399 = getelementptr %"struct.std::dcomplex"* %mem_tmp.218, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30400 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30395, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30401 = load double* %tmp.17.i30400 ; [#uses=1] - store double %tmp.18.i30401, double* %tmp.16.i30399 - %tmp.4.i30375 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30374, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30412, double* %tmp.4.i30375 - %tmp.7.i30378 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30374, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30415, double* %tmp.7.i30378 - %tmp.0.i30381 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i30374, %"struct.std::dcomplex"* %mem_tmp.218 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30383 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30381, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30384 = load double* %tmp.14.i30383 ; [#uses=1] - %tmp.17.i30386 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30381, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30387 = load double* %tmp.17.i30386 ; [#uses=1] - %tmp.4.i30361 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30360, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30384, double* %tmp.4.i30361 - %tmp.7.i30364 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30360, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30387, double* %tmp.7.i30364 - %tmp.0.i30367 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30360, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30369 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30367, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30370 = load double* %tmp.14.i30369 ; [#uses=1] - %tmp.17.i30372 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30367, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30373 = load double* %tmp.17.i30372 ; [#uses=1] - %tmp.4.i30347 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30346, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30349 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i30349, double* %tmp.4.i30347 - %tmp.7.i30350 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30346, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30352 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i30352, double* %tmp.7.i30350 - %tmp.0.i30353 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30346, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30355 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30353, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30356 = load double* %tmp.14.i30355 ; [#uses=1] - %tmp.17.i30358 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30353, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30359 = load double* %tmp.17.i30358 ; [#uses=1] - %tmp.4.i30333 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30332, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30335 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i30335, double* %tmp.4.i30333 - %tmp.7.i30336 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30332, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30338 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i30338, double* %tmp.7.i30336 - %tmp.0.i30339 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30332, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30340 = getelementptr %"struct.std::dcomplex"* %mem_tmp.222, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30341 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30339, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30342 = load double* %tmp.14.i30341 ; [#uses=1] - store double %tmp.15.i30342, double* %tmp.13.i30340 - %tmp.16.i30343 = getelementptr %"struct.std::dcomplex"* %mem_tmp.222, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30344 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30339, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30345 = load double* %tmp.17.i30344 ; [#uses=1] - store double %tmp.18.i30345, double* %tmp.16.i30343 - %tmp.4.i30319 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30318, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30356, double* %tmp.4.i30319 - %tmp.7.i30322 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30318, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30359, double* %tmp.7.i30322 - %tmp.0.i30325 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i30318, %"struct.std::dcomplex"* %mem_tmp.222 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30327 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30325, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30328 = load double* %tmp.14.i30327 ; [#uses=1] - %tmp.17.i30330 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30325, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30331 = load double* %tmp.17.i30330 ; [#uses=1] - %tmp.4.i30305 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30304, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30328, double* %tmp.4.i30305 - %tmp.7.i30308 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30304, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30331, double* %tmp.7.i30308 - %tmp.0.i30311 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30304, %"struct.std::dcomplex"* %tmp.30 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30312 = getelementptr %"struct.std::dcomplex"* %mem_tmp.219, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30313 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30311, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30314 = load double* %tmp.14.i30313 ; [#uses=1] - store double %tmp.15.i30314, double* %tmp.13.i30312 - %tmp.16.i30315 = getelementptr %"struct.std::dcomplex"* %mem_tmp.219, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30316 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30311, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30317 = load double* %tmp.17.i30316 ; [#uses=1] - store double %tmp.18.i30317, double* %tmp.16.i30315 - %tmp.4.i30291 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30290, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30370, double* %tmp.4.i30291 - %tmp.7.i30294 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30290, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30373, double* %tmp.7.i30294 - %tmp.0.i30297 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30290, %"struct.std::dcomplex"* %mem_tmp.219 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30299 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30297, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30300 = load double* %tmp.14.i30299 ; [#uses=1] - %tmp.17.i30302 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30297, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30303 = load double* %tmp.17.i30302 ; [#uses=1] - %tmp.4.i30277 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30276, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30279 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i30279, double* %tmp.4.i30277 - %tmp.7.i30280 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30276, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30282 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i30282, double* %tmp.7.i30280 - %tmp.0.i30283 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30276, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30285 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30283, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30286 = load double* %tmp.14.i30285 ; [#uses=1] - %tmp.17.i30288 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30283, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30289 = load double* %tmp.17.i30288 ; [#uses=1] - %tmp.4.i30263 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30262, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30265 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i30265, double* %tmp.4.i30263 - %tmp.7.i30266 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30262, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30268 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i30268, double* %tmp.7.i30266 - %tmp.0.i30269 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30262, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30270 = getelementptr %"struct.std::dcomplex"* %mem_tmp.226, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30271 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30269, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30272 = load double* %tmp.14.i30271 ; [#uses=1] - store double %tmp.15.i30272, double* %tmp.13.i30270 - %tmp.16.i30273 = getelementptr %"struct.std::dcomplex"* %mem_tmp.226, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30274 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30269, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30275 = load double* %tmp.17.i30274 ; [#uses=1] - store double %tmp.18.i30275, double* %tmp.16.i30273 - %tmp.4.i30249 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30248, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30286, double* %tmp.4.i30249 - %tmp.7.i30252 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30248, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30289, double* %tmp.7.i30252 - %tmp.0.i30255 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i30248, %"struct.std::dcomplex"* %mem_tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30257 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30255, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30258 = load double* %tmp.14.i30257 ; [#uses=1] - %tmp.17.i30260 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30255, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30261 = load double* %tmp.17.i30260 ; [#uses=1] - %tmp.4.i30235 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30234, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30258, double* %tmp.4.i30235 - %tmp.7.i30238 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30234, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30261, double* %tmp.7.i30238 - %tmp.0.i30241 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30234, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30242 = getelementptr %"struct.std::dcomplex"* %mem_tmp.223, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30243 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30241, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30244 = load double* %tmp.14.i30243 ; [#uses=1] - store double %tmp.15.i30244, double* %tmp.13.i30242 - %tmp.16.i30245 = getelementptr %"struct.std::dcomplex"* %mem_tmp.223, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30246 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30241, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30247 = load double* %tmp.17.i30246 ; [#uses=1] - store double %tmp.18.i30247, double* %tmp.16.i30245 - %tmp.4.i30221 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30220, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30300, double* %tmp.4.i30221 - %tmp.7.i30224 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30220, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30303, double* %tmp.7.i30224 - %tmp.0.i30227 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30220, %"struct.std::dcomplex"* %mem_tmp.223 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30229 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30227, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30230 = load double* %tmp.14.i30229 ; [#uses=1] - %tmp.17.i30232 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30227, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30233 = load double* %tmp.17.i30232 ; [#uses=1] - store double %tmp.15.i30230, double* %tmp.2.i34364 - store double %tmp.18.i30233, double* %tmp.6.i34365 - %tmp.4.i30187 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30186, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30189 = load double* %tmp.5.i33596 ; [#uses=1] - store double %tmp.6.i30189, double* %tmp.4.i30187 - %tmp.7.i30190 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30186, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30192 = load double* %tmp.8.i33599 ; [#uses=1] - store double %tmp.9.i30192, double* %tmp.7.i30190 - %tmp.0.i30193 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30186, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30195 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30193, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30196 = load double* %tmp.14.i30195 ; [#uses=1] - %tmp.17.i30198 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30193, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30199 = load double* %tmp.17.i30198 ; [#uses=1] - %tmp.7.i30153 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i30167 = add double %tmp.7.i30153, %tmp.15.i30196 ; [#uses=1] - store double %tmp.15.i30167, double* %tmp.2.i34366 - %tmp.26.i30174 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i30185 = add double %tmp.26.i30174, %tmp.18.i30199 ; [#uses=1] - store double %tmp.31.i30185, double* %tmp.6.i34367 - %tmp.4.i30133 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30132, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30135 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i30135, double* %tmp.4.i30133 - %tmp.7.i30136 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30132, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30138 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i30138, double* %tmp.7.i30136 - %tmp.0.i30139 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30132, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30141 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30139, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30142 = load double* %tmp.14.i30141 ; [#uses=1] - %tmp.17.i30144 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30139, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30145 = load double* %tmp.17.i30144 ; [#uses=1] - %tmp.4.i30119 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30118, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30121 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i30121, double* %tmp.4.i30119 - %tmp.7.i30122 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30118, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30124 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i30124, double* %tmp.7.i30122 - %tmp.0.i30125 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30118, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30126 = getelementptr %"struct.std::dcomplex"* %mem_tmp.233, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30127 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30125, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30128 = load double* %tmp.14.i30127 ; [#uses=1] - store double %tmp.15.i30128, double* %tmp.13.i30126 - %tmp.16.i30129 = getelementptr %"struct.std::dcomplex"* %mem_tmp.233, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30130 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30125, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30131 = load double* %tmp.17.i30130 ; [#uses=1] - store double %tmp.18.i30131, double* %tmp.16.i30129 - %tmp.4.i30105 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30104, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30142, double* %tmp.4.i30105 - %tmp.7.i30108 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30104, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30145, double* %tmp.7.i30108 - %tmp.0.i30111 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i30104, %"struct.std::dcomplex"* %mem_tmp.233 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30113 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30111, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30114 = load double* %tmp.14.i30113 ; [#uses=1] - %tmp.17.i30116 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30111, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30117 = load double* %tmp.17.i30116 ; [#uses=1] - %tmp.4.i30091 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30090, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30114, double* %tmp.4.i30091 - %tmp.7.i30094 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30090, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30117, double* %tmp.7.i30094 - %tmp.0.i30097 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30090, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30099 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30097, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30100 = load double* %tmp.14.i30099 ; [#uses=1] - %tmp.17.i30102 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30097, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30103 = load double* %tmp.17.i30102 ; [#uses=1] - %tmp.4.i30077 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30076, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30079 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i30079, double* %tmp.4.i30077 - %tmp.7.i30080 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30076, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30082 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i30082, double* %tmp.7.i30080 - %tmp.0.i30083 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30076, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30085 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30083, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30086 = load double* %tmp.14.i30085 ; [#uses=1] - %tmp.17.i30088 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30083, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30089 = load double* %tmp.17.i30088 ; [#uses=1] - %tmp.4.i30063 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30062, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30065 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i30065, double* %tmp.4.i30063 - %tmp.7.i30066 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30062, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30068 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i30068, double* %tmp.7.i30066 - %tmp.0.i30069 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30062, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30070 = getelementptr %"struct.std::dcomplex"* %mem_tmp.237, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30071 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30069, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30072 = load double* %tmp.14.i30071 ; [#uses=1] - store double %tmp.15.i30072, double* %tmp.13.i30070 - %tmp.16.i30073 = getelementptr %"struct.std::dcomplex"* %mem_tmp.237, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30074 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30069, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30075 = load double* %tmp.17.i30074 ; [#uses=1] - store double %tmp.18.i30075, double* %tmp.16.i30073 - %tmp.4.i30049 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30048, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30086, double* %tmp.4.i30049 - %tmp.7.i30052 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30048, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30089, double* %tmp.7.i30052 - %tmp.0.i30055 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i30048, %"struct.std::dcomplex"* %mem_tmp.237 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30057 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30055, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30058 = load double* %tmp.14.i30057 ; [#uses=1] - %tmp.17.i30060 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30055, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30061 = load double* %tmp.17.i30060 ; [#uses=1] - %tmp.4.i30035 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30034, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30058, double* %tmp.4.i30035 - %tmp.7.i30038 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30034, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30061, double* %tmp.7.i30038 - %tmp.0.i30041 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30034, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30042 = getelementptr %"struct.std::dcomplex"* %mem_tmp.234, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30043 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30041, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30044 = load double* %tmp.14.i30043 ; [#uses=1] - store double %tmp.15.i30044, double* %tmp.13.i30042 - %tmp.16.i30045 = getelementptr %"struct.std::dcomplex"* %mem_tmp.234, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30046 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30041, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30047 = load double* %tmp.17.i30046 ; [#uses=1] - store double %tmp.18.i30047, double* %tmp.16.i30045 - %tmp.4.i30021 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30020, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30100, double* %tmp.4.i30021 - %tmp.7.i30024 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30020, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30103, double* %tmp.7.i30024 - %tmp.0.i30027 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30020, %"struct.std::dcomplex"* %mem_tmp.234 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30029 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30027, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30030 = load double* %tmp.14.i30029 ; [#uses=1] - %tmp.17.i30032 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30027, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30033 = load double* %tmp.17.i30032 ; [#uses=1] - %tmp.4.i30007 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30006, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i30009 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i30009, double* %tmp.4.i30007 - %tmp.7.i30010 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i30006, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i30012 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i30012, double* %tmp.7.i30010 - %tmp.0.i30013 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i30006, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i30015 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30013, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30016 = load double* %tmp.14.i30015 ; [#uses=1] - %tmp.17.i30018 = getelementptr %"struct.std::dcomplex"* %tmp.0.i30013, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30019 = load double* %tmp.17.i30018 ; [#uses=1] - %tmp.4.i29993 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29992, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29995 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i29995, double* %tmp.4.i29993 - %tmp.7.i29996 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29992, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29998 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i29998, double* %tmp.7.i29996 - %tmp.0.i29999 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29992, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i30000 = getelementptr %"struct.std::dcomplex"* %mem_tmp.241, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i30001 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29999, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i30002 = load double* %tmp.14.i30001 ; [#uses=1] - store double %tmp.15.i30002, double* %tmp.13.i30000 - %tmp.16.i30003 = getelementptr %"struct.std::dcomplex"* %mem_tmp.241, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i30004 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29999, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i30005 = load double* %tmp.17.i30004 ; [#uses=1] - store double %tmp.18.i30005, double* %tmp.16.i30003 - %tmp.4.i29979 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29978, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30016, double* %tmp.4.i29979 - %tmp.7.i29982 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29978, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30019, double* %tmp.7.i29982 - %tmp.0.i29985 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i29978, %"struct.std::dcomplex"* %mem_tmp.241 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29987 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29985, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29988 = load double* %tmp.14.i29987 ; [#uses=1] - %tmp.17.i29990 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29985, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29991 = load double* %tmp.17.i29990 ; [#uses=1] - %tmp.4.i29965 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29964, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29988, double* %tmp.4.i29965 - %tmp.7.i29968 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29964, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29991, double* %tmp.7.i29968 - %tmp.0.i29971 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29964, %"struct.std::dcomplex"* %tmp.30 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i29972 = getelementptr %"struct.std::dcomplex"* %mem_tmp.238, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i29973 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29971, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29974 = load double* %tmp.14.i29973 ; [#uses=1] - store double %tmp.15.i29974, double* %tmp.13.i29972 - %tmp.16.i29975 = getelementptr %"struct.std::dcomplex"* %mem_tmp.238, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i29976 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29971, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29977 = load double* %tmp.17.i29976 ; [#uses=1] - store double %tmp.18.i29977, double* %tmp.16.i29975 - %tmp.4.i29951 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29950, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i30030, double* %tmp.4.i29951 - %tmp.7.i29954 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29950, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i30033, double* %tmp.7.i29954 - %tmp.0.i29957 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29950, %"struct.std::dcomplex"* %mem_tmp.238 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29959 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29957, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29960 = load double* %tmp.14.i29959 ; [#uses=1] - %tmp.17.i29962 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29957, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29963 = load double* %tmp.17.i29962 ; [#uses=1] - store double %tmp.15.i29960, double* %tmp.2.i34364 - store double %tmp.18.i29963, double* %tmp.6.i34365 - %tmp.4.i29917 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29916, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29919 = load double* %tmp.5.i34136 ; [#uses=1] - store double %tmp.6.i29919, double* %tmp.4.i29917 - %tmp.7.i29920 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29916, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29922 = load double* %tmp.8.i34139 ; [#uses=1] - store double %tmp.9.i29922, double* %tmp.7.i29920 - %tmp.0.i29923 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29916, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29925 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29923, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29926 = load double* %tmp.14.i29925 ; [#uses=1] - %tmp.17.i29928 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29923, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29929 = load double* %tmp.17.i29928 ; [#uses=1] - %tmp.7.i29883 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i29897 = add double %tmp.7.i29883, %tmp.15.i29926 ; [#uses=1] - store double %tmp.15.i29897, double* %tmp.2.i34366 - %tmp.26.i29904 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i29915 = add double %tmp.26.i29904, %tmp.18.i29929 ; [#uses=1] - store double %tmp.31.i29915, double* %tmp.6.i34367 - %tmp.4.i29863 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29862, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i29864 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 4, i32 2, i32 0, i32 0 ; [#uses=5] - %tmp.6.i29865 = load double* %tmp.5.i29864 ; [#uses=1] - store double %tmp.6.i29865, double* %tmp.4.i29863 - %tmp.7.i29866 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29862, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i29867 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 4, i32 2, i32 0, i32 1 ; [#uses=5] - %tmp.9.i29868 = load double* %tmp.8.i29867 ; [#uses=1] - store double %tmp.9.i29868, double* %tmp.7.i29866 - %tmp.0.i29869 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29862, %"struct.std::dcomplex"* %ret4 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29871 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29869, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29872 = load double* %tmp.14.i29871 ; [#uses=1] - %tmp.17.i29874 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29869, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29875 = load double* %tmp.17.i29874 ; [#uses=1] - %tmp.7.i29829 = load double* %tmp.2.i34368 ; [#uses=1] - %tmp.15.i29843 = add double %tmp.7.i29829, %tmp.15.i29872 ; [#uses=1] - store double %tmp.15.i29843, double* %tmp.2.i34368 - %tmp.26.i29850 = load double* %tmp.6.i34369 ; [#uses=1] - %tmp.31.i29861 = add double %tmp.26.i29850, %tmp.18.i29875 ; [#uses=1] - store double %tmp.31.i29861, double* %tmp.6.i34369 - store double 0.000000e+00, double* %tmp.2.i34366 - store double 0.000000e+00, double* %tmp.6.i34367 - %tmp.4.i29807 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29806, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29809 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i29809, double* %tmp.4.i29807 - %tmp.7.i29810 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29806, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29812 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i29812, double* %tmp.7.i29810 - %tmp.0.i29813 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29806, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29815 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29813, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29816 = load double* %tmp.14.i29815 ; [#uses=1] - %tmp.17.i29818 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29813, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29819 = load double* %tmp.17.i29818 ; [#uses=1] - %tmp.4.i29793 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29792, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29795 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i29795, double* %tmp.4.i29793 - %tmp.7.i29796 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29792, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29798 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i29798, double* %tmp.7.i29796 - %tmp.0.i29799 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29792, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i29800 = getelementptr %"struct.std::dcomplex"* %mem_tmp.249, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i29801 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29799, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29802 = load double* %tmp.14.i29801 ; [#uses=1] - store double %tmp.15.i29802, double* %tmp.13.i29800 - %tmp.16.i29803 = getelementptr %"struct.std::dcomplex"* %mem_tmp.249, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i29804 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29799, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29805 = load double* %tmp.17.i29804 ; [#uses=1] - store double %tmp.18.i29805, double* %tmp.16.i29803 - %tmp.4.i29779 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29778, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29816, double* %tmp.4.i29779 - %tmp.7.i29782 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29778, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29819, double* %tmp.7.i29782 - %tmp.0.i29785 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i29778, %"struct.std::dcomplex"* %mem_tmp.249 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29787 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29785, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29788 = load double* %tmp.14.i29787 ; [#uses=1] - %tmp.17.i29790 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29785, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29791 = load double* %tmp.17.i29790 ; [#uses=1] - %tmp.4.i29765 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29764, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29788, double* %tmp.4.i29765 - %tmp.7.i29768 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29764, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29791, double* %tmp.7.i29768 - %tmp.0.i29771 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29764, %"struct.std::dcomplex"* %tmp.30 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29773 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29771, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29774 = load double* %tmp.14.i29773 ; [#uses=1] - %tmp.17.i29776 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29771, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29777 = load double* %tmp.17.i29776 ; [#uses=1] - %tmp.4.i29751 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29750, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29753 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i29753, double* %tmp.4.i29751 - %tmp.7.i29754 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29750, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29756 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i29756, double* %tmp.7.i29754 - %tmp.0.i29757 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29750, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29759 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29757, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29760 = load double* %tmp.14.i29759 ; [#uses=1] - %tmp.17.i29762 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29757, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29763 = load double* %tmp.17.i29762 ; [#uses=1] - %tmp.4.i29737 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29736, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29739 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i29739, double* %tmp.4.i29737 - %tmp.7.i29740 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29736, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29742 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i29742, double* %tmp.7.i29740 - %tmp.0.i29743 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29736, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i29744 = getelementptr %"struct.std::dcomplex"* %mem_tmp.253, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i29745 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29743, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29746 = load double* %tmp.14.i29745 ; [#uses=1] - store double %tmp.15.i29746, double* %tmp.13.i29744 - %tmp.16.i29747 = getelementptr %"struct.std::dcomplex"* %mem_tmp.253, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i29748 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29743, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29749 = load double* %tmp.17.i29748 ; [#uses=1] - store double %tmp.18.i29749, double* %tmp.16.i29747 - %tmp.4.i29723 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29722, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29760, double* %tmp.4.i29723 - %tmp.7.i29726 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29722, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29763, double* %tmp.7.i29726 - %tmp.0.i29729 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i29722, %"struct.std::dcomplex"* %mem_tmp.253 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29731 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29729, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29732 = load double* %tmp.14.i29731 ; [#uses=1] - %tmp.17.i29734 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29729, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29735 = load double* %tmp.17.i29734 ; [#uses=1] - %tmp.4.i29709 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29708, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29732, double* %tmp.4.i29709 - %tmp.7.i29712 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29708, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29735, double* %tmp.7.i29712 - %tmp.0.i29715 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29708, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i29716 = getelementptr %"struct.std::dcomplex"* %mem_tmp.250, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i29717 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29715, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29718 = load double* %tmp.14.i29717 ; [#uses=1] - store double %tmp.15.i29718, double* %tmp.13.i29716 - %tmp.16.i29719 = getelementptr %"struct.std::dcomplex"* %mem_tmp.250, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i29720 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29715, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29721 = load double* %tmp.17.i29720 ; [#uses=1] - store double %tmp.18.i29721, double* %tmp.16.i29719 - %tmp.4.i29695 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29694, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29774, double* %tmp.4.i29695 - %tmp.7.i29698 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29694, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29777, double* %tmp.7.i29698 - %tmp.0.i29701 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29694, %"struct.std::dcomplex"* %mem_tmp.250 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29703 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29701, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29704 = load double* %tmp.14.i29703 ; [#uses=1] - %tmp.17.i29706 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29701, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29707 = load double* %tmp.17.i29706 ; [#uses=1] - %tmp.4.i29681 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29680, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29683 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i29683, double* %tmp.4.i29681 - %tmp.7.i29684 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29680, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29686 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i29686, double* %tmp.7.i29684 - %tmp.0.i29687 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29680, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29689 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29687, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29690 = load double* %tmp.14.i29689 ; [#uses=1] - %tmp.17.i29692 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29687, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29693 = load double* %tmp.17.i29692 ; [#uses=1] - %tmp.4.i29667 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29666, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29669 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i29669, double* %tmp.4.i29667 - %tmp.7.i29670 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29666, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29672 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i29672, double* %tmp.7.i29670 - %tmp.0.i29673 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29666, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i29674 = getelementptr %"struct.std::dcomplex"* %mem_tmp.257, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i29675 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29673, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29676 = load double* %tmp.14.i29675 ; [#uses=1] - store double %tmp.15.i29676, double* %tmp.13.i29674 - %tmp.16.i29677 = getelementptr %"struct.std::dcomplex"* %mem_tmp.257, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i29678 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29673, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29679 = load double* %tmp.17.i29678 ; [#uses=1] - store double %tmp.18.i29679, double* %tmp.16.i29677 - %tmp.4.i29653 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29652, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29690, double* %tmp.4.i29653 - %tmp.7.i29656 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29652, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29693, double* %tmp.7.i29656 - %tmp.0.i29659 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i29652, %"struct.std::dcomplex"* %mem_tmp.257 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29661 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29659, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29662 = load double* %tmp.14.i29661 ; [#uses=1] - %tmp.17.i29664 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29659, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29665 = load double* %tmp.17.i29664 ; [#uses=1] - %tmp.4.i29639 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29638, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29662, double* %tmp.4.i29639 - %tmp.7.i29642 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29638, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29665, double* %tmp.7.i29642 - %tmp.0.i29645 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29638, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i29646 = getelementptr %"struct.std::dcomplex"* %mem_tmp.254, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i29647 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29645, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29648 = load double* %tmp.14.i29647 ; [#uses=1] - store double %tmp.15.i29648, double* %tmp.13.i29646 - %tmp.16.i29649 = getelementptr %"struct.std::dcomplex"* %mem_tmp.254, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i29650 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29645, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29651 = load double* %tmp.17.i29650 ; [#uses=1] - store double %tmp.18.i29651, double* %tmp.16.i29649 - %tmp.4.i29625 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29624, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29704, double* %tmp.4.i29625 - %tmp.7.i29628 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29624, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29707, double* %tmp.7.i29628 - %tmp.0.i29631 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29624, %"struct.std::dcomplex"* %mem_tmp.254 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29633 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29631, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29634 = load double* %tmp.14.i29633 ; [#uses=1] - %tmp.17.i29636 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29631, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29637 = load double* %tmp.17.i29636 ; [#uses=1] - store double %tmp.15.i29634, double* %tmp.2.i34364 - store double %tmp.18.i29637, double* %tmp.6.i34365 - %tmp.4.i29591 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29590, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29593 = load double* %tmp.5.i33326 ; [#uses=1] - store double %tmp.6.i29593, double* %tmp.4.i29591 - %tmp.7.i29594 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29590, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29596 = load double* %tmp.8.i33329 ; [#uses=1] - store double %tmp.9.i29596, double* %tmp.7.i29594 - %tmp.0.i29597 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29590, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29599 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29597, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29600 = load double* %tmp.14.i29599 ; [#uses=1] - %tmp.17.i29602 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29597, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29603 = load double* %tmp.17.i29602 ; [#uses=1] - %tmp.7.i29557 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i29571 = add double %tmp.7.i29557, %tmp.15.i29600 ; [#uses=1] - store double %tmp.15.i29571, double* %tmp.2.i34366 - %tmp.26.i29578 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i29589 = add double %tmp.26.i29578, %tmp.18.i29603 ; [#uses=1] - store double %tmp.31.i29589, double* %tmp.6.i34367 - %tmp.4.i29537 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29536, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29539 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i29539, double* %tmp.4.i29537 - %tmp.7.i29540 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29536, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29542 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i29542, double* %tmp.7.i29540 - %tmp.0.i29543 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29536, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29545 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29543, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29546 = load double* %tmp.14.i29545 ; [#uses=1] - %tmp.17.i29548 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29543, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29549 = load double* %tmp.17.i29548 ; [#uses=1] - %tmp.4.i29523 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29522, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29525 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i29525, double* %tmp.4.i29523 - %tmp.7.i29526 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29522, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29528 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i29528, double* %tmp.7.i29526 - %tmp.0.i29529 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29522, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i29530 = getelementptr %"struct.std::dcomplex"* %mem_tmp.264, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i29531 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29529, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29532 = load double* %tmp.14.i29531 ; [#uses=1] - store double %tmp.15.i29532, double* %tmp.13.i29530 - %tmp.16.i29533 = getelementptr %"struct.std::dcomplex"* %mem_tmp.264, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i29534 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29529, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29535 = load double* %tmp.17.i29534 ; [#uses=1] - store double %tmp.18.i29535, double* %tmp.16.i29533 - %tmp.4.i29509 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29508, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29546, double* %tmp.4.i29509 - %tmp.7.i29512 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29508, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29549, double* %tmp.7.i29512 - %tmp.0.i29515 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i29508, %"struct.std::dcomplex"* %mem_tmp.264 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29517 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29515, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29518 = load double* %tmp.14.i29517 ; [#uses=1] - %tmp.17.i29520 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29515, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29521 = load double* %tmp.17.i29520 ; [#uses=1] - %tmp.4.i29495 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29494, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29518, double* %tmp.4.i29495 - %tmp.7.i29498 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29494, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29521, double* %tmp.7.i29498 - %tmp.0.i29501 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29494, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29503 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29501, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29504 = load double* %tmp.14.i29503 ; [#uses=1] - %tmp.17.i29506 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29501, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29507 = load double* %tmp.17.i29506 ; [#uses=1] - %tmp.4.i29481 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29480, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29483 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i29483, double* %tmp.4.i29481 - %tmp.7.i29484 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29480, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29486 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i29486, double* %tmp.7.i29484 - %tmp.0.i29487 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29480, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29489 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29487, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29490 = load double* %tmp.14.i29489 ; [#uses=1] - %tmp.17.i29492 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29487, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29493 = load double* %tmp.17.i29492 ; [#uses=1] - %tmp.4.i29467 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29466, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29469 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i29469, double* %tmp.4.i29467 - %tmp.7.i29470 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29466, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29472 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i29472, double* %tmp.7.i29470 - %tmp.0.i29473 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29466, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i29474 = getelementptr %"struct.std::dcomplex"* %mem_tmp.268, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i29475 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29473, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29476 = load double* %tmp.14.i29475 ; [#uses=1] - store double %tmp.15.i29476, double* %tmp.13.i29474 - %tmp.16.i29477 = getelementptr %"struct.std::dcomplex"* %mem_tmp.268, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i29478 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29473, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29479 = load double* %tmp.17.i29478 ; [#uses=1] - store double %tmp.18.i29479, double* %tmp.16.i29477 - %tmp.4.i29453 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29452, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29490, double* %tmp.4.i29453 - %tmp.7.i29456 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29452, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29493, double* %tmp.7.i29456 - %tmp.0.i29459 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i29452, %"struct.std::dcomplex"* %mem_tmp.268 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29461 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29459, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29462 = load double* %tmp.14.i29461 ; [#uses=1] - %tmp.17.i29464 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29459, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29465 = load double* %tmp.17.i29464 ; [#uses=1] - %tmp.4.i29439 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29438, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29462, double* %tmp.4.i29439 - %tmp.7.i29442 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29438, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29465, double* %tmp.7.i29442 - %tmp.0.i29445 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29438, %"struct.std::dcomplex"* %tmp.30 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i29446 = getelementptr %"struct.std::dcomplex"* %mem_tmp.265, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i29447 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29445, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29448 = load double* %tmp.14.i29447 ; [#uses=1] - store double %tmp.15.i29448, double* %tmp.13.i29446 - %tmp.16.i29449 = getelementptr %"struct.std::dcomplex"* %mem_tmp.265, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i29450 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29445, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29451 = load double* %tmp.17.i29450 ; [#uses=1] - store double %tmp.18.i29451, double* %tmp.16.i29449 - %tmp.4.i29425 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29424, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29504, double* %tmp.4.i29425 - %tmp.7.i29428 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29424, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29507, double* %tmp.7.i29428 - %tmp.0.i29431 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29424, %"struct.std::dcomplex"* %mem_tmp.265 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29433 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29431, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29434 = load double* %tmp.14.i29433 ; [#uses=1] - %tmp.17.i29436 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29431, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29437 = load double* %tmp.17.i29436 ; [#uses=1] - %tmp.4.i29411 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29410, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29413 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i29413, double* %tmp.4.i29411 - %tmp.7.i29414 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29410, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29416 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i29416, double* %tmp.7.i29414 - %tmp.0.i29417 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29410, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29419 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29417, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29420 = load double* %tmp.14.i29419 ; [#uses=1] - %tmp.17.i29422 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29417, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29423 = load double* %tmp.17.i29422 ; [#uses=1] - %tmp.4.i29397 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29396, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29399 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i29399, double* %tmp.4.i29397 - %tmp.7.i29400 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29396, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29402 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i29402, double* %tmp.7.i29400 - %tmp.0.i29403 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29396, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i29404 = getelementptr %"struct.std::dcomplex"* %mem_tmp.272, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i29405 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29403, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29406 = load double* %tmp.14.i29405 ; [#uses=1] - store double %tmp.15.i29406, double* %tmp.13.i29404 - %tmp.16.i29407 = getelementptr %"struct.std::dcomplex"* %mem_tmp.272, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i29408 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29403, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29409 = load double* %tmp.17.i29408 ; [#uses=1] - store double %tmp.18.i29409, double* %tmp.16.i29407 - %tmp.4.i29383 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29382, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29420, double* %tmp.4.i29383 - %tmp.7.i29386 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29382, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29423, double* %tmp.7.i29386 - %tmp.0.i29389 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i29382, %"struct.std::dcomplex"* %mem_tmp.272 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29391 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29389, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29392 = load double* %tmp.14.i29391 ; [#uses=1] - %tmp.17.i29394 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29389, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29395 = load double* %tmp.17.i29394 ; [#uses=1] - %tmp.4.i29369 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29368, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29392, double* %tmp.4.i29369 - %tmp.7.i29372 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29368, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29395, double* %tmp.7.i29372 - %tmp.0.i29375 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29368, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i29376 = getelementptr %"struct.std::dcomplex"* %mem_tmp.269, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i29377 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29375, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29378 = load double* %tmp.14.i29377 ; [#uses=1] - store double %tmp.15.i29378, double* %tmp.13.i29376 - %tmp.16.i29379 = getelementptr %"struct.std::dcomplex"* %mem_tmp.269, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i29380 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29375, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29381 = load double* %tmp.17.i29380 ; [#uses=1] - store double %tmp.18.i29381, double* %tmp.16.i29379 - %tmp.4.i29355 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29354, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29434, double* %tmp.4.i29355 - %tmp.7.i29358 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29354, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29437, double* %tmp.7.i29358 - %tmp.0.i29361 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29354, %"struct.std::dcomplex"* %mem_tmp.269 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29363 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29361, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29364 = load double* %tmp.14.i29363 ; [#uses=1] - %tmp.17.i29366 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29361, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29367 = load double* %tmp.17.i29366 ; [#uses=1] - store double %tmp.15.i29364, double* %tmp.2.i34364 - store double %tmp.18.i29367, double* %tmp.6.i34365 - %tmp.4.i29321 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29320, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29323 = load double* %tmp.5.i32460 ; [#uses=1] - store double %tmp.6.i29323, double* %tmp.4.i29321 - %tmp.7.i29324 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29320, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29326 = load double* %tmp.8.i32463 ; [#uses=1] - store double %tmp.9.i29326, double* %tmp.7.i29324 - %tmp.0.i29327 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29320, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29329 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29327, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29330 = load double* %tmp.14.i29329 ; [#uses=1] - %tmp.17.i29332 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29327, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29333 = load double* %tmp.17.i29332 ; [#uses=1] - %tmp.7.i29287 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i29301 = add double %tmp.7.i29287, %tmp.15.i29330 ; [#uses=1] - store double %tmp.15.i29301, double* %tmp.2.i34366 - %tmp.26.i29308 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i29319 = add double %tmp.26.i29308, %tmp.18.i29333 ; [#uses=1] - store double %tmp.31.i29319, double* %tmp.6.i34367 - %tmp.4.i29267 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29266, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29269 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i29269, double* %tmp.4.i29267 - %tmp.7.i29270 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29266, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29272 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i29272, double* %tmp.7.i29270 - %tmp.0.i29273 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29266, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29275 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29273, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29276 = load double* %tmp.14.i29275 ; [#uses=1] - %tmp.17.i29278 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29273, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29279 = load double* %tmp.17.i29278 ; [#uses=1] - %tmp.4.i29253 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29252, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29255 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i29255, double* %tmp.4.i29253 - %tmp.7.i29256 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29252, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29258 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i29258, double* %tmp.7.i29256 - %tmp.0.i29259 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29252, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i29260 = getelementptr %"struct.std::dcomplex"* %mem_tmp.279, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i29261 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29259, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29262 = load double* %tmp.14.i29261 ; [#uses=1] - store double %tmp.15.i29262, double* %tmp.13.i29260 - %tmp.16.i29263 = getelementptr %"struct.std::dcomplex"* %mem_tmp.279, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i29264 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29259, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29265 = load double* %tmp.17.i29264 ; [#uses=1] - store double %tmp.18.i29265, double* %tmp.16.i29263 - %tmp.4.i29239 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29238, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29276, double* %tmp.4.i29239 - %tmp.7.i29242 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29238, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29279, double* %tmp.7.i29242 - %tmp.0.i29245 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i29238, %"struct.std::dcomplex"* %mem_tmp.279 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29247 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29245, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29248 = load double* %tmp.14.i29247 ; [#uses=1] - %tmp.17.i29250 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29245, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29251 = load double* %tmp.17.i29250 ; [#uses=1] - %tmp.4.i29225 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29224, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29248, double* %tmp.4.i29225 - %tmp.7.i29228 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29224, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29251, double* %tmp.7.i29228 - %tmp.0.i29231 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29224, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29233 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29231, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29234 = load double* %tmp.14.i29233 ; [#uses=1] - %tmp.17.i29236 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29231, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29237 = load double* %tmp.17.i29236 ; [#uses=1] - %tmp.4.i29211 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29210, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29213 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i29213, double* %tmp.4.i29211 - %tmp.7.i29214 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29210, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29216 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i29216, double* %tmp.7.i29214 - %tmp.0.i29217 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29210, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29219 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29217, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29220 = load double* %tmp.14.i29219 ; [#uses=1] - %tmp.17.i29222 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29217, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29223 = load double* %tmp.17.i29222 ; [#uses=1] - %tmp.4.i29197 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29196, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29199 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i29199, double* %tmp.4.i29197 - %tmp.7.i29200 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29196, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29202 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i29202, double* %tmp.7.i29200 - %tmp.0.i29203 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29196, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i29204 = getelementptr %"struct.std::dcomplex"* %mem_tmp.283, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i29205 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29203, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29206 = load double* %tmp.14.i29205 ; [#uses=1] - store double %tmp.15.i29206, double* %tmp.13.i29204 - %tmp.16.i29207 = getelementptr %"struct.std::dcomplex"* %mem_tmp.283, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i29208 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29203, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29209 = load double* %tmp.17.i29208 ; [#uses=1] - store double %tmp.18.i29209, double* %tmp.16.i29207 - %tmp.4.i29183 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29182, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29220, double* %tmp.4.i29183 - %tmp.7.i29186 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29182, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29223, double* %tmp.7.i29186 - %tmp.0.i29189 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i29182, %"struct.std::dcomplex"* %mem_tmp.283 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29191 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29189, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29192 = load double* %tmp.14.i29191 ; [#uses=1] - %tmp.17.i29194 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29189, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29195 = load double* %tmp.17.i29194 ; [#uses=1] - %tmp.4.i29169 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29168, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29192, double* %tmp.4.i29169 - %tmp.7.i29172 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29168, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29195, double* %tmp.7.i29172 - %tmp.0.i29175 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29168, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i29176 = getelementptr %"struct.std::dcomplex"* %mem_tmp.280, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i29177 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29175, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29178 = load double* %tmp.14.i29177 ; [#uses=1] - store double %tmp.15.i29178, double* %tmp.13.i29176 - %tmp.16.i29179 = getelementptr %"struct.std::dcomplex"* %mem_tmp.280, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i29180 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29175, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29181 = load double* %tmp.17.i29180 ; [#uses=1] - store double %tmp.18.i29181, double* %tmp.16.i29179 - %tmp.4.i29155 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29154, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29234, double* %tmp.4.i29155 - %tmp.7.i29158 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29154, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29237, double* %tmp.7.i29158 - %tmp.0.i29161 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29154, %"struct.std::dcomplex"* %mem_tmp.280 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29163 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29161, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29164 = load double* %tmp.14.i29163 ; [#uses=1] - %tmp.17.i29166 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29161, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29167 = load double* %tmp.17.i29166 ; [#uses=1] - %tmp.4.i29141 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29140, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29143 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i29143, double* %tmp.4.i29141 - %tmp.7.i29144 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29140, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29146 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i29146, double* %tmp.7.i29144 - %tmp.0.i29147 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29140, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29149 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29147, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29150 = load double* %tmp.14.i29149 ; [#uses=1] - %tmp.17.i29152 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29147, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29153 = load double* %tmp.17.i29152 ; [#uses=1] - %tmp.4.i29127 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29126, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29129 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i29129, double* %tmp.4.i29127 - %tmp.7.i29130 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29126, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29132 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i29132, double* %tmp.7.i29130 - %tmp.0.i29133 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29126, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i29134 = getelementptr %"struct.std::dcomplex"* %mem_tmp.287, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i29135 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29133, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29136 = load double* %tmp.14.i29135 ; [#uses=1] - store double %tmp.15.i29136, double* %tmp.13.i29134 - %tmp.16.i29137 = getelementptr %"struct.std::dcomplex"* %mem_tmp.287, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i29138 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29133, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29139 = load double* %tmp.17.i29138 ; [#uses=1] - store double %tmp.18.i29139, double* %tmp.16.i29137 - %tmp.4.i29113 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29112, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29150, double* %tmp.4.i29113 - %tmp.7.i29116 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29112, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29153, double* %tmp.7.i29116 - %tmp.0.i29119 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i29112, %"struct.std::dcomplex"* %mem_tmp.287 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29121 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29119, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29122 = load double* %tmp.14.i29121 ; [#uses=1] - %tmp.17.i29124 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29119, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29125 = load double* %tmp.17.i29124 ; [#uses=1] - %tmp.4.i29099 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29098, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29122, double* %tmp.4.i29099 - %tmp.7.i29102 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29098, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29125, double* %tmp.7.i29102 - %tmp.0.i29105 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29098, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i29106 = getelementptr %"struct.std::dcomplex"* %mem_tmp.284, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i29107 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29105, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29108 = load double* %tmp.14.i29107 ; [#uses=1] - store double %tmp.15.i29108, double* %tmp.13.i29106 - %tmp.16.i29109 = getelementptr %"struct.std::dcomplex"* %mem_tmp.284, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i29110 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29105, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29111 = load double* %tmp.17.i29110 ; [#uses=1] - store double %tmp.18.i29111, double* %tmp.16.i29109 - %tmp.4.i29085 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29084, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29164, double* %tmp.4.i29085 - %tmp.7.i29088 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29084, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29167, double* %tmp.7.i29088 - %tmp.0.i29091 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29084, %"struct.std::dcomplex"* %mem_tmp.284 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29093 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29091, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29094 = load double* %tmp.14.i29093 ; [#uses=1] - %tmp.17.i29096 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29091, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29097 = load double* %tmp.17.i29096 ; [#uses=1] - store double %tmp.15.i29094, double* %tmp.2.i34364 - store double %tmp.18.i29097, double* %tmp.6.i34365 - %tmp.4.i29051 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29050, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i29053 = load double* %tmp.5.i33866 ; [#uses=1] - store double %tmp.6.i29053, double* %tmp.4.i29051 - %tmp.7.i29054 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i29050, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29056 = load double* %tmp.8.i33869 ; [#uses=1] - store double %tmp.9.i29056, double* %tmp.7.i29054 - %tmp.0.i29057 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i29050, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29059 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29057, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29060 = load double* %tmp.14.i29059 ; [#uses=1] - %tmp.17.i29062 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29057, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29063 = load double* %tmp.17.i29062 ; [#uses=1] - %tmp.7.i29017 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i29031 = add double %tmp.7.i29017, %tmp.15.i29060 ; [#uses=1] - store double %tmp.15.i29031, double* %tmp.2.i34366 - %tmp.26.i29038 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i29049 = add double %tmp.26.i29038, %tmp.18.i29063 ; [#uses=1] - store double %tmp.31.i29049, double* %tmp.6.i34367 - %tmp.4.i28997 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28996, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28999 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i28999, double* %tmp.4.i28997 - %tmp.7.i29000 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28996, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i29002 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i29002, double* %tmp.7.i29000 - %tmp.0.i29003 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28996, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i29005 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29003, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i29006 = load double* %tmp.14.i29005 ; [#uses=1] - %tmp.17.i29008 = getelementptr %"struct.std::dcomplex"* %tmp.0.i29003, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i29009 = load double* %tmp.17.i29008 ; [#uses=1] - %tmp.4.i28983 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28982, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28985 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i28985, double* %tmp.4.i28983 - %tmp.7.i28986 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28982, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28988 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i28988, double* %tmp.7.i28986 - %tmp.0.i28989 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28982, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i28990 = getelementptr %"struct.std::dcomplex"* %mem_tmp.294, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i28991 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28989, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28992 = load double* %tmp.14.i28991 ; [#uses=1] - store double %tmp.15.i28992, double* %tmp.13.i28990 - %tmp.16.i28993 = getelementptr %"struct.std::dcomplex"* %mem_tmp.294, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i28994 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28989, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28995 = load double* %tmp.17.i28994 ; [#uses=1] - store double %tmp.18.i28995, double* %tmp.16.i28993 - %tmp.4.i28969 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28968, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i29006, double* %tmp.4.i28969 - %tmp.7.i28972 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28968, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i29009, double* %tmp.7.i28972 - %tmp.0.i28975 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i28968, %"struct.std::dcomplex"* %mem_tmp.294 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28977 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28975, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28978 = load double* %tmp.14.i28977 ; [#uses=1] - %tmp.17.i28980 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28975, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28981 = load double* %tmp.17.i28980 ; [#uses=1] - %tmp.4.i28955 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28954, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28978, double* %tmp.4.i28955 - %tmp.7.i28958 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28954, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28981, double* %tmp.7.i28958 - %tmp.0.i28961 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28954, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28963 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28961, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28964 = load double* %tmp.14.i28963 ; [#uses=1] - %tmp.17.i28966 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28961, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28967 = load double* %tmp.17.i28966 ; [#uses=1] - %tmp.4.i28941 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28940, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28943 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i28943, double* %tmp.4.i28941 - %tmp.7.i28944 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28940, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28946 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i28946, double* %tmp.7.i28944 - %tmp.0.i28947 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28940, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28949 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28947, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28950 = load double* %tmp.14.i28949 ; [#uses=1] - %tmp.17.i28952 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28947, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28953 = load double* %tmp.17.i28952 ; [#uses=1] - %tmp.4.i28927 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28926, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28929 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i28929, double* %tmp.4.i28927 - %tmp.7.i28930 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28926, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28932 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i28932, double* %tmp.7.i28930 - %tmp.0.i28933 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28926, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i28934 = getelementptr %"struct.std::dcomplex"* %mem_tmp.298, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i28935 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28933, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28936 = load double* %tmp.14.i28935 ; [#uses=1] - store double %tmp.15.i28936, double* %tmp.13.i28934 - %tmp.16.i28937 = getelementptr %"struct.std::dcomplex"* %mem_tmp.298, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i28938 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28933, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28939 = load double* %tmp.17.i28938 ; [#uses=1] - store double %tmp.18.i28939, double* %tmp.16.i28937 - %tmp.4.i28913 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28912, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28950, double* %tmp.4.i28913 - %tmp.7.i28916 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28912, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28953, double* %tmp.7.i28916 - %tmp.0.i28919 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i28912, %"struct.std::dcomplex"* %mem_tmp.298 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28921 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28919, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28922 = load double* %tmp.14.i28921 ; [#uses=1] - %tmp.17.i28924 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28919, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28925 = load double* %tmp.17.i28924 ; [#uses=1] - %tmp.4.i28899 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28898, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28922, double* %tmp.4.i28899 - %tmp.7.i28902 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28898, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28925, double* %tmp.7.i28902 - %tmp.0.i28905 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28898, %"struct.std::dcomplex"* %tmp.30 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i28906 = getelementptr %"struct.std::dcomplex"* %mem_tmp.295, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i28907 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28905, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28908 = load double* %tmp.14.i28907 ; [#uses=1] - store double %tmp.15.i28908, double* %tmp.13.i28906 - %tmp.16.i28909 = getelementptr %"struct.std::dcomplex"* %mem_tmp.295, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i28910 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28905, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28911 = load double* %tmp.17.i28910 ; [#uses=1] - store double %tmp.18.i28911, double* %tmp.16.i28909 - %tmp.4.i28885 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28884, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28964, double* %tmp.4.i28885 - %tmp.7.i28888 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28884, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28967, double* %tmp.7.i28888 - %tmp.0.i28891 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28884, %"struct.std::dcomplex"* %mem_tmp.295 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28893 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28891, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28894 = load double* %tmp.14.i28893 ; [#uses=1] - %tmp.17.i28896 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28891, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28897 = load double* %tmp.17.i28896 ; [#uses=1] - %tmp.4.i28871 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28870, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28873 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i28873, double* %tmp.4.i28871 - %tmp.7.i28874 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28870, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28876 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i28876, double* %tmp.7.i28874 - %tmp.0.i28877 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28870, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28879 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28877, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28880 = load double* %tmp.14.i28879 ; [#uses=1] - %tmp.17.i28882 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28877, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28883 = load double* %tmp.17.i28882 ; [#uses=1] - %tmp.4.i28857 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28856, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28859 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i28859, double* %tmp.4.i28857 - %tmp.7.i28860 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28856, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28862 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i28862, double* %tmp.7.i28860 - %tmp.0.i28863 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28856, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i28864 = getelementptr %"struct.std::dcomplex"* %mem_tmp.302, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i28865 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28863, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28866 = load double* %tmp.14.i28865 ; [#uses=1] - store double %tmp.15.i28866, double* %tmp.13.i28864 - %tmp.16.i28867 = getelementptr %"struct.std::dcomplex"* %mem_tmp.302, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i28868 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28863, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28869 = load double* %tmp.17.i28868 ; [#uses=1] - store double %tmp.18.i28869, double* %tmp.16.i28867 - %tmp.4.i28843 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28842, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28880, double* %tmp.4.i28843 - %tmp.7.i28846 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28842, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28883, double* %tmp.7.i28846 - %tmp.0.i28849 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i28842, %"struct.std::dcomplex"* %mem_tmp.302 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28851 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28849, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28852 = load double* %tmp.14.i28851 ; [#uses=1] - %tmp.17.i28854 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28849, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28855 = load double* %tmp.17.i28854 ; [#uses=1] - %tmp.4.i28829 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28828, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28852, double* %tmp.4.i28829 - %tmp.7.i28832 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28828, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28855, double* %tmp.7.i28832 - %tmp.0.i28835 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28828, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i28836 = getelementptr %"struct.std::dcomplex"* %mem_tmp.299, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i28837 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28835, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28838 = load double* %tmp.14.i28837 ; [#uses=1] - store double %tmp.15.i28838, double* %tmp.13.i28836 - %tmp.16.i28839 = getelementptr %"struct.std::dcomplex"* %mem_tmp.299, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i28840 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28835, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28841 = load double* %tmp.17.i28840 ; [#uses=1] - store double %tmp.18.i28841, double* %tmp.16.i28839 - %tmp.4.i28815 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28814, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28894, double* %tmp.4.i28815 - %tmp.7.i28818 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28814, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28897, double* %tmp.7.i28818 - %tmp.0.i28821 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28814, %"struct.std::dcomplex"* %mem_tmp.299 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28823 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28821, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28824 = load double* %tmp.14.i28823 ; [#uses=1] - %tmp.17.i28826 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28821, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28827 = load double* %tmp.17.i28826 ; [#uses=1] - store double %tmp.15.i28824, double* %tmp.2.i34364 - store double %tmp.18.i28827, double* %tmp.6.i34365 - %tmp.4.i28781 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28780, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28783 = load double* %tmp.5.i33596 ; [#uses=1] - store double %tmp.6.i28783, double* %tmp.4.i28781 - %tmp.7.i28784 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28780, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28786 = load double* %tmp.8.i33599 ; [#uses=1] - store double %tmp.9.i28786, double* %tmp.7.i28784 - %tmp.0.i28787 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28780, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28789 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28787, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28790 = load double* %tmp.14.i28789 ; [#uses=1] - %tmp.17.i28792 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28787, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28793 = load double* %tmp.17.i28792 ; [#uses=1] - %tmp.7.i28747 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i28761 = add double %tmp.7.i28747, %tmp.15.i28790 ; [#uses=1] - store double %tmp.15.i28761, double* %tmp.2.i34366 - %tmp.26.i28768 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i28779 = add double %tmp.26.i28768, %tmp.18.i28793 ; [#uses=1] - store double %tmp.31.i28779, double* %tmp.6.i34367 - %tmp.4.i28727 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28726, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i28728 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 4, i32 3, i32 0, i32 0 ; [#uses=5] - %tmp.6.i28729 = load double* %tmp.5.i28728 ; [#uses=1] - store double %tmp.6.i28729, double* %tmp.4.i28727 - %tmp.7.i28730 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28726, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i28731 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 4, i32 3, i32 0, i32 1 ; [#uses=5] - %tmp.9.i28732 = load double* %tmp.8.i28731 ; [#uses=1] - store double %tmp.9.i28732, double* %tmp.7.i28730 - %tmp.0.i28733 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28726, %"struct.std::dcomplex"* %ret4 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28735 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28733, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28736 = load double* %tmp.14.i28735 ; [#uses=1] - %tmp.17.i28738 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28733, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28739 = load double* %tmp.17.i28738 ; [#uses=1] - %tmp.7.i28693 = load double* %tmp.2.i34368 ; [#uses=1] - %tmp.15.i28707 = add double %tmp.7.i28693, %tmp.15.i28736 ; [#uses=1] - store double %tmp.15.i28707, double* %tmp.2.i34368 - %tmp.26.i28714 = load double* %tmp.6.i34369 ; [#uses=1] - %tmp.31.i28725 = add double %tmp.26.i28714, %tmp.18.i28739 ; [#uses=1] - store double %tmp.31.i28725, double* %tmp.6.i34369 - store double 0.000000e+00, double* %tmp.2.i34366 - store double 0.000000e+00, double* %tmp.6.i34367 - %tmp.4.i28671 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28670, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i28672 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 5, i32 5, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28673 = load double* %tmp.5.i28672 ; [#uses=1] - store double %tmp.6.i28673, double* %tmp.4.i28671 - %tmp.7.i28674 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28670, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i28675 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 5, i32 5, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28676 = load double* %tmp.8.i28675 ; [#uses=1] - store double %tmp.9.i28676, double* %tmp.7.i28674 - %tmp.0.i28677 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28670, %"struct.std::dcomplex"* %ret5 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28679 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28677, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28680 = load double* %tmp.14.i28679 ; [#uses=1] - %tmp.17.i28682 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28677, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28683 = load double* %tmp.17.i28682 ; [#uses=1] - %tmp.7.i28637 = load double* %tmp.2.i ; [#uses=1] - %tmp.15.i28651 = add double %tmp.7.i28637, %tmp.15.i28680 ; [#uses=1] - store double %tmp.15.i28651, double* %tmp.2.i - %tmp.26.i28658 = load double* %tmp.6.i ; [#uses=1] - %tmp.31.i28669 = add double %tmp.26.i28658, %tmp.18.i28683 ; [#uses=1] - store double %tmp.31.i28669, double* %tmp.6.i - store double 0.000000e+00, double* %tmp.2.i34368 - store double 0.000000e+00, double* %tmp.6.i34369 - %tmp.1036 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 1, i32 5 ; <%"struct.std::dcomplex"*> [#uses=120] - %tmp.4.i28615 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28614, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28617 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i28617, double* %tmp.4.i28615 - %tmp.7.i28618 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28614, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28620 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i28620, double* %tmp.7.i28618 - %tmp.0.i28621 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28614, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28623 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28621, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28624 = load double* %tmp.14.i28623 ; [#uses=1] - %tmp.17.i28626 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28621, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28627 = load double* %tmp.17.i28626 ; [#uses=1] - %tmp.4.i28601 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28600, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i28602 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 0, i32 5, i32 0, i32 0 ; [#uses=120] - %tmp.6.i28603 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i28603, double* %tmp.4.i28601 - %tmp.7.i28604 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28600, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i28605 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 0, i32 5, i32 0, i32 1 ; [#uses=120] - %tmp.9.i28606 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i28606, double* %tmp.7.i28604 - %tmp.0.i28607 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28600, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i28608 = getelementptr %"struct.std::dcomplex"* %mem_tmp.311, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i28609 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28607, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28610 = load double* %tmp.14.i28609 ; [#uses=1] - store double %tmp.15.i28610, double* %tmp.13.i28608 - %tmp.16.i28611 = getelementptr %"struct.std::dcomplex"* %mem_tmp.311, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i28612 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28607, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28613 = load double* %tmp.17.i28612 ; [#uses=1] - store double %tmp.18.i28613, double* %tmp.16.i28611 - %tmp.4.i28587 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28586, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28624, double* %tmp.4.i28587 - %tmp.7.i28590 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28586, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28627, double* %tmp.7.i28590 - %tmp.0.i28593 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i28586, %"struct.std::dcomplex"* %mem_tmp.311 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28595 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28593, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28596 = load double* %tmp.14.i28595 ; [#uses=1] - %tmp.17.i28598 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28593, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28599 = load double* %tmp.17.i28598 ; [#uses=1] - %tmp.4.i28573 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28572, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28596, double* %tmp.4.i28573 - %tmp.7.i28576 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28572, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28599, double* %tmp.7.i28576 - %tmp.0.i28579 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28572, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28581 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28579, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28582 = load double* %tmp.14.i28581 ; [#uses=1] - %tmp.17.i28584 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28579, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28585 = load double* %tmp.17.i28584 ; [#uses=1] - %tmp.4.i28559 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28558, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28561 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i28561, double* %tmp.4.i28559 - %tmp.7.i28562 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28558, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28564 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i28564, double* %tmp.7.i28562 - %tmp.0.i28565 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28558, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28567 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28565, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28568 = load double* %tmp.14.i28567 ; [#uses=1] - %tmp.17.i28570 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28565, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28571 = load double* %tmp.17.i28570 ; [#uses=1] - %tmp.4.i28545 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28544, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28547 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i28547, double* %tmp.4.i28545 - %tmp.7.i28548 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28544, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28550 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i28550, double* %tmp.7.i28548 - %tmp.0.i28551 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28544, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i28552 = getelementptr %"struct.std::dcomplex"* %mem_tmp.315, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i28553 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28551, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28554 = load double* %tmp.14.i28553 ; [#uses=1] - store double %tmp.15.i28554, double* %tmp.13.i28552 - %tmp.16.i28555 = getelementptr %"struct.std::dcomplex"* %mem_tmp.315, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i28556 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28551, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28557 = load double* %tmp.17.i28556 ; [#uses=1] - store double %tmp.18.i28557, double* %tmp.16.i28555 - %tmp.4.i28531 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28530, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28568, double* %tmp.4.i28531 - %tmp.7.i28534 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28530, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28571, double* %tmp.7.i28534 - %tmp.0.i28537 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i28530, %"struct.std::dcomplex"* %mem_tmp.315 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28539 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28537, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28540 = load double* %tmp.14.i28539 ; [#uses=1] - %tmp.17.i28542 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28537, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28543 = load double* %tmp.17.i28542 ; [#uses=1] - %tmp.4.i28517 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28516, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28540, double* %tmp.4.i28517 - %tmp.7.i28520 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28516, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28543, double* %tmp.7.i28520 - %tmp.0.i28523 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28516, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i28524 = getelementptr %"struct.std::dcomplex"* %mem_tmp.312, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i28525 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28523, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28526 = load double* %tmp.14.i28525 ; [#uses=1] - store double %tmp.15.i28526, double* %tmp.13.i28524 - %tmp.16.i28527 = getelementptr %"struct.std::dcomplex"* %mem_tmp.312, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i28528 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28523, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28529 = load double* %tmp.17.i28528 ; [#uses=1] - store double %tmp.18.i28529, double* %tmp.16.i28527 - %tmp.4.i28503 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28502, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28582, double* %tmp.4.i28503 - %tmp.7.i28506 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28502, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28585, double* %tmp.7.i28506 - %tmp.0.i28509 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28502, %"struct.std::dcomplex"* %mem_tmp.312 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28511 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28509, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28512 = load double* %tmp.14.i28511 ; [#uses=1] - %tmp.17.i28514 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28509, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28515 = load double* %tmp.17.i28514 ; [#uses=1] - %tmp.4.i28489 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28488, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28491 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i28491, double* %tmp.4.i28489 - %tmp.7.i28492 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28488, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28494 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i28494, double* %tmp.7.i28492 - %tmp.0.i28495 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28488, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28497 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28495, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28498 = load double* %tmp.14.i28497 ; [#uses=1] - %tmp.17.i28500 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28495, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28501 = load double* %tmp.17.i28500 ; [#uses=1] - %tmp.4.i28475 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28474, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28477 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i28477, double* %tmp.4.i28475 - %tmp.7.i28478 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28474, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28480 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i28480, double* %tmp.7.i28478 - %tmp.0.i28481 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28474, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i28482 = getelementptr %"struct.std::dcomplex"* %mem_tmp.319, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i28483 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28481, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28484 = load double* %tmp.14.i28483 ; [#uses=1] - store double %tmp.15.i28484, double* %tmp.13.i28482 - %tmp.16.i28485 = getelementptr %"struct.std::dcomplex"* %mem_tmp.319, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i28486 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28481, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28487 = load double* %tmp.17.i28486 ; [#uses=1] - store double %tmp.18.i28487, double* %tmp.16.i28485 - %tmp.4.i28461 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28460, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28498, double* %tmp.4.i28461 - %tmp.7.i28464 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28460, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28501, double* %tmp.7.i28464 - %tmp.0.i28467 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i28460, %"struct.std::dcomplex"* %mem_tmp.319 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28469 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28467, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28470 = load double* %tmp.14.i28469 ; [#uses=1] - %tmp.17.i28472 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28467, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28473 = load double* %tmp.17.i28472 ; [#uses=1] - %tmp.1075 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 2, i32 5 ; <%"struct.std::dcomplex"*> [#uses=60] - %tmp.4.i28447 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28446, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28470, double* %tmp.4.i28447 - %tmp.7.i28450 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28446, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28473, double* %tmp.7.i28450 - %tmp.0.i28453 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28446, %"struct.std::dcomplex"* %tmp.1075 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i28454 = getelementptr %"struct.std::dcomplex"* %mem_tmp.316, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i28455 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28453, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28456 = load double* %tmp.14.i28455 ; [#uses=1] - store double %tmp.15.i28456, double* %tmp.13.i28454 - %tmp.16.i28457 = getelementptr %"struct.std::dcomplex"* %mem_tmp.316, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i28458 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28453, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28459 = load double* %tmp.17.i28458 ; [#uses=1] - store double %tmp.18.i28459, double* %tmp.16.i28457 - %tmp.4.i28433 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28432, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28512, double* %tmp.4.i28433 - %tmp.7.i28436 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28432, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28515, double* %tmp.7.i28436 - %tmp.0.i28439 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28432, %"struct.std::dcomplex"* %mem_tmp.316 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28441 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28439, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28442 = load double* %tmp.14.i28441 ; [#uses=1] - %tmp.17.i28444 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28439, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28445 = load double* %tmp.17.i28444 ; [#uses=1] - store double %tmp.15.i28442, double* %tmp.2.i34364 - store double %tmp.18.i28445, double* %tmp.6.i34365 - %tmp.4.i28399 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28398, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28401 = load double* %tmp.5.i33596 ; [#uses=1] - store double %tmp.6.i28401, double* %tmp.4.i28399 - %tmp.7.i28402 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28398, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28404 = load double* %tmp.8.i33599 ; [#uses=1] - store double %tmp.9.i28404, double* %tmp.7.i28402 - %tmp.0.i28405 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28398, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28407 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28405, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28408 = load double* %tmp.14.i28407 ; [#uses=1] - %tmp.17.i28410 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28405, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28411 = load double* %tmp.17.i28410 ; [#uses=1] - %tmp.7.i28365 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i28379 = add double %tmp.7.i28365, %tmp.15.i28408 ; [#uses=1] - store double %tmp.15.i28379, double* %tmp.2.i34366 - %tmp.26.i28386 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i28397 = add double %tmp.26.i28386, %tmp.18.i28411 ; [#uses=1] - store double %tmp.31.i28397, double* %tmp.6.i34367 - %tmp.4.i28345 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28344, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28347 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i28347, double* %tmp.4.i28345 - %tmp.7.i28348 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28344, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28350 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i28350, double* %tmp.7.i28348 - %tmp.0.i28351 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28344, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28353 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28351, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28354 = load double* %tmp.14.i28353 ; [#uses=1] - %tmp.17.i28356 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28351, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28357 = load double* %tmp.17.i28356 ; [#uses=1] - %tmp.4.i28331 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28330, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28333 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i28333, double* %tmp.4.i28331 - %tmp.7.i28334 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28330, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28336 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i28336, double* %tmp.7.i28334 - %tmp.0.i28337 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28330, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i28338 = getelementptr %"struct.std::dcomplex"* %mem_tmp.326, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i28339 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28337, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28340 = load double* %tmp.14.i28339 ; [#uses=1] - store double %tmp.15.i28340, double* %tmp.13.i28338 - %tmp.16.i28341 = getelementptr %"struct.std::dcomplex"* %mem_tmp.326, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i28342 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28337, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28343 = load double* %tmp.17.i28342 ; [#uses=1] - store double %tmp.18.i28343, double* %tmp.16.i28341 - %tmp.4.i28317 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28316, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28354, double* %tmp.4.i28317 - %tmp.7.i28320 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28316, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28357, double* %tmp.7.i28320 - %tmp.0.i28323 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i28316, %"struct.std::dcomplex"* %mem_tmp.326 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28325 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28323, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28326 = load double* %tmp.14.i28325 ; [#uses=1] - %tmp.17.i28328 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28323, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28329 = load double* %tmp.17.i28328 ; [#uses=1] - %tmp.4.i28303 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28302, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28326, double* %tmp.4.i28303 - %tmp.7.i28306 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28302, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28329, double* %tmp.7.i28306 - %tmp.0.i28309 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28302, %"struct.std::dcomplex"* %tmp.1075 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28311 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28309, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28312 = load double* %tmp.14.i28311 ; [#uses=1] - %tmp.17.i28314 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28309, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28315 = load double* %tmp.17.i28314 ; [#uses=1] - %tmp.4.i28289 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28288, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28291 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i28291, double* %tmp.4.i28289 - %tmp.7.i28292 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28288, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28294 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i28294, double* %tmp.7.i28292 - %tmp.0.i28295 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28288, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28297 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28295, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28298 = load double* %tmp.14.i28297 ; [#uses=1] - %tmp.17.i28300 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28295, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28301 = load double* %tmp.17.i28300 ; [#uses=1] - %tmp.4.i28275 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28274, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28277 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i28277, double* %tmp.4.i28275 - %tmp.7.i28278 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28274, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28280 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i28280, double* %tmp.7.i28278 - %tmp.0.i28281 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28274, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i28282 = getelementptr %"struct.std::dcomplex"* %mem_tmp.330, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i28283 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28281, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28284 = load double* %tmp.14.i28283 ; [#uses=1] - store double %tmp.15.i28284, double* %tmp.13.i28282 - %tmp.16.i28285 = getelementptr %"struct.std::dcomplex"* %mem_tmp.330, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i28286 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28281, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28287 = load double* %tmp.17.i28286 ; [#uses=1] - store double %tmp.18.i28287, double* %tmp.16.i28285 - %tmp.4.i28261 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28260, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28298, double* %tmp.4.i28261 - %tmp.7.i28264 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28260, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28301, double* %tmp.7.i28264 - %tmp.0.i28267 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i28260, %"struct.std::dcomplex"* %mem_tmp.330 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28269 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28267, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28270 = load double* %tmp.14.i28269 ; [#uses=1] - %tmp.17.i28272 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28267, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28273 = load double* %tmp.17.i28272 ; [#uses=1] - %tmp.4.i28247 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28246, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28270, double* %tmp.4.i28247 - %tmp.7.i28250 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28246, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28273, double* %tmp.7.i28250 - %tmp.0.i28253 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28246, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i28254 = getelementptr %"struct.std::dcomplex"* %mem_tmp.327, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i28255 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28253, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28256 = load double* %tmp.14.i28255 ; [#uses=1] - store double %tmp.15.i28256, double* %tmp.13.i28254 - %tmp.16.i28257 = getelementptr %"struct.std::dcomplex"* %mem_tmp.327, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i28258 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28253, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28259 = load double* %tmp.17.i28258 ; [#uses=1] - store double %tmp.18.i28259, double* %tmp.16.i28257 - %tmp.4.i28233 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28232, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28312, double* %tmp.4.i28233 - %tmp.7.i28236 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28232, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28315, double* %tmp.7.i28236 - %tmp.0.i28239 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28232, %"struct.std::dcomplex"* %mem_tmp.327 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28241 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28239, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28242 = load double* %tmp.14.i28241 ; [#uses=1] - %tmp.17.i28244 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28239, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28245 = load double* %tmp.17.i28244 ; [#uses=1] - %tmp.4.i28219 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28218, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28221 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i28221, double* %tmp.4.i28219 - %tmp.7.i28222 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28218, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28224 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i28224, double* %tmp.7.i28222 - %tmp.0.i28225 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28218, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28227 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28225, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28228 = load double* %tmp.14.i28227 ; [#uses=1] - %tmp.17.i28230 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28225, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28231 = load double* %tmp.17.i28230 ; [#uses=1] - %tmp.4.i28205 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28204, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28207 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i28207, double* %tmp.4.i28205 - %tmp.7.i28208 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28204, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28210 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i28210, double* %tmp.7.i28208 - %tmp.0.i28211 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28204, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i28212 = getelementptr %"struct.std::dcomplex"* %mem_tmp.334, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i28213 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28211, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28214 = load double* %tmp.14.i28213 ; [#uses=1] - store double %tmp.15.i28214, double* %tmp.13.i28212 - %tmp.16.i28215 = getelementptr %"struct.std::dcomplex"* %mem_tmp.334, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i28216 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28211, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28217 = load double* %tmp.17.i28216 ; [#uses=1] - store double %tmp.18.i28217, double* %tmp.16.i28215 - %tmp.4.i28191 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28190, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28228, double* %tmp.4.i28191 - %tmp.7.i28194 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28190, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28231, double* %tmp.7.i28194 - %tmp.0.i28197 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i28190, %"struct.std::dcomplex"* %mem_tmp.334 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28199 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28197, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28200 = load double* %tmp.14.i28199 ; [#uses=1] - %tmp.17.i28202 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28197, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28203 = load double* %tmp.17.i28202 ; [#uses=1] - %tmp.4.i28177 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28176, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28200, double* %tmp.4.i28177 - %tmp.7.i28180 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28176, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28203, double* %tmp.7.i28180 - %tmp.0.i28183 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28176, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i28184 = getelementptr %"struct.std::dcomplex"* %mem_tmp.331, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i28185 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28183, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28186 = load double* %tmp.14.i28185 ; [#uses=1] - store double %tmp.15.i28186, double* %tmp.13.i28184 - %tmp.16.i28187 = getelementptr %"struct.std::dcomplex"* %mem_tmp.331, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i28188 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28183, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28189 = load double* %tmp.17.i28188 ; [#uses=1] - store double %tmp.18.i28189, double* %tmp.16.i28187 - %tmp.4.i28163 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28162, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28242, double* %tmp.4.i28163 - %tmp.7.i28166 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28162, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28245, double* %tmp.7.i28166 - %tmp.0.i28169 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28162, %"struct.std::dcomplex"* %mem_tmp.331 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28171 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28169, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28172 = load double* %tmp.14.i28171 ; [#uses=1] - %tmp.17.i28174 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28169, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28175 = load double* %tmp.17.i28174 ; [#uses=1] - store double %tmp.15.i28172, double* %tmp.2.i34364 - store double %tmp.18.i28175, double* %tmp.6.i34365 - %tmp.4.i28129 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28128, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28131 = load double* %tmp.5.i33326 ; [#uses=1] - store double %tmp.6.i28131, double* %tmp.4.i28129 - %tmp.7.i28132 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28128, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28134 = load double* %tmp.8.i33329 ; [#uses=1] - store double %tmp.9.i28134, double* %tmp.7.i28132 - %tmp.0.i28135 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28128, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28137 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28135, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28138 = load double* %tmp.14.i28137 ; [#uses=1] - %tmp.17.i28140 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28135, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28141 = load double* %tmp.17.i28140 ; [#uses=1] - %tmp.7.i28095 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i28109 = add double %tmp.7.i28095, %tmp.15.i28138 ; [#uses=1] - store double %tmp.15.i28109, double* %tmp.2.i34366 - %tmp.26.i28116 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i28127 = add double %tmp.26.i28116, %tmp.18.i28141 ; [#uses=1] - store double %tmp.31.i28127, double* %tmp.6.i34367 - %tmp.4.i28075 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28074, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28077 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i28077, double* %tmp.4.i28075 - %tmp.7.i28078 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28074, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28080 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i28080, double* %tmp.7.i28078 - %tmp.0.i28081 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28074, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28083 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28081, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28084 = load double* %tmp.14.i28083 ; [#uses=1] - %tmp.17.i28086 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28081, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28087 = load double* %tmp.17.i28086 ; [#uses=1] - %tmp.4.i28061 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28060, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28063 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i28063, double* %tmp.4.i28061 - %tmp.7.i28064 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28060, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28066 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i28066, double* %tmp.7.i28064 - %tmp.0.i28067 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28060, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i28068 = getelementptr %"struct.std::dcomplex"* %mem_tmp.341, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i28069 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28067, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28070 = load double* %tmp.14.i28069 ; [#uses=1] - store double %tmp.15.i28070, double* %tmp.13.i28068 - %tmp.16.i28071 = getelementptr %"struct.std::dcomplex"* %mem_tmp.341, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i28072 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28067, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28073 = load double* %tmp.17.i28072 ; [#uses=1] - store double %tmp.18.i28073, double* %tmp.16.i28071 - %tmp.4.i28047 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28046, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28084, double* %tmp.4.i28047 - %tmp.7.i28050 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28046, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28087, double* %tmp.7.i28050 - %tmp.0.i28053 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i28046, %"struct.std::dcomplex"* %mem_tmp.341 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28055 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28053, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28056 = load double* %tmp.14.i28055 ; [#uses=1] - %tmp.17.i28058 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28053, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28059 = load double* %tmp.17.i28058 ; [#uses=1] - %tmp.4.i28033 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28032, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28056, double* %tmp.4.i28033 - %tmp.7.i28036 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28032, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28059, double* %tmp.7.i28036 - %tmp.0.i28039 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28032, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28041 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28039, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28042 = load double* %tmp.14.i28041 ; [#uses=1] - %tmp.17.i28044 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28039, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28045 = load double* %tmp.17.i28044 ; [#uses=1] - %tmp.4.i28019 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28018, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28021 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i28021, double* %tmp.4.i28019 - %tmp.7.i28022 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28018, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28024 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i28024, double* %tmp.7.i28022 - %tmp.0.i28025 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28018, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i28027 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28025, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28028 = load double* %tmp.14.i28027 ; [#uses=1] - %tmp.17.i28030 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28025, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28031 = load double* %tmp.17.i28030 ; [#uses=1] - %tmp.4.i28005 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28004, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i28007 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i28007, double* %tmp.4.i28005 - %tmp.7.i28008 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i28004, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i28010 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i28010, double* %tmp.7.i28008 - %tmp.0.i28011 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i28004, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i28012 = getelementptr %"struct.std::dcomplex"* %mem_tmp.345, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i28013 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28011, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28014 = load double* %tmp.14.i28013 ; [#uses=1] - store double %tmp.15.i28014, double* %tmp.13.i28012 - %tmp.16.i28015 = getelementptr %"struct.std::dcomplex"* %mem_tmp.345, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i28016 = getelementptr %"struct.std::dcomplex"* %tmp.0.i28011, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28017 = load double* %tmp.17.i28016 ; [#uses=1] - store double %tmp.18.i28017, double* %tmp.16.i28015 - %tmp.4.i27991 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27990, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28028, double* %tmp.4.i27991 - %tmp.7.i27994 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27990, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28031, double* %tmp.7.i27994 - %tmp.0.i27997 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i27990, %"struct.std::dcomplex"* %mem_tmp.345 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27999 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27997, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i28000 = load double* %tmp.14.i27999 ; [#uses=1] - %tmp.17.i28002 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27997, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i28003 = load double* %tmp.17.i28002 ; [#uses=1] - %tmp.4.i27977 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27976, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28000, double* %tmp.4.i27977 - %tmp.7.i27980 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27976, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28003, double* %tmp.7.i27980 - %tmp.0.i27983 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27976, %"struct.std::dcomplex"* %tmp.1075 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27984 = getelementptr %"struct.std::dcomplex"* %mem_tmp.342, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27985 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27983, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27986 = load double* %tmp.14.i27985 ; [#uses=1] - store double %tmp.15.i27986, double* %tmp.13.i27984 - %tmp.16.i27987 = getelementptr %"struct.std::dcomplex"* %mem_tmp.342, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27988 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27983, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27989 = load double* %tmp.17.i27988 ; [#uses=1] - store double %tmp.18.i27989, double* %tmp.16.i27987 - %tmp.4.i27963 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27962, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i28042, double* %tmp.4.i27963 - %tmp.7.i27966 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27962, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i28045, double* %tmp.7.i27966 - %tmp.0.i27969 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27962, %"struct.std::dcomplex"* %mem_tmp.342 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27971 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27969, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27972 = load double* %tmp.14.i27971 ; [#uses=1] - %tmp.17.i27974 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27969, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27975 = load double* %tmp.17.i27974 ; [#uses=1] - %tmp.4.i27949 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27948, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27951 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i27951, double* %tmp.4.i27949 - %tmp.7.i27952 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27948, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27954 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i27954, double* %tmp.7.i27952 - %tmp.0.i27955 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27948, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27957 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27955, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27958 = load double* %tmp.14.i27957 ; [#uses=1] - %tmp.17.i27960 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27955, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27961 = load double* %tmp.17.i27960 ; [#uses=1] - %tmp.4.i27935 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27934, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27937 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i27937, double* %tmp.4.i27935 - %tmp.7.i27938 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27934, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27940 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i27940, double* %tmp.7.i27938 - %tmp.0.i27941 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27934, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27942 = getelementptr %"struct.std::dcomplex"* %mem_tmp.349, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27943 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27941, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27944 = load double* %tmp.14.i27943 ; [#uses=1] - store double %tmp.15.i27944, double* %tmp.13.i27942 - %tmp.16.i27945 = getelementptr %"struct.std::dcomplex"* %mem_tmp.349, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27946 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27941, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27947 = load double* %tmp.17.i27946 ; [#uses=1] - store double %tmp.18.i27947, double* %tmp.16.i27945 - %tmp.4.i27921 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27920, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27958, double* %tmp.4.i27921 - %tmp.7.i27924 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27920, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27961, double* %tmp.7.i27924 - %tmp.0.i27927 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i27920, %"struct.std::dcomplex"* %mem_tmp.349 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27929 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27927, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27930 = load double* %tmp.14.i27929 ; [#uses=1] - %tmp.17.i27932 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27927, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27933 = load double* %tmp.17.i27932 ; [#uses=1] - %tmp.4.i27907 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27906, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27930, double* %tmp.4.i27907 - %tmp.7.i27910 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27906, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27933, double* %tmp.7.i27910 - %tmp.0.i27913 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27906, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27914 = getelementptr %"struct.std::dcomplex"* %mem_tmp.346, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27915 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27913, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27916 = load double* %tmp.14.i27915 ; [#uses=1] - store double %tmp.15.i27916, double* %tmp.13.i27914 - %tmp.16.i27917 = getelementptr %"struct.std::dcomplex"* %mem_tmp.346, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27918 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27913, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27919 = load double* %tmp.17.i27918 ; [#uses=1] - store double %tmp.18.i27919, double* %tmp.16.i27917 - %tmp.4.i27893 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27892, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27972, double* %tmp.4.i27893 - %tmp.7.i27896 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27892, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27975, double* %tmp.7.i27896 - %tmp.0.i27899 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27892, %"struct.std::dcomplex"* %mem_tmp.346 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27901 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27899, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27902 = load double* %tmp.14.i27901 ; [#uses=1] - %tmp.17.i27904 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27899, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27905 = load double* %tmp.17.i27904 ; [#uses=1] - store double %tmp.15.i27902, double* %tmp.2.i34364 - store double %tmp.18.i27905, double* %tmp.6.i34365 - %tmp.4.i27859 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27858, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27861 = load double* %tmp.5.i32460 ; [#uses=1] - store double %tmp.6.i27861, double* %tmp.4.i27859 - %tmp.7.i27862 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27858, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27864 = load double* %tmp.8.i32463 ; [#uses=1] - store double %tmp.9.i27864, double* %tmp.7.i27862 - %tmp.0.i27865 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27858, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27867 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27865, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27868 = load double* %tmp.14.i27867 ; [#uses=1] - %tmp.17.i27870 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27865, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27871 = load double* %tmp.17.i27870 ; [#uses=1] - %tmp.7.i27825 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i27839 = add double %tmp.7.i27825, %tmp.15.i27868 ; [#uses=1] - store double %tmp.15.i27839, double* %tmp.2.i34366 - %tmp.26.i27846 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i27857 = add double %tmp.26.i27846, %tmp.18.i27871 ; [#uses=1] - store double %tmp.31.i27857, double* %tmp.6.i34367 - %tmp.4.i27805 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27804, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27807 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i27807, double* %tmp.4.i27805 - %tmp.7.i27808 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27804, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27810 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i27810, double* %tmp.7.i27808 - %tmp.0.i27811 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27804, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27813 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27811, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27814 = load double* %tmp.14.i27813 ; [#uses=1] - %tmp.17.i27816 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27811, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27817 = load double* %tmp.17.i27816 ; [#uses=1] - %tmp.4.i27791 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27790, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27793 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i27793, double* %tmp.4.i27791 - %tmp.7.i27794 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27790, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27796 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i27796, double* %tmp.7.i27794 - %tmp.0.i27797 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27790, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27798 = getelementptr %"struct.std::dcomplex"* %mem_tmp.356, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27799 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27797, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27800 = load double* %tmp.14.i27799 ; [#uses=1] - store double %tmp.15.i27800, double* %tmp.13.i27798 - %tmp.16.i27801 = getelementptr %"struct.std::dcomplex"* %mem_tmp.356, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27802 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27797, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27803 = load double* %tmp.17.i27802 ; [#uses=1] - store double %tmp.18.i27803, double* %tmp.16.i27801 - %tmp.4.i27777 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27776, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27814, double* %tmp.4.i27777 - %tmp.7.i27780 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27776, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27817, double* %tmp.7.i27780 - %tmp.0.i27783 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i27776, %"struct.std::dcomplex"* %mem_tmp.356 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27785 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27783, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27786 = load double* %tmp.14.i27785 ; [#uses=1] - %tmp.17.i27788 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27783, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27789 = load double* %tmp.17.i27788 ; [#uses=1] - %tmp.4.i27763 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27762, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27786, double* %tmp.4.i27763 - %tmp.7.i27766 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27762, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27789, double* %tmp.7.i27766 - %tmp.0.i27769 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27762, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27771 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27769, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27772 = load double* %tmp.14.i27771 ; [#uses=1] - %tmp.17.i27774 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27769, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27775 = load double* %tmp.17.i27774 ; [#uses=1] - %tmp.4.i27749 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27748, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27751 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i27751, double* %tmp.4.i27749 - %tmp.7.i27752 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27748, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27754 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i27754, double* %tmp.7.i27752 - %tmp.0.i27755 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27748, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27757 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27755, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27758 = load double* %tmp.14.i27757 ; [#uses=1] - %tmp.17.i27760 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27755, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27761 = load double* %tmp.17.i27760 ; [#uses=1] - %tmp.4.i27735 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27734, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27737 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i27737, double* %tmp.4.i27735 - %tmp.7.i27738 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27734, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27740 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i27740, double* %tmp.7.i27738 - %tmp.0.i27741 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27734, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27742 = getelementptr %"struct.std::dcomplex"* %mem_tmp.360, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27743 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27741, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27744 = load double* %tmp.14.i27743 ; [#uses=1] - store double %tmp.15.i27744, double* %tmp.13.i27742 - %tmp.16.i27745 = getelementptr %"struct.std::dcomplex"* %mem_tmp.360, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27746 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27741, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27747 = load double* %tmp.17.i27746 ; [#uses=1] - store double %tmp.18.i27747, double* %tmp.16.i27745 - %tmp.4.i27721 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27720, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27758, double* %tmp.4.i27721 - %tmp.7.i27724 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27720, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27761, double* %tmp.7.i27724 - %tmp.0.i27727 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i27720, %"struct.std::dcomplex"* %mem_tmp.360 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27729 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27727, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27730 = load double* %tmp.14.i27729 ; [#uses=1] - %tmp.17.i27732 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27727, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27733 = load double* %tmp.17.i27732 ; [#uses=1] - %tmp.4.i27707 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27706, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27730, double* %tmp.4.i27707 - %tmp.7.i27710 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27706, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27733, double* %tmp.7.i27710 - %tmp.0.i27713 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27706, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27714 = getelementptr %"struct.std::dcomplex"* %mem_tmp.357, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27715 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27713, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27716 = load double* %tmp.14.i27715 ; [#uses=1] - store double %tmp.15.i27716, double* %tmp.13.i27714 - %tmp.16.i27717 = getelementptr %"struct.std::dcomplex"* %mem_tmp.357, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27718 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27713, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27719 = load double* %tmp.17.i27718 ; [#uses=1] - store double %tmp.18.i27719, double* %tmp.16.i27717 - %tmp.4.i27693 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27692, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27772, double* %tmp.4.i27693 - %tmp.7.i27696 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27692, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27775, double* %tmp.7.i27696 - %tmp.0.i27699 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27692, %"struct.std::dcomplex"* %mem_tmp.357 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27701 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27699, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27702 = load double* %tmp.14.i27701 ; [#uses=1] - %tmp.17.i27704 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27699, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27705 = load double* %tmp.17.i27704 ; [#uses=1] - %tmp.4.i27679 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27678, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27681 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i27681, double* %tmp.4.i27679 - %tmp.7.i27682 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27678, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27684 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i27684, double* %tmp.7.i27682 - %tmp.0.i27685 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27678, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27687 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27685, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27688 = load double* %tmp.14.i27687 ; [#uses=1] - %tmp.17.i27690 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27685, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27691 = load double* %tmp.17.i27690 ; [#uses=1] - %tmp.4.i27665 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27664, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27667 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i27667, double* %tmp.4.i27665 - %tmp.7.i27668 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27664, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27670 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i27670, double* %tmp.7.i27668 - %tmp.0.i27671 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27664, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27672 = getelementptr %"struct.std::dcomplex"* %mem_tmp.364, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27673 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27671, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27674 = load double* %tmp.14.i27673 ; [#uses=1] - store double %tmp.15.i27674, double* %tmp.13.i27672 - %tmp.16.i27675 = getelementptr %"struct.std::dcomplex"* %mem_tmp.364, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27676 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27671, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27677 = load double* %tmp.17.i27676 ; [#uses=1] - store double %tmp.18.i27677, double* %tmp.16.i27675 - %tmp.4.i27651 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27650, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27688, double* %tmp.4.i27651 - %tmp.7.i27654 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27650, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27691, double* %tmp.7.i27654 - %tmp.0.i27657 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i27650, %"struct.std::dcomplex"* %mem_tmp.364 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27659 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27657, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27660 = load double* %tmp.14.i27659 ; [#uses=1] - %tmp.17.i27662 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27657, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27663 = load double* %tmp.17.i27662 ; [#uses=1] - %tmp.4.i27637 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27636, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27660, double* %tmp.4.i27637 - %tmp.7.i27640 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27636, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27663, double* %tmp.7.i27640 - %tmp.0.i27643 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27636, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27644 = getelementptr %"struct.std::dcomplex"* %mem_tmp.361, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27645 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27643, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27646 = load double* %tmp.14.i27645 ; [#uses=1] - store double %tmp.15.i27646, double* %tmp.13.i27644 - %tmp.16.i27647 = getelementptr %"struct.std::dcomplex"* %mem_tmp.361, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27648 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27643, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27649 = load double* %tmp.17.i27648 ; [#uses=1] - store double %tmp.18.i27649, double* %tmp.16.i27647 - %tmp.4.i27623 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27622, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27702, double* %tmp.4.i27623 - %tmp.7.i27626 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27622, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27705, double* %tmp.7.i27626 - %tmp.0.i27629 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27622, %"struct.std::dcomplex"* %mem_tmp.361 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27631 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27629, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27632 = load double* %tmp.14.i27631 ; [#uses=1] - %tmp.17.i27634 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27629, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27635 = load double* %tmp.17.i27634 ; [#uses=1] - store double %tmp.15.i27632, double* %tmp.2.i34364 - store double %tmp.18.i27635, double* %tmp.6.i34365 - %tmp.4.i27589 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27588, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i27590 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 3, i32 5, i32 0, i32 0 ; [#uses=20] - %tmp.6.i27591 = load double* %tmp.5.i27590 ; [#uses=1] - store double %tmp.6.i27591, double* %tmp.4.i27589 - %tmp.7.i27592 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27588, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i27593 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 3, i32 5, i32 0, i32 1 ; [#uses=20] - %tmp.9.i27594 = load double* %tmp.8.i27593 ; [#uses=1] - store double %tmp.9.i27594, double* %tmp.7.i27592 - %tmp.0.i27595 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27588, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27597 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27595, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27598 = load double* %tmp.14.i27597 ; [#uses=1] - %tmp.17.i27600 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27595, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27601 = load double* %tmp.17.i27600 ; [#uses=1] - %tmp.7.i27555 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i27569 = add double %tmp.7.i27555, %tmp.15.i27598 ; [#uses=1] - store double %tmp.15.i27569, double* %tmp.2.i34366 - %tmp.26.i27576 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i27587 = add double %tmp.26.i27576, %tmp.18.i27601 ; [#uses=1] - store double %tmp.31.i27587, double* %tmp.6.i34367 - %tmp.4.i27535 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27534, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27537 = load double* %tmp.5.i28728 ; [#uses=1] - store double %tmp.6.i27537, double* %tmp.4.i27535 - %tmp.7.i27538 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27534, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27540 = load double* %tmp.8.i28731 ; [#uses=1] - store double %tmp.9.i27540, double* %tmp.7.i27538 - %tmp.0.i27541 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27534, %"struct.std::dcomplex"* %ret4 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27543 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27541, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27544 = load double* %tmp.14.i27543 ; [#uses=1] - %tmp.17.i27546 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27541, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27547 = load double* %tmp.17.i27546 ; [#uses=1] - %tmp.7.i27501 = load double* %tmp.2.i34368 ; [#uses=1] - %tmp.15.i27515 = add double %tmp.7.i27501, %tmp.15.i27544 ; [#uses=1] - store double %tmp.15.i27515, double* %tmp.2.i34368 - %tmp.26.i27522 = load double* %tmp.6.i34369 ; [#uses=1] - %tmp.31.i27533 = add double %tmp.26.i27522, %tmp.18.i27547 ; [#uses=1] - store double %tmp.31.i27533, double* %tmp.6.i34369 - store double 0.000000e+00, double* %tmp.2.i34366 - store double 0.000000e+00, double* %tmp.6.i34367 - %tmp.4.i27479 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27478, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27481 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i27481, double* %tmp.4.i27479 - %tmp.7.i27482 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27478, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27484 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i27484, double* %tmp.7.i27482 - %tmp.0.i27485 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27478, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27487 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27485, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27488 = load double* %tmp.14.i27487 ; [#uses=1] - %tmp.17.i27490 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27485, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27491 = load double* %tmp.17.i27490 ; [#uses=1] - %tmp.4.i27465 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27464, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27467 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i27467, double* %tmp.4.i27465 - %tmp.7.i27468 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27464, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27470 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i27470, double* %tmp.7.i27468 - %tmp.0.i27471 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27464, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27472 = getelementptr %"struct.std::dcomplex"* %mem_tmp.372, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27473 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27471, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27474 = load double* %tmp.14.i27473 ; [#uses=1] - store double %tmp.15.i27474, double* %tmp.13.i27472 - %tmp.16.i27475 = getelementptr %"struct.std::dcomplex"* %mem_tmp.372, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27476 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27471, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27477 = load double* %tmp.17.i27476 ; [#uses=1] - store double %tmp.18.i27477, double* %tmp.16.i27475 - %tmp.4.i27451 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27450, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27488, double* %tmp.4.i27451 - %tmp.7.i27454 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27450, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27491, double* %tmp.7.i27454 - %tmp.0.i27457 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i27450, %"struct.std::dcomplex"* %mem_tmp.372 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27459 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27457, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27460 = load double* %tmp.14.i27459 ; [#uses=1] - %tmp.17.i27462 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27457, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27463 = load double* %tmp.17.i27462 ; [#uses=1] - %tmp.4.i27437 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27436, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27460, double* %tmp.4.i27437 - %tmp.7.i27440 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27436, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27463, double* %tmp.7.i27440 - %tmp.0.i27443 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27436, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27445 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27443, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27446 = load double* %tmp.14.i27445 ; [#uses=1] - %tmp.17.i27448 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27443, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27449 = load double* %tmp.17.i27448 ; [#uses=1] - %tmp.4.i27423 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27422, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27425 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i27425, double* %tmp.4.i27423 - %tmp.7.i27426 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27422, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27428 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i27428, double* %tmp.7.i27426 - %tmp.0.i27429 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27422, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27431 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27429, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27432 = load double* %tmp.14.i27431 ; [#uses=1] - %tmp.17.i27434 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27429, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27435 = load double* %tmp.17.i27434 ; [#uses=1] - %tmp.4.i27409 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27408, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27411 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i27411, double* %tmp.4.i27409 - %tmp.7.i27412 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27408, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27414 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i27414, double* %tmp.7.i27412 - %tmp.0.i27415 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27408, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27416 = getelementptr %"struct.std::dcomplex"* %mem_tmp.376, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27417 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27415, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27418 = load double* %tmp.14.i27417 ; [#uses=1] - store double %tmp.15.i27418, double* %tmp.13.i27416 - %tmp.16.i27419 = getelementptr %"struct.std::dcomplex"* %mem_tmp.376, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27420 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27415, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27421 = load double* %tmp.17.i27420 ; [#uses=1] - store double %tmp.18.i27421, double* %tmp.16.i27419 - %tmp.4.i27395 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27394, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27432, double* %tmp.4.i27395 - %tmp.7.i27398 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27394, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27435, double* %tmp.7.i27398 - %tmp.0.i27401 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i27394, %"struct.std::dcomplex"* %mem_tmp.376 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27403 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27401, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27404 = load double* %tmp.14.i27403 ; [#uses=1] - %tmp.17.i27406 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27401, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27407 = load double* %tmp.17.i27406 ; [#uses=1] - %tmp.4.i27381 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27380, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27404, double* %tmp.4.i27381 - %tmp.7.i27384 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27380, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27407, double* %tmp.7.i27384 - %tmp.0.i27387 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27380, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27388 = getelementptr %"struct.std::dcomplex"* %mem_tmp.373, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27389 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27387, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27390 = load double* %tmp.14.i27389 ; [#uses=1] - store double %tmp.15.i27390, double* %tmp.13.i27388 - %tmp.16.i27391 = getelementptr %"struct.std::dcomplex"* %mem_tmp.373, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27392 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27387, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27393 = load double* %tmp.17.i27392 ; [#uses=1] - store double %tmp.18.i27393, double* %tmp.16.i27391 - %tmp.4.i27367 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27366, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27446, double* %tmp.4.i27367 - %tmp.7.i27370 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27366, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27449, double* %tmp.7.i27370 - %tmp.0.i27373 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27366, %"struct.std::dcomplex"* %mem_tmp.373 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27375 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27373, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27376 = load double* %tmp.14.i27375 ; [#uses=1] - %tmp.17.i27378 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27373, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27379 = load double* %tmp.17.i27378 ; [#uses=1] - %tmp.4.i27353 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27352, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27355 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i27355, double* %tmp.4.i27353 - %tmp.7.i27356 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27352, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27358 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i27358, double* %tmp.7.i27356 - %tmp.0.i27359 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27352, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27361 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27359, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27362 = load double* %tmp.14.i27361 ; [#uses=1] - %tmp.17.i27364 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27359, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27365 = load double* %tmp.17.i27364 ; [#uses=1] - %tmp.4.i27339 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27338, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27341 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i27341, double* %tmp.4.i27339 - %tmp.7.i27342 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27338, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27344 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i27344, double* %tmp.7.i27342 - %tmp.0.i27345 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27338, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27346 = getelementptr %"struct.std::dcomplex"* %mem_tmp.380, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27347 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27345, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27348 = load double* %tmp.14.i27347 ; [#uses=1] - store double %tmp.15.i27348, double* %tmp.13.i27346 - %tmp.16.i27349 = getelementptr %"struct.std::dcomplex"* %mem_tmp.380, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27350 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27345, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27351 = load double* %tmp.17.i27350 ; [#uses=1] - store double %tmp.18.i27351, double* %tmp.16.i27349 - %tmp.4.i27325 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27324, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27362, double* %tmp.4.i27325 - %tmp.7.i27328 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27324, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27365, double* %tmp.7.i27328 - %tmp.0.i27331 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i27324, %"struct.std::dcomplex"* %mem_tmp.380 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27333 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27331, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27334 = load double* %tmp.14.i27333 ; [#uses=1] - %tmp.17.i27336 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27331, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27337 = load double* %tmp.17.i27336 ; [#uses=1] - %tmp.4.i27311 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27310, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27334, double* %tmp.4.i27311 - %tmp.7.i27314 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27310, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27337, double* %tmp.7.i27314 - %tmp.0.i27317 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27310, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27318 = getelementptr %"struct.std::dcomplex"* %mem_tmp.377, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27319 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27317, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27320 = load double* %tmp.14.i27319 ; [#uses=1] - store double %tmp.15.i27320, double* %tmp.13.i27318 - %tmp.16.i27321 = getelementptr %"struct.std::dcomplex"* %mem_tmp.377, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27322 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27317, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27323 = load double* %tmp.17.i27322 ; [#uses=1] - store double %tmp.18.i27323, double* %tmp.16.i27321 - %tmp.4.i27297 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27296, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27376, double* %tmp.4.i27297 - %tmp.7.i27300 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27296, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27379, double* %tmp.7.i27300 - %tmp.0.i27303 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27296, %"struct.std::dcomplex"* %mem_tmp.377 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27305 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27303, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27306 = load double* %tmp.14.i27305 ; [#uses=1] - %tmp.17.i27308 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27303, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27309 = load double* %tmp.17.i27308 ; [#uses=1] - store double %tmp.15.i27306, double* %tmp.2.i34364 - store double %tmp.18.i27309, double* %tmp.6.i34365 - %tmp.4.i27263 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27262, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27265 = load double* %tmp.5.i27590 ; [#uses=1] - store double %tmp.6.i27265, double* %tmp.4.i27263 - %tmp.7.i27266 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27262, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27268 = load double* %tmp.8.i27593 ; [#uses=1] - store double %tmp.9.i27268, double* %tmp.7.i27266 - %tmp.0.i27269 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27262, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27271 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27269, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27272 = load double* %tmp.14.i27271 ; [#uses=1] - %tmp.17.i27274 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27269, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27275 = load double* %tmp.17.i27274 ; [#uses=1] - %tmp.7.i27229 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i27243 = add double %tmp.7.i27229, %tmp.15.i27272 ; [#uses=1] - store double %tmp.15.i27243, double* %tmp.2.i34366 - %tmp.26.i27250 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i27261 = add double %tmp.26.i27250, %tmp.18.i27275 ; [#uses=1] - store double %tmp.31.i27261, double* %tmp.6.i34367 - %tmp.4.i27209 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27208, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27211 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i27211, double* %tmp.4.i27209 - %tmp.7.i27212 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27208, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27214 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i27214, double* %tmp.7.i27212 - %tmp.0.i27215 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27208, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27217 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27215, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27218 = load double* %tmp.14.i27217 ; [#uses=1] - %tmp.17.i27220 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27215, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27221 = load double* %tmp.17.i27220 ; [#uses=1] - %tmp.4.i27195 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27194, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27197 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i27197, double* %tmp.4.i27195 - %tmp.7.i27198 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27194, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27200 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i27200, double* %tmp.7.i27198 - %tmp.0.i27201 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27194, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27202 = getelementptr %"struct.std::dcomplex"* %mem_tmp.387, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27203 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27201, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27204 = load double* %tmp.14.i27203 ; [#uses=1] - store double %tmp.15.i27204, double* %tmp.13.i27202 - %tmp.16.i27205 = getelementptr %"struct.std::dcomplex"* %mem_tmp.387, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27206 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27201, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27207 = load double* %tmp.17.i27206 ; [#uses=1] - store double %tmp.18.i27207, double* %tmp.16.i27205 - %tmp.4.i27181 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27180, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27218, double* %tmp.4.i27181 - %tmp.7.i27184 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27180, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27221, double* %tmp.7.i27184 - %tmp.0.i27187 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i27180, %"struct.std::dcomplex"* %mem_tmp.387 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27189 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27187, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27190 = load double* %tmp.14.i27189 ; [#uses=1] - %tmp.17.i27192 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27187, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27193 = load double* %tmp.17.i27192 ; [#uses=1] - %tmp.4.i27167 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27166, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27190, double* %tmp.4.i27167 - %tmp.7.i27170 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27166, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27193, double* %tmp.7.i27170 - %tmp.0.i27173 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27166, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27175 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27173, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27176 = load double* %tmp.14.i27175 ; [#uses=1] - %tmp.17.i27178 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27173, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27179 = load double* %tmp.17.i27178 ; [#uses=1] - %tmp.4.i27153 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27152, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27155 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i27155, double* %tmp.4.i27153 - %tmp.7.i27156 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27152, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27158 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i27158, double* %tmp.7.i27156 - %tmp.0.i27159 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27152, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27161 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27159, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27162 = load double* %tmp.14.i27161 ; [#uses=1] - %tmp.17.i27164 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27159, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27165 = load double* %tmp.17.i27164 ; [#uses=1] - %tmp.4.i27139 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27138, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27141 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i27141, double* %tmp.4.i27139 - %tmp.7.i27142 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27138, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27144 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i27144, double* %tmp.7.i27142 - %tmp.0.i27145 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27138, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27146 = getelementptr %"struct.std::dcomplex"* %mem_tmp.391, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27147 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27145, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27148 = load double* %tmp.14.i27147 ; [#uses=1] - store double %tmp.15.i27148, double* %tmp.13.i27146 - %tmp.16.i27149 = getelementptr %"struct.std::dcomplex"* %mem_tmp.391, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27150 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27145, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27151 = load double* %tmp.17.i27150 ; [#uses=1] - store double %tmp.18.i27151, double* %tmp.16.i27149 - %tmp.4.i27125 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27124, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27162, double* %tmp.4.i27125 - %tmp.7.i27128 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27124, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27165, double* %tmp.7.i27128 - %tmp.0.i27131 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i27124, %"struct.std::dcomplex"* %mem_tmp.391 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27133 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27131, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27134 = load double* %tmp.14.i27133 ; [#uses=1] - %tmp.17.i27136 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27131, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27137 = load double* %tmp.17.i27136 ; [#uses=1] - %tmp.4.i27111 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27110, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27134, double* %tmp.4.i27111 - %tmp.7.i27114 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27110, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27137, double* %tmp.7.i27114 - %tmp.0.i27117 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27110, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27118 = getelementptr %"struct.std::dcomplex"* %mem_tmp.388, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27119 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27117, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27120 = load double* %tmp.14.i27119 ; [#uses=1] - store double %tmp.15.i27120, double* %tmp.13.i27118 - %tmp.16.i27121 = getelementptr %"struct.std::dcomplex"* %mem_tmp.388, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27122 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27117, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27123 = load double* %tmp.17.i27122 ; [#uses=1] - store double %tmp.18.i27123, double* %tmp.16.i27121 - %tmp.4.i27097 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27096, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27176, double* %tmp.4.i27097 - %tmp.7.i27100 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27096, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27179, double* %tmp.7.i27100 - %tmp.0.i27103 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27096, %"struct.std::dcomplex"* %mem_tmp.388 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27105 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27103, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27106 = load double* %tmp.14.i27105 ; [#uses=1] - %tmp.17.i27108 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27103, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27109 = load double* %tmp.17.i27108 ; [#uses=1] - %tmp.4.i27083 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27082, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27085 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i27085, double* %tmp.4.i27083 - %tmp.7.i27086 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27082, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27088 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i27088, double* %tmp.7.i27086 - %tmp.0.i27089 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27082, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27091 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27089, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27092 = load double* %tmp.14.i27091 ; [#uses=1] - %tmp.17.i27094 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27089, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27095 = load double* %tmp.17.i27094 ; [#uses=1] - %tmp.4.i27069 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27068, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i27071 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i27071, double* %tmp.4.i27069 - %tmp.7.i27072 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27068, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i27074 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i27074, double* %tmp.7.i27072 - %tmp.0.i27075 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27068, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27076 = getelementptr %"struct.std::dcomplex"* %mem_tmp.395, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27077 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27075, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27078 = load double* %tmp.14.i27077 ; [#uses=1] - store double %tmp.15.i27078, double* %tmp.13.i27076 - %tmp.16.i27079 = getelementptr %"struct.std::dcomplex"* %mem_tmp.395, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27080 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27075, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27081 = load double* %tmp.17.i27080 ; [#uses=1] - store double %tmp.18.i27081, double* %tmp.16.i27079 - %tmp.4.i27055 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27054, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27092, double* %tmp.4.i27055 - %tmp.7.i27058 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27054, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27095, double* %tmp.7.i27058 - %tmp.0.i27061 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i27054, %"struct.std::dcomplex"* %mem_tmp.395 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27063 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27061, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27064 = load double* %tmp.14.i27063 ; [#uses=1] - %tmp.17.i27066 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27061, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27067 = load double* %tmp.17.i27066 ; [#uses=1] - %tmp.4.i27041 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27040, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27064, double* %tmp.4.i27041 - %tmp.7.i27044 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27040, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27067, double* %tmp.7.i27044 - %tmp.0.i27047 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27040, %"struct.std::dcomplex"* %tmp.1075 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i27048 = getelementptr %"struct.std::dcomplex"* %mem_tmp.392, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i27049 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27047, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27050 = load double* %tmp.14.i27049 ; [#uses=1] - store double %tmp.15.i27050, double* %tmp.13.i27048 - %tmp.16.i27051 = getelementptr %"struct.std::dcomplex"* %mem_tmp.392, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i27052 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27047, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27053 = load double* %tmp.17.i27052 ; [#uses=1] - store double %tmp.18.i27053, double* %tmp.16.i27051 - %tmp.4.i27027 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27026, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i27106, double* %tmp.4.i27027 - %tmp.7.i27030 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i27026, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i27109, double* %tmp.7.i27030 - %tmp.0.i27033 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i27026, %"struct.std::dcomplex"* %mem_tmp.392 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27035 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27033, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27036 = load double* %tmp.14.i27035 ; [#uses=1] - %tmp.17.i27038 = getelementptr %"struct.std::dcomplex"* %tmp.0.i27033, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27039 = load double* %tmp.17.i27038 ; [#uses=1] - store double %tmp.15.i27036, double* %tmp.2.i34364 - store double %tmp.18.i27039, double* %tmp.6.i34365 - %tmp.4.i26993 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26992, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26995 = load double* %tmp.5.i33596 ; [#uses=1] - store double %tmp.6.i26995, double* %tmp.4.i26993 - %tmp.7.i26996 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26992, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26998 = load double* %tmp.8.i33599 ; [#uses=1] - store double %tmp.9.i26998, double* %tmp.7.i26996 - %tmp.0.i26999 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26992, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i27001 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26999, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i27002 = load double* %tmp.14.i27001 ; [#uses=1] - %tmp.17.i27004 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26999, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i27005 = load double* %tmp.17.i27004 ; [#uses=1] - %tmp.7.i26959 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i26973 = add double %tmp.7.i26959, %tmp.15.i27002 ; [#uses=1] - store double %tmp.15.i26973, double* %tmp.2.i34366 - %tmp.26.i26980 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i26991 = add double %tmp.26.i26980, %tmp.18.i27005 ; [#uses=1] - store double %tmp.31.i26991, double* %tmp.6.i34367 - %tmp.4.i26939 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26938, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26941 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i26941, double* %tmp.4.i26939 - %tmp.7.i26942 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26938, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26944 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i26944, double* %tmp.7.i26942 - %tmp.0.i26945 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26938, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26947 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26945, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26948 = load double* %tmp.14.i26947 ; [#uses=1] - %tmp.17.i26950 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26945, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26951 = load double* %tmp.17.i26950 ; [#uses=1] - %tmp.4.i26925 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26924, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26927 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i26927, double* %tmp.4.i26925 - %tmp.7.i26928 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26924, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26930 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i26930, double* %tmp.7.i26928 - %tmp.0.i26931 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26924, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i26932 = getelementptr %"struct.std::dcomplex"* %mem_tmp.402, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i26933 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26931, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26934 = load double* %tmp.14.i26933 ; [#uses=1] - store double %tmp.15.i26934, double* %tmp.13.i26932 - %tmp.16.i26935 = getelementptr %"struct.std::dcomplex"* %mem_tmp.402, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i26936 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26931, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26937 = load double* %tmp.17.i26936 ; [#uses=1] - store double %tmp.18.i26937, double* %tmp.16.i26935 - %tmp.4.i26911 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26910, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26948, double* %tmp.4.i26911 - %tmp.7.i26914 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26910, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26951, double* %tmp.7.i26914 - %tmp.0.i26917 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i26910, %"struct.std::dcomplex"* %mem_tmp.402 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26919 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26917, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26920 = load double* %tmp.14.i26919 ; [#uses=1] - %tmp.17.i26922 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26917, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26923 = load double* %tmp.17.i26922 ; [#uses=1] - %tmp.4.i26897 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26896, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26920, double* %tmp.4.i26897 - %tmp.7.i26900 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26896, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26923, double* %tmp.7.i26900 - %tmp.0.i26903 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26896, %"struct.std::dcomplex"* %tmp.1075 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26905 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26903, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26906 = load double* %tmp.14.i26905 ; [#uses=1] - %tmp.17.i26908 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26903, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26909 = load double* %tmp.17.i26908 ; [#uses=1] - %tmp.4.i26883 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26882, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26885 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i26885, double* %tmp.4.i26883 - %tmp.7.i26886 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26882, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26888 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i26888, double* %tmp.7.i26886 - %tmp.0.i26889 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26882, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26891 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26889, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26892 = load double* %tmp.14.i26891 ; [#uses=1] - %tmp.17.i26894 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26889, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26895 = load double* %tmp.17.i26894 ; [#uses=1] - %tmp.4.i26869 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26868, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26871 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i26871, double* %tmp.4.i26869 - %tmp.7.i26872 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26868, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26874 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i26874, double* %tmp.7.i26872 - %tmp.0.i26875 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26868, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i26876 = getelementptr %"struct.std::dcomplex"* %mem_tmp.406, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i26877 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26875, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26878 = load double* %tmp.14.i26877 ; [#uses=1] - store double %tmp.15.i26878, double* %tmp.13.i26876 - %tmp.16.i26879 = getelementptr %"struct.std::dcomplex"* %mem_tmp.406, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i26880 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26875, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26881 = load double* %tmp.17.i26880 ; [#uses=1] - store double %tmp.18.i26881, double* %tmp.16.i26879 - %tmp.4.i26855 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26854, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26892, double* %tmp.4.i26855 - %tmp.7.i26858 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26854, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26895, double* %tmp.7.i26858 - %tmp.0.i26861 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i26854, %"struct.std::dcomplex"* %mem_tmp.406 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26863 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26861, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26864 = load double* %tmp.14.i26863 ; [#uses=1] - %tmp.17.i26866 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26861, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26867 = load double* %tmp.17.i26866 ; [#uses=1] - %tmp.4.i26841 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26840, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26864, double* %tmp.4.i26841 - %tmp.7.i26844 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26840, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26867, double* %tmp.7.i26844 - %tmp.0.i26847 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26840, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i26848 = getelementptr %"struct.std::dcomplex"* %mem_tmp.403, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i26849 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26847, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26850 = load double* %tmp.14.i26849 ; [#uses=1] - store double %tmp.15.i26850, double* %tmp.13.i26848 - %tmp.16.i26851 = getelementptr %"struct.std::dcomplex"* %mem_tmp.403, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i26852 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26847, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26853 = load double* %tmp.17.i26852 ; [#uses=1] - store double %tmp.18.i26853, double* %tmp.16.i26851 - %tmp.4.i26827 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26826, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26906, double* %tmp.4.i26827 - %tmp.7.i26830 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26826, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26909, double* %tmp.7.i26830 - %tmp.0.i26833 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26826, %"struct.std::dcomplex"* %mem_tmp.403 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26835 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26833, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26836 = load double* %tmp.14.i26835 ; [#uses=1] - %tmp.17.i26838 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26833, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26839 = load double* %tmp.17.i26838 ; [#uses=1] - %tmp.4.i26813 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26812, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26815 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i26815, double* %tmp.4.i26813 - %tmp.7.i26816 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26812, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26818 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i26818, double* %tmp.7.i26816 - %tmp.0.i26819 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26812, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26821 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26819, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26822 = load double* %tmp.14.i26821 ; [#uses=1] - %tmp.17.i26824 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26819, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26825 = load double* %tmp.17.i26824 ; [#uses=1] - %tmp.4.i26799 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26798, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26801 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i26801, double* %tmp.4.i26799 - %tmp.7.i26802 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26798, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26804 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i26804, double* %tmp.7.i26802 - %tmp.0.i26805 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26798, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i26806 = getelementptr %"struct.std::dcomplex"* %mem_tmp.410, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i26807 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26805, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26808 = load double* %tmp.14.i26807 ; [#uses=1] - store double %tmp.15.i26808, double* %tmp.13.i26806 - %tmp.16.i26809 = getelementptr %"struct.std::dcomplex"* %mem_tmp.410, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i26810 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26805, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26811 = load double* %tmp.17.i26810 ; [#uses=1] - store double %tmp.18.i26811, double* %tmp.16.i26809 - %tmp.4.i26785 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26784, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26822, double* %tmp.4.i26785 - %tmp.7.i26788 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26784, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26825, double* %tmp.7.i26788 - %tmp.0.i26791 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i26784, %"struct.std::dcomplex"* %mem_tmp.410 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26793 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26791, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26794 = load double* %tmp.14.i26793 ; [#uses=1] - %tmp.17.i26796 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26791, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26797 = load double* %tmp.17.i26796 ; [#uses=1] - %tmp.4.i26771 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26770, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26794, double* %tmp.4.i26771 - %tmp.7.i26774 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26770, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26797, double* %tmp.7.i26774 - %tmp.0.i26777 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26770, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i26778 = getelementptr %"struct.std::dcomplex"* %mem_tmp.407, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i26779 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26777, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26780 = load double* %tmp.14.i26779 ; [#uses=1] - store double %tmp.15.i26780, double* %tmp.13.i26778 - %tmp.16.i26781 = getelementptr %"struct.std::dcomplex"* %mem_tmp.407, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i26782 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26777, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26783 = load double* %tmp.17.i26782 ; [#uses=1] - store double %tmp.18.i26783, double* %tmp.16.i26781 - %tmp.4.i26757 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26756, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26836, double* %tmp.4.i26757 - %tmp.7.i26760 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26756, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26839, double* %tmp.7.i26760 - %tmp.0.i26763 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26756, %"struct.std::dcomplex"* %mem_tmp.407 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26765 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26763, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26766 = load double* %tmp.14.i26765 ; [#uses=1] - %tmp.17.i26768 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26763, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26769 = load double* %tmp.17.i26768 ; [#uses=1] - store double %tmp.15.i26766, double* %tmp.2.i34364 - store double %tmp.18.i26769, double* %tmp.6.i34365 - %tmp.4.i26723 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26722, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26725 = load double* %tmp.5.i33326 ; [#uses=1] - store double %tmp.6.i26725, double* %tmp.4.i26723 - %tmp.7.i26726 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26722, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26728 = load double* %tmp.8.i33329 ; [#uses=1] - store double %tmp.9.i26728, double* %tmp.7.i26726 - %tmp.0.i26729 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26722, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26731 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26729, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26732 = load double* %tmp.14.i26731 ; [#uses=1] - %tmp.17.i26734 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26729, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26735 = load double* %tmp.17.i26734 ; [#uses=1] - %tmp.7.i26689 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i26703 = add double %tmp.7.i26689, %tmp.15.i26732 ; [#uses=1] - store double %tmp.15.i26703, double* %tmp.2.i34366 - %tmp.26.i26710 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i26721 = add double %tmp.26.i26710, %tmp.18.i26735 ; [#uses=1] - store double %tmp.31.i26721, double* %tmp.6.i34367 - %tmp.4.i26669 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26668, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26671 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i26671, double* %tmp.4.i26669 - %tmp.7.i26672 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26668, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26674 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i26674, double* %tmp.7.i26672 - %tmp.0.i26675 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26668, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26677 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26675, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26678 = load double* %tmp.14.i26677 ; [#uses=1] - %tmp.17.i26680 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26675, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26681 = load double* %tmp.17.i26680 ; [#uses=1] - %tmp.4.i26655 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26654, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26657 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i26657, double* %tmp.4.i26655 - %tmp.7.i26658 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26654, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26660 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i26660, double* %tmp.7.i26658 - %tmp.0.i26661 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26654, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i26662 = getelementptr %"struct.std::dcomplex"* %mem_tmp.417, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i26663 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26661, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26664 = load double* %tmp.14.i26663 ; [#uses=1] - store double %tmp.15.i26664, double* %tmp.13.i26662 - %tmp.16.i26665 = getelementptr %"struct.std::dcomplex"* %mem_tmp.417, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i26666 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26661, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26667 = load double* %tmp.17.i26666 ; [#uses=1] - store double %tmp.18.i26667, double* %tmp.16.i26665 - %tmp.4.i26641 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26640, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26678, double* %tmp.4.i26641 - %tmp.7.i26644 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26640, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26681, double* %tmp.7.i26644 - %tmp.0.i26647 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i26640, %"struct.std::dcomplex"* %mem_tmp.417 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26649 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26647, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26650 = load double* %tmp.14.i26649 ; [#uses=1] - %tmp.17.i26652 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26647, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26653 = load double* %tmp.17.i26652 ; [#uses=1] - %tmp.4.i26627 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26626, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26650, double* %tmp.4.i26627 - %tmp.7.i26630 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26626, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26653, double* %tmp.7.i26630 - %tmp.0.i26633 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26626, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26635 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26633, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26636 = load double* %tmp.14.i26635 ; [#uses=1] - %tmp.17.i26638 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26633, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26639 = load double* %tmp.17.i26638 ; [#uses=1] - %tmp.4.i26613 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26612, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26615 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i26615, double* %tmp.4.i26613 - %tmp.7.i26616 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26612, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26618 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i26618, double* %tmp.7.i26616 - %tmp.0.i26619 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26612, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26621 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26619, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26622 = load double* %tmp.14.i26621 ; [#uses=1] - %tmp.17.i26624 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26619, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26625 = load double* %tmp.17.i26624 ; [#uses=1] - %tmp.4.i26599 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26598, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26601 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i26601, double* %tmp.4.i26599 - %tmp.7.i26602 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26598, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26604 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i26604, double* %tmp.7.i26602 - %tmp.0.i26605 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26598, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i26606 = getelementptr %"struct.std::dcomplex"* %mem_tmp.421, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i26607 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26605, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26608 = load double* %tmp.14.i26607 ; [#uses=1] - store double %tmp.15.i26608, double* %tmp.13.i26606 - %tmp.16.i26609 = getelementptr %"struct.std::dcomplex"* %mem_tmp.421, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i26610 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26605, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26611 = load double* %tmp.17.i26610 ; [#uses=1] - store double %tmp.18.i26611, double* %tmp.16.i26609 - %tmp.4.i26585 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26584, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26622, double* %tmp.4.i26585 - %tmp.7.i26588 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26584, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26625, double* %tmp.7.i26588 - %tmp.0.i26591 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i26584, %"struct.std::dcomplex"* %mem_tmp.421 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26593 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26591, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26594 = load double* %tmp.14.i26593 ; [#uses=1] - %tmp.17.i26596 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26591, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26597 = load double* %tmp.17.i26596 ; [#uses=1] - %tmp.4.i26571 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26570, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26594, double* %tmp.4.i26571 - %tmp.7.i26574 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26570, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26597, double* %tmp.7.i26574 - %tmp.0.i26577 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26570, %"struct.std::dcomplex"* %tmp.1075 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i26578 = getelementptr %"struct.std::dcomplex"* %mem_tmp.418, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i26579 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26577, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26580 = load double* %tmp.14.i26579 ; [#uses=1] - store double %tmp.15.i26580, double* %tmp.13.i26578 - %tmp.16.i26581 = getelementptr %"struct.std::dcomplex"* %mem_tmp.418, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i26582 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26577, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26583 = load double* %tmp.17.i26582 ; [#uses=1] - store double %tmp.18.i26583, double* %tmp.16.i26581 - %tmp.4.i26557 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26556, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26636, double* %tmp.4.i26557 - %tmp.7.i26560 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26556, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26639, double* %tmp.7.i26560 - %tmp.0.i26563 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26556, %"struct.std::dcomplex"* %mem_tmp.418 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26565 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26563, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26566 = load double* %tmp.14.i26565 ; [#uses=1] - %tmp.17.i26568 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26563, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26569 = load double* %tmp.17.i26568 ; [#uses=1] - %tmp.4.i26543 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26542, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26545 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i26545, double* %tmp.4.i26543 - %tmp.7.i26546 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26542, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26548 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i26548, double* %tmp.7.i26546 - %tmp.0.i26549 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26542, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26551 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26549, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26552 = load double* %tmp.14.i26551 ; [#uses=1] - %tmp.17.i26554 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26549, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26555 = load double* %tmp.17.i26554 ; [#uses=1] - %tmp.4.i26529 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26528, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26531 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i26531, double* %tmp.4.i26529 - %tmp.7.i26532 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26528, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26534 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i26534, double* %tmp.7.i26532 - %tmp.0.i26535 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26528, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i26536 = getelementptr %"struct.std::dcomplex"* %mem_tmp.425, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i26537 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26535, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26538 = load double* %tmp.14.i26537 ; [#uses=1] - store double %tmp.15.i26538, double* %tmp.13.i26536 - %tmp.16.i26539 = getelementptr %"struct.std::dcomplex"* %mem_tmp.425, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i26540 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26535, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26541 = load double* %tmp.17.i26540 ; [#uses=1] - store double %tmp.18.i26541, double* %tmp.16.i26539 - %tmp.4.i26515 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26514, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26552, double* %tmp.4.i26515 - %tmp.7.i26518 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26514, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26555, double* %tmp.7.i26518 - %tmp.0.i26521 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i26514, %"struct.std::dcomplex"* %mem_tmp.425 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26523 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26521, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26524 = load double* %tmp.14.i26523 ; [#uses=1] - %tmp.17.i26526 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26521, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26527 = load double* %tmp.17.i26526 ; [#uses=1] - %tmp.4.i26501 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26500, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26524, double* %tmp.4.i26501 - %tmp.7.i26504 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26500, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26527, double* %tmp.7.i26504 - %tmp.0.i26507 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26500, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i26508 = getelementptr %"struct.std::dcomplex"* %mem_tmp.422, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i26509 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26507, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26510 = load double* %tmp.14.i26509 ; [#uses=1] - store double %tmp.15.i26510, double* %tmp.13.i26508 - %tmp.16.i26511 = getelementptr %"struct.std::dcomplex"* %mem_tmp.422, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i26512 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26507, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26513 = load double* %tmp.17.i26512 ; [#uses=1] - store double %tmp.18.i26513, double* %tmp.16.i26511 - %tmp.4.i26487 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26486, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26566, double* %tmp.4.i26487 - %tmp.7.i26490 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26486, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26569, double* %tmp.7.i26490 - %tmp.0.i26493 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26486, %"struct.std::dcomplex"* %mem_tmp.422 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26495 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26493, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26496 = load double* %tmp.14.i26495 ; [#uses=1] - %tmp.17.i26498 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26493, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26499 = load double* %tmp.17.i26498 ; [#uses=1] - store double %tmp.15.i26496, double* %tmp.2.i34364 - store double %tmp.18.i26499, double* %tmp.6.i34365 - %tmp.4.i26453 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26452, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26455 = load double* %tmp.5.i34136 ; [#uses=1] - store double %tmp.6.i26455, double* %tmp.4.i26453 - %tmp.7.i26456 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26452, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26458 = load double* %tmp.8.i34139 ; [#uses=1] - store double %tmp.9.i26458, double* %tmp.7.i26456 - %tmp.0.i26459 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26452, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26461 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26459, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26462 = load double* %tmp.14.i26461 ; [#uses=1] - %tmp.17.i26464 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26459, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26465 = load double* %tmp.17.i26464 ; [#uses=1] - %tmp.7.i26419 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i26433 = add double %tmp.7.i26419, %tmp.15.i26462 ; [#uses=1] - store double %tmp.15.i26433, double* %tmp.2.i34366 - %tmp.26.i26440 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i26451 = add double %tmp.26.i26440, %tmp.18.i26465 ; [#uses=1] - store double %tmp.31.i26451, double* %tmp.6.i34367 - %tmp.4.i26399 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26398, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26401 = load double* %tmp.5.i33272 ; [#uses=1] - store double %tmp.6.i26401, double* %tmp.4.i26399 - %tmp.7.i26402 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26398, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26404 = load double* %tmp.8.i33275 ; [#uses=1] - store double %tmp.9.i26404, double* %tmp.7.i26402 - %tmp.0.i26405 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26398, %"struct.std::dcomplex"* %ret4 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26407 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26405, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26408 = load double* %tmp.14.i26407 ; [#uses=1] - %tmp.17.i26410 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26405, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26411 = load double* %tmp.17.i26410 ; [#uses=1] - %tmp.7.i26365 = load double* %tmp.2.i34368 ; [#uses=1] - %tmp.15.i26379 = add double %tmp.7.i26365, %tmp.15.i26408 ; [#uses=1] - store double %tmp.15.i26379, double* %tmp.2.i34368 - %tmp.26.i26386 = load double* %tmp.6.i34369 ; [#uses=1] - %tmp.31.i26397 = add double %tmp.26.i26386, %tmp.18.i26411 ; [#uses=1] - store double %tmp.31.i26397, double* %tmp.6.i34369 - store double 0.000000e+00, double* %tmp.2.i34366 - store double 0.000000e+00, double* %tmp.6.i34367 - %tmp.4.i26343 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26342, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26345 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i26345, double* %tmp.4.i26343 - %tmp.7.i26346 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26342, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26348 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i26348, double* %tmp.7.i26346 - %tmp.0.i26349 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26342, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26351 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26349, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26352 = load double* %tmp.14.i26351 ; [#uses=1] - %tmp.17.i26354 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26349, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26355 = load double* %tmp.17.i26354 ; [#uses=1] - %tmp.4.i26329 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26328, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26331 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i26331, double* %tmp.4.i26329 - %tmp.7.i26332 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26328, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26334 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i26334, double* %tmp.7.i26332 - %tmp.0.i26335 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26328, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i26336 = getelementptr %"struct.std::dcomplex"* %mem_tmp.433, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i26337 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26335, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26338 = load double* %tmp.14.i26337 ; [#uses=1] - store double %tmp.15.i26338, double* %tmp.13.i26336 - %tmp.16.i26339 = getelementptr %"struct.std::dcomplex"* %mem_tmp.433, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i26340 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26335, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26341 = load double* %tmp.17.i26340 ; [#uses=1] - store double %tmp.18.i26341, double* %tmp.16.i26339 - %tmp.4.i26315 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26314, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26352, double* %tmp.4.i26315 - %tmp.7.i26318 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26314, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26355, double* %tmp.7.i26318 - %tmp.0.i26321 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i26314, %"struct.std::dcomplex"* %mem_tmp.433 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26323 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26321, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26324 = load double* %tmp.14.i26323 ; [#uses=1] - %tmp.17.i26326 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26321, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26327 = load double* %tmp.17.i26326 ; [#uses=1] - %tmp.4.i26301 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26300, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26324, double* %tmp.4.i26301 - %tmp.7.i26304 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26300, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26327, double* %tmp.7.i26304 - %tmp.0.i26307 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26300, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26309 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26307, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26310 = load double* %tmp.14.i26309 ; [#uses=1] - %tmp.17.i26312 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26307, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26313 = load double* %tmp.17.i26312 ; [#uses=1] - %tmp.4.i26287 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26286, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26289 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i26289, double* %tmp.4.i26287 - %tmp.7.i26290 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26286, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26292 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i26292, double* %tmp.7.i26290 - %tmp.0.i26293 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26286, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26295 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26293, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26296 = load double* %tmp.14.i26295 ; [#uses=1] - %tmp.17.i26298 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26293, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26299 = load double* %tmp.17.i26298 ; [#uses=1] - %tmp.4.i26273 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26272, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26275 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i26275, double* %tmp.4.i26273 - %tmp.7.i26276 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26272, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26278 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i26278, double* %tmp.7.i26276 - %tmp.0.i26279 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26272, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i26280 = getelementptr %"struct.std::dcomplex"* %mem_tmp.437, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i26281 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26279, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26282 = load double* %tmp.14.i26281 ; [#uses=1] - store double %tmp.15.i26282, double* %tmp.13.i26280 - %tmp.16.i26283 = getelementptr %"struct.std::dcomplex"* %mem_tmp.437, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i26284 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26279, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26285 = load double* %tmp.17.i26284 ; [#uses=1] - store double %tmp.18.i26285, double* %tmp.16.i26283 - %tmp.4.i26259 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26258, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26296, double* %tmp.4.i26259 - %tmp.7.i26262 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26258, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26299, double* %tmp.7.i26262 - %tmp.0.i26265 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i26258, %"struct.std::dcomplex"* %mem_tmp.437 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26267 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26265, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26268 = load double* %tmp.14.i26267 ; [#uses=1] - %tmp.17.i26270 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26265, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26271 = load double* %tmp.17.i26270 ; [#uses=1] - %tmp.4.i26245 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26244, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26268, double* %tmp.4.i26245 - %tmp.7.i26248 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26244, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26271, double* %tmp.7.i26248 - %tmp.0.i26251 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26244, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i26252 = getelementptr %"struct.std::dcomplex"* %mem_tmp.434, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i26253 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26251, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26254 = load double* %tmp.14.i26253 ; [#uses=1] - store double %tmp.15.i26254, double* %tmp.13.i26252 - %tmp.16.i26255 = getelementptr %"struct.std::dcomplex"* %mem_tmp.434, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i26256 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26251, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26257 = load double* %tmp.17.i26256 ; [#uses=1] - store double %tmp.18.i26257, double* %tmp.16.i26255 - %tmp.4.i26231 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26230, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26310, double* %tmp.4.i26231 - %tmp.7.i26234 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26230, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26313, double* %tmp.7.i26234 - %tmp.0.i26237 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26230, %"struct.std::dcomplex"* %mem_tmp.434 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26239 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26237, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26240 = load double* %tmp.14.i26239 ; [#uses=1] - %tmp.17.i26242 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26237, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26243 = load double* %tmp.17.i26242 ; [#uses=1] - %tmp.4.i26217 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26216, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26219 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i26219, double* %tmp.4.i26217 - %tmp.7.i26220 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26216, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26222 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i26222, double* %tmp.7.i26220 - %tmp.0.i26223 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26216, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26225 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26223, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26226 = load double* %tmp.14.i26225 ; [#uses=1] - %tmp.17.i26228 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26223, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26229 = load double* %tmp.17.i26228 ; [#uses=1] - %tmp.4.i26203 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26202, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26205 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i26205, double* %tmp.4.i26203 - %tmp.7.i26206 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26202, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26208 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i26208, double* %tmp.7.i26206 - %tmp.0.i26209 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26202, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i26210 = getelementptr %"struct.std::dcomplex"* %mem_tmp.441, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i26211 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26209, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26212 = load double* %tmp.14.i26211 ; [#uses=1] - store double %tmp.15.i26212, double* %tmp.13.i26210 - %tmp.16.i26213 = getelementptr %"struct.std::dcomplex"* %mem_tmp.441, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i26214 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26209, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26215 = load double* %tmp.17.i26214 ; [#uses=1] - store double %tmp.18.i26215, double* %tmp.16.i26213 - %tmp.4.i26189 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26188, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26226, double* %tmp.4.i26189 - %tmp.7.i26192 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26188, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26229, double* %tmp.7.i26192 - %tmp.0.i26195 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i26188, %"struct.std::dcomplex"* %mem_tmp.441 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26197 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26195, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26198 = load double* %tmp.14.i26197 ; [#uses=1] - %tmp.17.i26200 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26195, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26201 = load double* %tmp.17.i26200 ; [#uses=1] - %tmp.4.i26175 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26174, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26198, double* %tmp.4.i26175 - %tmp.7.i26178 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26174, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26201, double* %tmp.7.i26178 - %tmp.0.i26181 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26174, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i26182 = getelementptr %"struct.std::dcomplex"* %mem_tmp.438, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i26183 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26181, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26184 = load double* %tmp.14.i26183 ; [#uses=1] - store double %tmp.15.i26184, double* %tmp.13.i26182 - %tmp.16.i26185 = getelementptr %"struct.std::dcomplex"* %mem_tmp.438, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i26186 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26181, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26187 = load double* %tmp.17.i26186 ; [#uses=1] - store double %tmp.18.i26187, double* %tmp.16.i26185 - %tmp.4.i26161 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26160, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26240, double* %tmp.4.i26161 - %tmp.7.i26164 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26160, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26243, double* %tmp.7.i26164 - %tmp.0.i26167 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26160, %"struct.std::dcomplex"* %mem_tmp.438 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26169 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26167, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26170 = load double* %tmp.14.i26169 ; [#uses=1] - %tmp.17.i26172 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26167, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26173 = load double* %tmp.17.i26172 ; [#uses=1] - store double %tmp.15.i26170, double* %tmp.2.i34364 - store double %tmp.18.i26173, double* %tmp.6.i34365 - %tmp.4.i26127 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26126, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26129 = load double* %tmp.5.i34136 ; [#uses=1] - store double %tmp.6.i26129, double* %tmp.4.i26127 - %tmp.7.i26130 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26126, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26132 = load double* %tmp.8.i34139 ; [#uses=1] - store double %tmp.9.i26132, double* %tmp.7.i26130 - %tmp.0.i26133 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26126, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26135 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26133, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26136 = load double* %tmp.14.i26135 ; [#uses=1] - %tmp.17.i26138 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26133, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26139 = load double* %tmp.17.i26138 ; [#uses=1] - %tmp.7.i26093 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i26107 = add double %tmp.7.i26093, %tmp.15.i26136 ; [#uses=1] - store double %tmp.15.i26107, double* %tmp.2.i34366 - %tmp.26.i26114 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i26125 = add double %tmp.26.i26114, %tmp.18.i26139 ; [#uses=1] - store double %tmp.31.i26125, double* %tmp.6.i34367 - %tmp.4.i26073 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26072, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26075 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i26075, double* %tmp.4.i26073 - %tmp.7.i26076 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26072, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26078 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i26078, double* %tmp.7.i26076 - %tmp.0.i26079 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26072, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26081 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26079, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26082 = load double* %tmp.14.i26081 ; [#uses=1] - %tmp.17.i26084 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26079, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26085 = load double* %tmp.17.i26084 ; [#uses=1] - %tmp.4.i26059 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26058, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26061 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i26061, double* %tmp.4.i26059 - %tmp.7.i26062 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26058, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26064 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i26064, double* %tmp.7.i26062 - %tmp.0.i26065 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26058, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i26066 = getelementptr %"struct.std::dcomplex"* %mem_tmp.448, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i26067 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26065, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26068 = load double* %tmp.14.i26067 ; [#uses=1] - store double %tmp.15.i26068, double* %tmp.13.i26066 - %tmp.16.i26069 = getelementptr %"struct.std::dcomplex"* %mem_tmp.448, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i26070 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26065, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26071 = load double* %tmp.17.i26070 ; [#uses=1] - store double %tmp.18.i26071, double* %tmp.16.i26069 - %tmp.4.i26045 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26044, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26082, double* %tmp.4.i26045 - %tmp.7.i26048 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26044, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26085, double* %tmp.7.i26048 - %tmp.0.i26051 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i26044, %"struct.std::dcomplex"* %mem_tmp.448 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26053 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26051, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26054 = load double* %tmp.14.i26053 ; [#uses=1] - %tmp.17.i26056 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26051, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26057 = load double* %tmp.17.i26056 ; [#uses=1] - %tmp.4.i26031 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26030, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26054, double* %tmp.4.i26031 - %tmp.7.i26034 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26030, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26057, double* %tmp.7.i26034 - %tmp.0.i26037 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26030, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26039 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26037, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26040 = load double* %tmp.14.i26039 ; [#uses=1] - %tmp.17.i26042 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26037, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26043 = load double* %tmp.17.i26042 ; [#uses=1] - %tmp.4.i26017 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26016, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26019 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i26019, double* %tmp.4.i26017 - %tmp.7.i26020 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26016, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26022 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i26022, double* %tmp.7.i26020 - %tmp.0.i26023 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26016, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i26025 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26023, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26026 = load double* %tmp.14.i26025 ; [#uses=1] - %tmp.17.i26028 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26023, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26029 = load double* %tmp.17.i26028 ; [#uses=1] - %tmp.4.i26003 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26002, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i26005 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i26005, double* %tmp.4.i26003 - %tmp.7.i26006 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i26002, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i26008 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i26008, double* %tmp.7.i26006 - %tmp.0.i26009 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i26002, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i26010 = getelementptr %"struct.std::dcomplex"* %mem_tmp.452, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i26011 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26009, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i26012 = load double* %tmp.14.i26011 ; [#uses=1] - store double %tmp.15.i26012, double* %tmp.13.i26010 - %tmp.16.i26013 = getelementptr %"struct.std::dcomplex"* %mem_tmp.452, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i26014 = getelementptr %"struct.std::dcomplex"* %tmp.0.i26009, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26015 = load double* %tmp.17.i26014 ; [#uses=1] - store double %tmp.18.i26015, double* %tmp.16.i26013 - %tmp.4.i25989 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25988, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26026, double* %tmp.4.i25989 - %tmp.7.i25992 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25988, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26029, double* %tmp.7.i25992 - %tmp.0.i25995 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i25988, %"struct.std::dcomplex"* %mem_tmp.452 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25997 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25995, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25998 = load double* %tmp.14.i25997 ; [#uses=1] - %tmp.17.i26000 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25995, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i26001 = load double* %tmp.17.i26000 ; [#uses=1] - %tmp.4.i25975 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25974, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25998, double* %tmp.4.i25975 - %tmp.7.i25978 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25974, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26001, double* %tmp.7.i25978 - %tmp.0.i25981 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25974, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25982 = getelementptr %"struct.std::dcomplex"* %mem_tmp.449, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25983 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25981, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25984 = load double* %tmp.14.i25983 ; [#uses=1] - store double %tmp.15.i25984, double* %tmp.13.i25982 - %tmp.16.i25985 = getelementptr %"struct.std::dcomplex"* %mem_tmp.449, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25986 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25981, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25987 = load double* %tmp.17.i25986 ; [#uses=1] - store double %tmp.18.i25987, double* %tmp.16.i25985 - %tmp.4.i25961 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25960, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i26040, double* %tmp.4.i25961 - %tmp.7.i25964 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25960, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i26043, double* %tmp.7.i25964 - %tmp.0.i25967 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25960, %"struct.std::dcomplex"* %mem_tmp.449 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25969 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25967, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25970 = load double* %tmp.14.i25969 ; [#uses=1] - %tmp.17.i25972 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25967, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25973 = load double* %tmp.17.i25972 ; [#uses=1] - %tmp.4.i25947 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25946, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25949 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i25949, double* %tmp.4.i25947 - %tmp.7.i25950 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25946, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25952 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i25952, double* %tmp.7.i25950 - %tmp.0.i25953 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25946, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25955 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25953, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25956 = load double* %tmp.14.i25955 ; [#uses=1] - %tmp.17.i25958 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25953, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25959 = load double* %tmp.17.i25958 ; [#uses=1] - %tmp.4.i25933 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25932, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25935 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i25935, double* %tmp.4.i25933 - %tmp.7.i25936 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25932, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25938 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i25938, double* %tmp.7.i25936 - %tmp.0.i25939 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25932, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25940 = getelementptr %"struct.std::dcomplex"* %mem_tmp.456, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25941 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25939, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25942 = load double* %tmp.14.i25941 ; [#uses=1] - store double %tmp.15.i25942, double* %tmp.13.i25940 - %tmp.16.i25943 = getelementptr %"struct.std::dcomplex"* %mem_tmp.456, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25944 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25939, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25945 = load double* %tmp.17.i25944 ; [#uses=1] - store double %tmp.18.i25945, double* %tmp.16.i25943 - %tmp.4.i25919 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25918, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25956, double* %tmp.4.i25919 - %tmp.7.i25922 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25918, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25959, double* %tmp.7.i25922 - %tmp.0.i25925 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i25918, %"struct.std::dcomplex"* %mem_tmp.456 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25927 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25925, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25928 = load double* %tmp.14.i25927 ; [#uses=1] - %tmp.17.i25930 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25925, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25931 = load double* %tmp.17.i25930 ; [#uses=1] - %tmp.4.i25905 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25904, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25928, double* %tmp.4.i25905 - %tmp.7.i25908 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25904, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25931, double* %tmp.7.i25908 - %tmp.0.i25911 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25904, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25912 = getelementptr %"struct.std::dcomplex"* %mem_tmp.453, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25913 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25911, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25914 = load double* %tmp.14.i25913 ; [#uses=1] - store double %tmp.15.i25914, double* %tmp.13.i25912 - %tmp.16.i25915 = getelementptr %"struct.std::dcomplex"* %mem_tmp.453, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25916 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25911, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25917 = load double* %tmp.17.i25916 ; [#uses=1] - store double %tmp.18.i25917, double* %tmp.16.i25915 - %tmp.4.i25891 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25890, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25970, double* %tmp.4.i25891 - %tmp.7.i25894 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25890, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25973, double* %tmp.7.i25894 - %tmp.0.i25897 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25890, %"struct.std::dcomplex"* %mem_tmp.453 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25899 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25897, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25900 = load double* %tmp.14.i25899 ; [#uses=1] - %tmp.17.i25902 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25897, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25903 = load double* %tmp.17.i25902 ; [#uses=1] - store double %tmp.15.i25900, double* %tmp.2.i34364 - store double %tmp.18.i25903, double* %tmp.6.i34365 - %tmp.4.i25857 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25856, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25859 = load double* %tmp.5.i32460 ; [#uses=1] - store double %tmp.6.i25859, double* %tmp.4.i25857 - %tmp.7.i25860 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25856, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25862 = load double* %tmp.8.i32463 ; [#uses=1] - store double %tmp.9.i25862, double* %tmp.7.i25860 - %tmp.0.i25863 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25856, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25865 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25863, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25866 = load double* %tmp.14.i25865 ; [#uses=1] - %tmp.17.i25868 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25863, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25869 = load double* %tmp.17.i25868 ; [#uses=1] - %tmp.7.i25823 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i25837 = add double %tmp.7.i25823, %tmp.15.i25866 ; [#uses=1] - store double %tmp.15.i25837, double* %tmp.2.i34366 - %tmp.26.i25844 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i25855 = add double %tmp.26.i25844, %tmp.18.i25869 ; [#uses=1] - store double %tmp.31.i25855, double* %tmp.6.i34367 - %tmp.4.i25803 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25802, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25805 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i25805, double* %tmp.4.i25803 - %tmp.7.i25806 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25802, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25808 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i25808, double* %tmp.7.i25806 - %tmp.0.i25809 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25802, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25811 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25809, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25812 = load double* %tmp.14.i25811 ; [#uses=1] - %tmp.17.i25814 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25809, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25815 = load double* %tmp.17.i25814 ; [#uses=1] - %tmp.4.i25789 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25788, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25791 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i25791, double* %tmp.4.i25789 - %tmp.7.i25792 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25788, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25794 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i25794, double* %tmp.7.i25792 - %tmp.0.i25795 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25788, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25796 = getelementptr %"struct.std::dcomplex"* %mem_tmp.463, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25797 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25795, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25798 = load double* %tmp.14.i25797 ; [#uses=1] - store double %tmp.15.i25798, double* %tmp.13.i25796 - %tmp.16.i25799 = getelementptr %"struct.std::dcomplex"* %mem_tmp.463, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25800 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25795, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25801 = load double* %tmp.17.i25800 ; [#uses=1] - store double %tmp.18.i25801, double* %tmp.16.i25799 - %tmp.4.i25775 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25774, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25812, double* %tmp.4.i25775 - %tmp.7.i25778 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25774, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25815, double* %tmp.7.i25778 - %tmp.0.i25781 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i25774, %"struct.std::dcomplex"* %mem_tmp.463 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25783 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25781, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25784 = load double* %tmp.14.i25783 ; [#uses=1] - %tmp.17.i25786 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25781, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25787 = load double* %tmp.17.i25786 ; [#uses=1] - %tmp.4.i25761 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25760, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25784, double* %tmp.4.i25761 - %tmp.7.i25764 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25760, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25787, double* %tmp.7.i25764 - %tmp.0.i25767 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25760, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25769 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25767, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25770 = load double* %tmp.14.i25769 ; [#uses=1] - %tmp.17.i25772 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25767, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25773 = load double* %tmp.17.i25772 ; [#uses=1] - %tmp.4.i25747 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25746, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25749 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i25749, double* %tmp.4.i25747 - %tmp.7.i25750 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25746, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25752 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i25752, double* %tmp.7.i25750 - %tmp.0.i25753 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25746, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25755 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25753, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25756 = load double* %tmp.14.i25755 ; [#uses=1] - %tmp.17.i25758 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25753, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25759 = load double* %tmp.17.i25758 ; [#uses=1] - %tmp.4.i25733 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25732, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25735 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i25735, double* %tmp.4.i25733 - %tmp.7.i25736 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25732, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25738 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i25738, double* %tmp.7.i25736 - %tmp.0.i25739 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25732, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25740 = getelementptr %"struct.std::dcomplex"* %mem_tmp.467, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25741 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25739, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25742 = load double* %tmp.14.i25741 ; [#uses=1] - store double %tmp.15.i25742, double* %tmp.13.i25740 - %tmp.16.i25743 = getelementptr %"struct.std::dcomplex"* %mem_tmp.467, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25744 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25739, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25745 = load double* %tmp.17.i25744 ; [#uses=1] - store double %tmp.18.i25745, double* %tmp.16.i25743 - %tmp.4.i25719 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25718, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25756, double* %tmp.4.i25719 - %tmp.7.i25722 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25718, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25759, double* %tmp.7.i25722 - %tmp.0.i25725 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i25718, %"struct.std::dcomplex"* %mem_tmp.467 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25727 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25725, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25728 = load double* %tmp.14.i25727 ; [#uses=1] - %tmp.17.i25730 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25725, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25731 = load double* %tmp.17.i25730 ; [#uses=1] - %tmp.4.i25705 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25704, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25728, double* %tmp.4.i25705 - %tmp.7.i25708 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25704, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25731, double* %tmp.7.i25708 - %tmp.0.i25711 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25704, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25712 = getelementptr %"struct.std::dcomplex"* %mem_tmp.464, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25713 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25711, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25714 = load double* %tmp.14.i25713 ; [#uses=1] - store double %tmp.15.i25714, double* %tmp.13.i25712 - %tmp.16.i25715 = getelementptr %"struct.std::dcomplex"* %mem_tmp.464, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25716 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25711, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25717 = load double* %tmp.17.i25716 ; [#uses=1] - store double %tmp.18.i25717, double* %tmp.16.i25715 - %tmp.4.i25691 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25690, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25770, double* %tmp.4.i25691 - %tmp.7.i25694 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25690, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25773, double* %tmp.7.i25694 - %tmp.0.i25697 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25690, %"struct.std::dcomplex"* %mem_tmp.464 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25699 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25697, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25700 = load double* %tmp.14.i25699 ; [#uses=1] - %tmp.17.i25702 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25697, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25703 = load double* %tmp.17.i25702 ; [#uses=1] - %tmp.4.i25677 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25676, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25679 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i25679, double* %tmp.4.i25677 - %tmp.7.i25680 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25676, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25682 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i25682, double* %tmp.7.i25680 - %tmp.0.i25683 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25676, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25685 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25683, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25686 = load double* %tmp.14.i25685 ; [#uses=1] - %tmp.17.i25688 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25683, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25689 = load double* %tmp.17.i25688 ; [#uses=1] - %tmp.4.i25663 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25662, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25665 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i25665, double* %tmp.4.i25663 - %tmp.7.i25666 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25662, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25668 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i25668, double* %tmp.7.i25666 - %tmp.0.i25669 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25662, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25670 = getelementptr %"struct.std::dcomplex"* %mem_tmp.471, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25671 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25669, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25672 = load double* %tmp.14.i25671 ; [#uses=1] - store double %tmp.15.i25672, double* %tmp.13.i25670 - %tmp.16.i25673 = getelementptr %"struct.std::dcomplex"* %mem_tmp.471, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25674 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25669, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25675 = load double* %tmp.17.i25674 ; [#uses=1] - store double %tmp.18.i25675, double* %tmp.16.i25673 - %tmp.4.i25649 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25648, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25686, double* %tmp.4.i25649 - %tmp.7.i25652 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25648, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25689, double* %tmp.7.i25652 - %tmp.0.i25655 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i25648, %"struct.std::dcomplex"* %mem_tmp.471 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25657 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25655, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25658 = load double* %tmp.14.i25657 ; [#uses=1] - %tmp.17.i25660 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25655, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25661 = load double* %tmp.17.i25660 ; [#uses=1] - %tmp.4.i25635 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25634, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25658, double* %tmp.4.i25635 - %tmp.7.i25638 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25634, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25661, double* %tmp.7.i25638 - %tmp.0.i25641 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25634, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25642 = getelementptr %"struct.std::dcomplex"* %mem_tmp.468, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25643 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25641, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25644 = load double* %tmp.14.i25643 ; [#uses=1] - store double %tmp.15.i25644, double* %tmp.13.i25642 - %tmp.16.i25645 = getelementptr %"struct.std::dcomplex"* %mem_tmp.468, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25646 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25641, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25647 = load double* %tmp.17.i25646 ; [#uses=1] - store double %tmp.18.i25647, double* %tmp.16.i25645 - %tmp.4.i25621 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25620, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25700, double* %tmp.4.i25621 - %tmp.7.i25624 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25620, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25703, double* %tmp.7.i25624 - %tmp.0.i25627 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25620, %"struct.std::dcomplex"* %mem_tmp.468 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25629 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25627, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25630 = load double* %tmp.14.i25629 ; [#uses=1] - %tmp.17.i25632 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25627, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25633 = load double* %tmp.17.i25632 ; [#uses=1] - store double %tmp.15.i25630, double* %tmp.2.i34364 - store double %tmp.18.i25633, double* %tmp.6.i34365 - %tmp.4.i25587 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25586, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25589 = load double* %tmp.5.i33596 ; [#uses=1] - store double %tmp.6.i25589, double* %tmp.4.i25587 - %tmp.7.i25590 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25586, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25592 = load double* %tmp.8.i33599 ; [#uses=1] - store double %tmp.9.i25592, double* %tmp.7.i25590 - %tmp.0.i25593 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25586, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25595 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25593, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25596 = load double* %tmp.14.i25595 ; [#uses=1] - %tmp.17.i25598 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25593, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25599 = load double* %tmp.17.i25598 ; [#uses=1] - %tmp.7.i25553 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i25567 = add double %tmp.7.i25553, %tmp.15.i25596 ; [#uses=1] - store double %tmp.15.i25567, double* %tmp.2.i34366 - %tmp.26.i25574 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i25585 = add double %tmp.26.i25574, %tmp.18.i25599 ; [#uses=1] - store double %tmp.31.i25585, double* %tmp.6.i34367 - %tmp.4.i25533 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25532, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25535 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i25535, double* %tmp.4.i25533 - %tmp.7.i25536 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25532, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25538 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i25538, double* %tmp.7.i25536 - %tmp.0.i25539 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25532, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25541 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25539, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25542 = load double* %tmp.14.i25541 ; [#uses=1] - %tmp.17.i25544 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25539, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25545 = load double* %tmp.17.i25544 ; [#uses=1] - %tmp.4.i25519 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25518, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25521 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i25521, double* %tmp.4.i25519 - %tmp.7.i25522 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25518, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25524 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i25524, double* %tmp.7.i25522 - %tmp.0.i25525 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25518, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25526 = getelementptr %"struct.std::dcomplex"* %mem_tmp.478, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25527 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25525, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25528 = load double* %tmp.14.i25527 ; [#uses=1] - store double %tmp.15.i25528, double* %tmp.13.i25526 - %tmp.16.i25529 = getelementptr %"struct.std::dcomplex"* %mem_tmp.478, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25530 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25525, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25531 = load double* %tmp.17.i25530 ; [#uses=1] - store double %tmp.18.i25531, double* %tmp.16.i25529 - %tmp.4.i25505 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25504, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25542, double* %tmp.4.i25505 - %tmp.7.i25508 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25504, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25545, double* %tmp.7.i25508 - %tmp.0.i25511 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i25504, %"struct.std::dcomplex"* %mem_tmp.478 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25513 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25511, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25514 = load double* %tmp.14.i25513 ; [#uses=1] - %tmp.17.i25516 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25511, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25517 = load double* %tmp.17.i25516 ; [#uses=1] - %tmp.4.i25491 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25490, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25514, double* %tmp.4.i25491 - %tmp.7.i25494 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25490, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25517, double* %tmp.7.i25494 - %tmp.0.i25497 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25490, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25499 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25497, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25500 = load double* %tmp.14.i25499 ; [#uses=1] - %tmp.17.i25502 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25497, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25503 = load double* %tmp.17.i25502 ; [#uses=1] - %tmp.4.i25477 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25476, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25479 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i25479, double* %tmp.4.i25477 - %tmp.7.i25480 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25476, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25482 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i25482, double* %tmp.7.i25480 - %tmp.0.i25483 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25476, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25485 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25483, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25486 = load double* %tmp.14.i25485 ; [#uses=1] - %tmp.17.i25488 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25483, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25489 = load double* %tmp.17.i25488 ; [#uses=1] - %tmp.4.i25463 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25462, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25465 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i25465, double* %tmp.4.i25463 - %tmp.7.i25466 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25462, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25468 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i25468, double* %tmp.7.i25466 - %tmp.0.i25469 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25462, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25470 = getelementptr %"struct.std::dcomplex"* %mem_tmp.482, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25471 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25469, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25472 = load double* %tmp.14.i25471 ; [#uses=1] - store double %tmp.15.i25472, double* %tmp.13.i25470 - %tmp.16.i25473 = getelementptr %"struct.std::dcomplex"* %mem_tmp.482, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25474 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25469, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25475 = load double* %tmp.17.i25474 ; [#uses=1] - store double %tmp.18.i25475, double* %tmp.16.i25473 - %tmp.4.i25449 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25448, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25486, double* %tmp.4.i25449 - %tmp.7.i25452 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25448, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25489, double* %tmp.7.i25452 - %tmp.0.i25455 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i25448, %"struct.std::dcomplex"* %mem_tmp.482 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25457 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25455, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25458 = load double* %tmp.14.i25457 ; [#uses=1] - %tmp.17.i25460 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25455, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25461 = load double* %tmp.17.i25460 ; [#uses=1] - %tmp.4.i25435 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25434, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25458, double* %tmp.4.i25435 - %tmp.7.i25438 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25434, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25461, double* %tmp.7.i25438 - %tmp.0.i25441 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25434, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25442 = getelementptr %"struct.std::dcomplex"* %mem_tmp.479, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25443 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25441, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25444 = load double* %tmp.14.i25443 ; [#uses=1] - store double %tmp.15.i25444, double* %tmp.13.i25442 - %tmp.16.i25445 = getelementptr %"struct.std::dcomplex"* %mem_tmp.479, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25446 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25441, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25447 = load double* %tmp.17.i25446 ; [#uses=1] - store double %tmp.18.i25447, double* %tmp.16.i25445 - %tmp.4.i25421 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25420, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25500, double* %tmp.4.i25421 - %tmp.7.i25424 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25420, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25503, double* %tmp.7.i25424 - %tmp.0.i25427 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25420, %"struct.std::dcomplex"* %mem_tmp.479 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25429 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25427, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25430 = load double* %tmp.14.i25429 ; [#uses=1] - %tmp.17.i25432 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25427, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25433 = load double* %tmp.17.i25432 ; [#uses=1] - %tmp.4.i25407 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25406, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25409 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i25409, double* %tmp.4.i25407 - %tmp.7.i25410 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25406, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25412 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i25412, double* %tmp.7.i25410 - %tmp.0.i25413 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25406, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25415 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25413, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25416 = load double* %tmp.14.i25415 ; [#uses=1] - %tmp.17.i25418 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25413, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25419 = load double* %tmp.17.i25418 ; [#uses=1] - %tmp.4.i25393 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25392, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25395 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i25395, double* %tmp.4.i25393 - %tmp.7.i25396 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25392, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25398 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i25398, double* %tmp.7.i25396 - %tmp.0.i25399 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25392, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25400 = getelementptr %"struct.std::dcomplex"* %mem_tmp.486, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25401 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25399, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25402 = load double* %tmp.14.i25401 ; [#uses=1] - store double %tmp.15.i25402, double* %tmp.13.i25400 - %tmp.16.i25403 = getelementptr %"struct.std::dcomplex"* %mem_tmp.486, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25404 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25399, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25405 = load double* %tmp.17.i25404 ; [#uses=1] - store double %tmp.18.i25405, double* %tmp.16.i25403 - %tmp.4.i25379 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25378, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25416, double* %tmp.4.i25379 - %tmp.7.i25382 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25378, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25419, double* %tmp.7.i25382 - %tmp.0.i25385 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i25378, %"struct.std::dcomplex"* %mem_tmp.486 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25387 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25385, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25388 = load double* %tmp.14.i25387 ; [#uses=1] - %tmp.17.i25390 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25385, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25391 = load double* %tmp.17.i25390 ; [#uses=1] - %tmp.4.i25365 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25364, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25388, double* %tmp.4.i25365 - %tmp.7.i25368 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25364, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25391, double* %tmp.7.i25368 - %tmp.0.i25371 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25364, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25372 = getelementptr %"struct.std::dcomplex"* %mem_tmp.483, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25373 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25371, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25374 = load double* %tmp.14.i25373 ; [#uses=1] - store double %tmp.15.i25374, double* %tmp.13.i25372 - %tmp.16.i25375 = getelementptr %"struct.std::dcomplex"* %mem_tmp.483, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25376 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25371, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25377 = load double* %tmp.17.i25376 ; [#uses=1] - store double %tmp.18.i25377, double* %tmp.16.i25375 - %tmp.4.i25351 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25350, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25430, double* %tmp.4.i25351 - %tmp.7.i25354 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25350, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25433, double* %tmp.7.i25354 - %tmp.0.i25357 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25350, %"struct.std::dcomplex"* %mem_tmp.483 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25359 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25357, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25360 = load double* %tmp.14.i25359 ; [#uses=1] - %tmp.17.i25362 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25357, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25363 = load double* %tmp.17.i25362 ; [#uses=1] - store double %tmp.15.i25360, double* %tmp.2.i34364 - store double %tmp.18.i25363, double* %tmp.6.i34365 - %tmp.4.i25317 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25316, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25319 = load double* %tmp.5.i33326 ; [#uses=1] - store double %tmp.6.i25319, double* %tmp.4.i25317 - %tmp.7.i25320 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25316, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25322 = load double* %tmp.8.i33329 ; [#uses=1] - store double %tmp.9.i25322, double* %tmp.7.i25320 - %tmp.0.i25323 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25316, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25325 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25323, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25326 = load double* %tmp.14.i25325 ; [#uses=1] - %tmp.17.i25328 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25323, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25329 = load double* %tmp.17.i25328 ; [#uses=1] - %tmp.7.i25283 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i25297 = add double %tmp.7.i25283, %tmp.15.i25326 ; [#uses=1] - store double %tmp.15.i25297, double* %tmp.2.i34366 - %tmp.26.i25304 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i25315 = add double %tmp.26.i25304, %tmp.18.i25329 ; [#uses=1] - store double %tmp.31.i25315, double* %tmp.6.i34367 - %tmp.4.i25263 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25262, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i25264 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 4, i32 5, i32 0, i32 0 ; [#uses=5] - %tmp.6.i25265 = load double* %tmp.5.i25264 ; [#uses=1] - store double %tmp.6.i25265, double* %tmp.4.i25263 - %tmp.7.i25266 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25262, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i25267 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 4, i32 5, i32 0, i32 1 ; [#uses=5] - %tmp.9.i25268 = load double* %tmp.8.i25267 ; [#uses=1] - store double %tmp.9.i25268, double* %tmp.7.i25266 - %tmp.0.i25269 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25262, %"struct.std::dcomplex"* %ret4 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25271 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25269, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25272 = load double* %tmp.14.i25271 ; [#uses=1] - %tmp.17.i25274 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25269, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25275 = load double* %tmp.17.i25274 ; [#uses=1] - %tmp.7.i25229 = load double* %tmp.2.i34368 ; [#uses=1] - %tmp.15.i25243 = add double %tmp.7.i25229, %tmp.15.i25272 ; [#uses=1] - store double %tmp.15.i25243, double* %tmp.2.i34368 - %tmp.26.i25250 = load double* %tmp.6.i34369 ; [#uses=1] - %tmp.31.i25261 = add double %tmp.26.i25250, %tmp.18.i25275 ; [#uses=1] - store double %tmp.31.i25261, double* %tmp.6.i34369 - store double 0.000000e+00, double* %tmp.2.i34366 - store double 0.000000e+00, double* %tmp.6.i34367 - %tmp.4.i25207 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25206, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25209 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i25209, double* %tmp.4.i25207 - %tmp.7.i25210 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25206, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25212 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i25212, double* %tmp.7.i25210 - %tmp.0.i25213 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25206, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25215 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25213, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25216 = load double* %tmp.14.i25215 ; [#uses=1] - %tmp.17.i25218 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25213, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25219 = load double* %tmp.17.i25218 ; [#uses=1] - %tmp.4.i25193 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25192, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25195 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i25195, double* %tmp.4.i25193 - %tmp.7.i25196 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25192, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25198 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i25198, double* %tmp.7.i25196 - %tmp.0.i25199 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25192, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25200 = getelementptr %"struct.std::dcomplex"* %mem_tmp.494, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25201 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25199, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25202 = load double* %tmp.14.i25201 ; [#uses=1] - store double %tmp.15.i25202, double* %tmp.13.i25200 - %tmp.16.i25203 = getelementptr %"struct.std::dcomplex"* %mem_tmp.494, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25204 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25199, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25205 = load double* %tmp.17.i25204 ; [#uses=1] - store double %tmp.18.i25205, double* %tmp.16.i25203 - %tmp.4.i25179 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25178, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25216, double* %tmp.4.i25179 - %tmp.7.i25182 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25178, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25219, double* %tmp.7.i25182 - %tmp.0.i25185 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i25178, %"struct.std::dcomplex"* %mem_tmp.494 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25187 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25185, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25188 = load double* %tmp.14.i25187 ; [#uses=1] - %tmp.17.i25190 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25185, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25191 = load double* %tmp.17.i25190 ; [#uses=1] - %tmp.4.i25165 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25164, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25188, double* %tmp.4.i25165 - %tmp.7.i25168 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25164, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25191, double* %tmp.7.i25168 - %tmp.0.i25171 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25164, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25173 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25171, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25174 = load double* %tmp.14.i25173 ; [#uses=1] - %tmp.17.i25176 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25171, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25177 = load double* %tmp.17.i25176 ; [#uses=1] - %tmp.4.i25151 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25150, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25153 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i25153, double* %tmp.4.i25151 - %tmp.7.i25154 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25150, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25156 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i25156, double* %tmp.7.i25154 - %tmp.0.i25157 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25150, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25159 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25157, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25160 = load double* %tmp.14.i25159 ; [#uses=1] - %tmp.17.i25162 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25157, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25163 = load double* %tmp.17.i25162 ; [#uses=1] - %tmp.4.i25137 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25136, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25139 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i25139, double* %tmp.4.i25137 - %tmp.7.i25140 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25136, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25142 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i25142, double* %tmp.7.i25140 - %tmp.0.i25143 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25136, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25144 = getelementptr %"struct.std::dcomplex"* %mem_tmp.498, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25145 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25143, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25146 = load double* %tmp.14.i25145 ; [#uses=1] - store double %tmp.15.i25146, double* %tmp.13.i25144 - %tmp.16.i25147 = getelementptr %"struct.std::dcomplex"* %mem_tmp.498, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25148 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25143, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25149 = load double* %tmp.17.i25148 ; [#uses=1] - store double %tmp.18.i25149, double* %tmp.16.i25147 - %tmp.4.i25123 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25122, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25160, double* %tmp.4.i25123 - %tmp.7.i25126 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25122, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25163, double* %tmp.7.i25126 - %tmp.0.i25129 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i25122, %"struct.std::dcomplex"* %mem_tmp.498 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25131 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25129, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25132 = load double* %tmp.14.i25131 ; [#uses=1] - %tmp.17.i25134 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25129, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25135 = load double* %tmp.17.i25134 ; [#uses=1] - %tmp.4.i25109 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25108, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25132, double* %tmp.4.i25109 - %tmp.7.i25112 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25108, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25135, double* %tmp.7.i25112 - %tmp.0.i25115 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25108, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25116 = getelementptr %"struct.std::dcomplex"* %mem_tmp.495, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25117 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25115, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25118 = load double* %tmp.14.i25117 ; [#uses=1] - store double %tmp.15.i25118, double* %tmp.13.i25116 - %tmp.16.i25119 = getelementptr %"struct.std::dcomplex"* %mem_tmp.495, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25120 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25115, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25121 = load double* %tmp.17.i25120 ; [#uses=1] - store double %tmp.18.i25121, double* %tmp.16.i25119 - %tmp.4.i25095 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25094, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25174, double* %tmp.4.i25095 - %tmp.7.i25098 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25094, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25177, double* %tmp.7.i25098 - %tmp.0.i25101 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25094, %"struct.std::dcomplex"* %mem_tmp.495 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25103 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25101, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25104 = load double* %tmp.14.i25103 ; [#uses=1] - %tmp.17.i25106 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25101, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25107 = load double* %tmp.17.i25106 ; [#uses=1] - %tmp.4.i25081 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25080, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25083 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i25083, double* %tmp.4.i25081 - %tmp.7.i25084 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25080, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25086 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i25086, double* %tmp.7.i25084 - %tmp.0.i25087 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25080, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25089 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25087, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25090 = load double* %tmp.14.i25089 ; [#uses=1] - %tmp.17.i25092 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25087, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25093 = load double* %tmp.17.i25092 ; [#uses=1] - %tmp.4.i25067 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25066, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i25069 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i25069, double* %tmp.4.i25067 - %tmp.7.i25070 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25066, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i25072 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i25072, double* %tmp.7.i25070 - %tmp.0.i25073 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25066, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25074 = getelementptr %"struct.std::dcomplex"* %mem_tmp.502, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25075 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25073, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25076 = load double* %tmp.14.i25075 ; [#uses=1] - store double %tmp.15.i25076, double* %tmp.13.i25074 - %tmp.16.i25077 = getelementptr %"struct.std::dcomplex"* %mem_tmp.502, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25078 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25073, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25079 = load double* %tmp.17.i25078 ; [#uses=1] - store double %tmp.18.i25079, double* %tmp.16.i25077 - %tmp.4.i25053 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25052, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25090, double* %tmp.4.i25053 - %tmp.7.i25056 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25052, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25093, double* %tmp.7.i25056 - %tmp.0.i25059 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i25052, %"struct.std::dcomplex"* %mem_tmp.502 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25061 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25059, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25062 = load double* %tmp.14.i25061 ; [#uses=1] - %tmp.17.i25064 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25059, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25065 = load double* %tmp.17.i25064 ; [#uses=1] - %tmp.4.i25039 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25038, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25062, double* %tmp.4.i25039 - %tmp.7.i25042 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25038, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25065, double* %tmp.7.i25042 - %tmp.0.i25045 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25038, %"struct.std::dcomplex"* %tmp.1075 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i25046 = getelementptr %"struct.std::dcomplex"* %mem_tmp.499, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i25047 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25045, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25048 = load double* %tmp.14.i25047 ; [#uses=1] - store double %tmp.15.i25048, double* %tmp.13.i25046 - %tmp.16.i25049 = getelementptr %"struct.std::dcomplex"* %mem_tmp.499, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i25050 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25045, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25051 = load double* %tmp.17.i25050 ; [#uses=1] - store double %tmp.18.i25051, double* %tmp.16.i25049 - %tmp.4.i25025 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25024, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i25104, double* %tmp.4.i25025 - %tmp.7.i25028 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i25024, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i25107, double* %tmp.7.i25028 - %tmp.0.i25031 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i25024, %"struct.std::dcomplex"* %mem_tmp.499 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i25033 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25031, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25034 = load double* %tmp.14.i25033 ; [#uses=1] - %tmp.17.i25036 = getelementptr %"struct.std::dcomplex"* %tmp.0.i25031, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25037 = load double* %tmp.17.i25036 ; [#uses=1] - store double %tmp.15.i25034, double* %tmp.2.i34364 - store double %tmp.18.i25037, double* %tmp.6.i34365 - %tmp.4.i24991 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24990, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24993 = load double* %tmp.5.i33326 ; [#uses=1] - store double %tmp.6.i24993, double* %tmp.4.i24991 - %tmp.7.i24994 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24990, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24996 = load double* %tmp.8.i33329 ; [#uses=1] - store double %tmp.9.i24996, double* %tmp.7.i24994 - %tmp.0.i24997 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24990, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24999 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24997, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i25000 = load double* %tmp.14.i24999 ; [#uses=1] - %tmp.17.i25002 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24997, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i25003 = load double* %tmp.17.i25002 ; [#uses=1] - %tmp.7.i24957 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i24971 = add double %tmp.7.i24957, %tmp.15.i25000 ; [#uses=1] - store double %tmp.15.i24971, double* %tmp.2.i34366 - %tmp.26.i24978 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i24989 = add double %tmp.26.i24978, %tmp.18.i25003 ; [#uses=1] - store double %tmp.31.i24989, double* %tmp.6.i34367 - %tmp.4.i24937 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24936, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24939 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i24939, double* %tmp.4.i24937 - %tmp.7.i24940 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24936, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24942 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i24942, double* %tmp.7.i24940 - %tmp.0.i24943 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24936, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24945 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24943, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24946 = load double* %tmp.14.i24945 ; [#uses=1] - %tmp.17.i24948 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24943, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24949 = load double* %tmp.17.i24948 ; [#uses=1] - %tmp.4.i24923 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24922, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24925 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i24925, double* %tmp.4.i24923 - %tmp.7.i24926 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24922, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24928 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i24928, double* %tmp.7.i24926 - %tmp.0.i24929 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24922, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i24930 = getelementptr %"struct.std::dcomplex"* %mem_tmp.509, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i24931 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24929, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24932 = load double* %tmp.14.i24931 ; [#uses=1] - store double %tmp.15.i24932, double* %tmp.13.i24930 - %tmp.16.i24933 = getelementptr %"struct.std::dcomplex"* %mem_tmp.509, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i24934 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24929, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24935 = load double* %tmp.17.i24934 ; [#uses=1] - store double %tmp.18.i24935, double* %tmp.16.i24933 - %tmp.4.i24909 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24908, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24946, double* %tmp.4.i24909 - %tmp.7.i24912 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24908, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24949, double* %tmp.7.i24912 - %tmp.0.i24915 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i24908, %"struct.std::dcomplex"* %mem_tmp.509 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24917 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24915, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24918 = load double* %tmp.14.i24917 ; [#uses=1] - %tmp.17.i24920 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24915, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24921 = load double* %tmp.17.i24920 ; [#uses=1] - %tmp.4.i24895 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24894, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24918, double* %tmp.4.i24895 - %tmp.7.i24898 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24894, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24921, double* %tmp.7.i24898 - %tmp.0.i24901 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24894, %"struct.std::dcomplex"* %tmp.1075 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24903 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24901, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24904 = load double* %tmp.14.i24903 ; [#uses=1] - %tmp.17.i24906 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24901, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24907 = load double* %tmp.17.i24906 ; [#uses=1] - %tmp.4.i24881 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24880, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24883 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i24883, double* %tmp.4.i24881 - %tmp.7.i24884 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24880, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24886 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i24886, double* %tmp.7.i24884 - %tmp.0.i24887 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24880, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24889 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24887, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24890 = load double* %tmp.14.i24889 ; [#uses=1] - %tmp.17.i24892 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24887, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24893 = load double* %tmp.17.i24892 ; [#uses=1] - %tmp.4.i24867 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24866, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24869 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i24869, double* %tmp.4.i24867 - %tmp.7.i24870 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24866, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24872 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i24872, double* %tmp.7.i24870 - %tmp.0.i24873 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24866, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i24874 = getelementptr %"struct.std::dcomplex"* %mem_tmp.513, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i24875 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24873, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24876 = load double* %tmp.14.i24875 ; [#uses=1] - store double %tmp.15.i24876, double* %tmp.13.i24874 - %tmp.16.i24877 = getelementptr %"struct.std::dcomplex"* %mem_tmp.513, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i24878 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24873, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24879 = load double* %tmp.17.i24878 ; [#uses=1] - store double %tmp.18.i24879, double* %tmp.16.i24877 - %tmp.4.i24853 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24852, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24890, double* %tmp.4.i24853 - %tmp.7.i24856 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24852, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24893, double* %tmp.7.i24856 - %tmp.0.i24859 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i24852, %"struct.std::dcomplex"* %mem_tmp.513 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24861 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24859, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24862 = load double* %tmp.14.i24861 ; [#uses=1] - %tmp.17.i24864 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24859, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24865 = load double* %tmp.17.i24864 ; [#uses=1] - %tmp.4.i24839 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24838, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24862, double* %tmp.4.i24839 - %tmp.7.i24842 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24838, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24865, double* %tmp.7.i24842 - %tmp.0.i24845 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24838, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i24846 = getelementptr %"struct.std::dcomplex"* %mem_tmp.510, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i24847 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24845, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24848 = load double* %tmp.14.i24847 ; [#uses=1] - store double %tmp.15.i24848, double* %tmp.13.i24846 - %tmp.16.i24849 = getelementptr %"struct.std::dcomplex"* %mem_tmp.510, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i24850 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24845, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24851 = load double* %tmp.17.i24850 ; [#uses=1] - store double %tmp.18.i24851, double* %tmp.16.i24849 - %tmp.4.i24825 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24824, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24904, double* %tmp.4.i24825 - %tmp.7.i24828 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24824, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24907, double* %tmp.7.i24828 - %tmp.0.i24831 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24824, %"struct.std::dcomplex"* %mem_tmp.510 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24833 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24831, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24834 = load double* %tmp.14.i24833 ; [#uses=1] - %tmp.17.i24836 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24831, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24837 = load double* %tmp.17.i24836 ; [#uses=1] - %tmp.4.i24811 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24810, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24813 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i24813, double* %tmp.4.i24811 - %tmp.7.i24814 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24810, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24816 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i24816, double* %tmp.7.i24814 - %tmp.0.i24817 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24810, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24819 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24817, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24820 = load double* %tmp.14.i24819 ; [#uses=1] - %tmp.17.i24822 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24817, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24823 = load double* %tmp.17.i24822 ; [#uses=1] - %tmp.4.i24797 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24796, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24799 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i24799, double* %tmp.4.i24797 - %tmp.7.i24800 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24796, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24802 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i24802, double* %tmp.7.i24800 - %tmp.0.i24803 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24796, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i24804 = getelementptr %"struct.std::dcomplex"* %mem_tmp.517, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i24805 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24803, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24806 = load double* %tmp.14.i24805 ; [#uses=1] - store double %tmp.15.i24806, double* %tmp.13.i24804 - %tmp.16.i24807 = getelementptr %"struct.std::dcomplex"* %mem_tmp.517, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i24808 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24803, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24809 = load double* %tmp.17.i24808 ; [#uses=1] - store double %tmp.18.i24809, double* %tmp.16.i24807 - %tmp.4.i24783 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24782, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24820, double* %tmp.4.i24783 - %tmp.7.i24786 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24782, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24823, double* %tmp.7.i24786 - %tmp.0.i24789 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i24782, %"struct.std::dcomplex"* %mem_tmp.517 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24791 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24789, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24792 = load double* %tmp.14.i24791 ; [#uses=1] - %tmp.17.i24794 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24789, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24795 = load double* %tmp.17.i24794 ; [#uses=1] - %tmp.4.i24769 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24768, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24792, double* %tmp.4.i24769 - %tmp.7.i24772 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24768, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24795, double* %tmp.7.i24772 - %tmp.0.i24775 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24768, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i24776 = getelementptr %"struct.std::dcomplex"* %mem_tmp.514, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i24777 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24775, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24778 = load double* %tmp.14.i24777 ; [#uses=1] - store double %tmp.15.i24778, double* %tmp.13.i24776 - %tmp.16.i24779 = getelementptr %"struct.std::dcomplex"* %mem_tmp.514, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i24780 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24775, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24781 = load double* %tmp.17.i24780 ; [#uses=1] - store double %tmp.18.i24781, double* %tmp.16.i24779 - %tmp.4.i24755 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24754, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24834, double* %tmp.4.i24755 - %tmp.7.i24758 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24754, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24837, double* %tmp.7.i24758 - %tmp.0.i24761 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24754, %"struct.std::dcomplex"* %mem_tmp.514 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24763 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24761, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24764 = load double* %tmp.14.i24763 ; [#uses=1] - %tmp.17.i24766 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24761, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24767 = load double* %tmp.17.i24766 ; [#uses=1] - store double %tmp.15.i24764, double* %tmp.2.i34364 - store double %tmp.18.i24767, double* %tmp.6.i34365 - %tmp.4.i24721 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24720, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24723 = load double* %tmp.5.i34136 ; [#uses=1] - store double %tmp.6.i24723, double* %tmp.4.i24721 - %tmp.7.i24724 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24720, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24726 = load double* %tmp.8.i34139 ; [#uses=1] - store double %tmp.9.i24726, double* %tmp.7.i24724 - %tmp.0.i24727 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24720, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24729 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24727, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24730 = load double* %tmp.14.i24729 ; [#uses=1] - %tmp.17.i24732 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24727, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24733 = load double* %tmp.17.i24732 ; [#uses=1] - %tmp.7.i24687 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i24701 = add double %tmp.7.i24687, %tmp.15.i24730 ; [#uses=1] - store double %tmp.15.i24701, double* %tmp.2.i34366 - %tmp.26.i24708 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i24719 = add double %tmp.26.i24708, %tmp.18.i24733 ; [#uses=1] - store double %tmp.31.i24719, double* %tmp.6.i34367 - %tmp.4.i24667 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24666, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24669 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i24669, double* %tmp.4.i24667 - %tmp.7.i24670 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24666, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24672 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i24672, double* %tmp.7.i24670 - %tmp.0.i24673 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24666, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24675 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24673, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24676 = load double* %tmp.14.i24675 ; [#uses=1] - %tmp.17.i24678 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24673, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24679 = load double* %tmp.17.i24678 ; [#uses=1] - %tmp.4.i24653 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24652, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24655 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i24655, double* %tmp.4.i24653 - %tmp.7.i24656 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24652, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24658 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i24658, double* %tmp.7.i24656 - %tmp.0.i24659 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24652, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i24660 = getelementptr %"struct.std::dcomplex"* %mem_tmp.524, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i24661 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24659, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24662 = load double* %tmp.14.i24661 ; [#uses=1] - store double %tmp.15.i24662, double* %tmp.13.i24660 - %tmp.16.i24663 = getelementptr %"struct.std::dcomplex"* %mem_tmp.524, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i24664 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24659, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24665 = load double* %tmp.17.i24664 ; [#uses=1] - store double %tmp.18.i24665, double* %tmp.16.i24663 - %tmp.4.i24639 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24638, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24676, double* %tmp.4.i24639 - %tmp.7.i24642 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24638, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24679, double* %tmp.7.i24642 - %tmp.0.i24645 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i24638, %"struct.std::dcomplex"* %mem_tmp.524 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24647 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24645, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24648 = load double* %tmp.14.i24647 ; [#uses=1] - %tmp.17.i24650 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24645, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24651 = load double* %tmp.17.i24650 ; [#uses=1] - %tmp.4.i24625 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24624, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24648, double* %tmp.4.i24625 - %tmp.7.i24628 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24624, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24651, double* %tmp.7.i24628 - %tmp.0.i24631 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24624, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24633 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24631, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24634 = load double* %tmp.14.i24633 ; [#uses=1] - %tmp.17.i24636 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24631, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24637 = load double* %tmp.17.i24636 ; [#uses=1] - %tmp.4.i24611 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24610, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24613 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i24613, double* %tmp.4.i24611 - %tmp.7.i24614 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24610, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24616 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i24616, double* %tmp.7.i24614 - %tmp.0.i24617 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24610, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24619 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24617, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24620 = load double* %tmp.14.i24619 ; [#uses=1] - %tmp.17.i24622 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24617, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24623 = load double* %tmp.17.i24622 ; [#uses=1] - %tmp.4.i24597 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24596, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24599 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i24599, double* %tmp.4.i24597 - %tmp.7.i24600 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24596, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24602 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i24602, double* %tmp.7.i24600 - %tmp.0.i24603 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24596, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i24604 = getelementptr %"struct.std::dcomplex"* %mem_tmp.528, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i24605 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24603, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24606 = load double* %tmp.14.i24605 ; [#uses=1] - store double %tmp.15.i24606, double* %tmp.13.i24604 - %tmp.16.i24607 = getelementptr %"struct.std::dcomplex"* %mem_tmp.528, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i24608 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24603, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24609 = load double* %tmp.17.i24608 ; [#uses=1] - store double %tmp.18.i24609, double* %tmp.16.i24607 - %tmp.4.i24583 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24582, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24620, double* %tmp.4.i24583 - %tmp.7.i24586 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24582, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24623, double* %tmp.7.i24586 - %tmp.0.i24589 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i24582, %"struct.std::dcomplex"* %mem_tmp.528 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24591 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24589, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24592 = load double* %tmp.14.i24591 ; [#uses=1] - %tmp.17.i24594 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24589, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24595 = load double* %tmp.17.i24594 ; [#uses=1] - %tmp.4.i24569 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24568, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24592, double* %tmp.4.i24569 - %tmp.7.i24572 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24568, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24595, double* %tmp.7.i24572 - %tmp.0.i24575 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24568, %"struct.std::dcomplex"* %tmp.1075 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i24576 = getelementptr %"struct.std::dcomplex"* %mem_tmp.525, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i24577 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24575, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24578 = load double* %tmp.14.i24577 ; [#uses=1] - store double %tmp.15.i24578, double* %tmp.13.i24576 - %tmp.16.i24579 = getelementptr %"struct.std::dcomplex"* %mem_tmp.525, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i24580 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24575, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24581 = load double* %tmp.17.i24580 ; [#uses=1] - store double %tmp.18.i24581, double* %tmp.16.i24579 - %tmp.4.i24555 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24554, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24634, double* %tmp.4.i24555 - %tmp.7.i24558 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24554, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24637, double* %tmp.7.i24558 - %tmp.0.i24561 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24554, %"struct.std::dcomplex"* %mem_tmp.525 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24563 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24561, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24564 = load double* %tmp.14.i24563 ; [#uses=1] - %tmp.17.i24566 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24561, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24567 = load double* %tmp.17.i24566 ; [#uses=1] - %tmp.4.i24541 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24540, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24543 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i24543, double* %tmp.4.i24541 - %tmp.7.i24544 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24540, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24546 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i24546, double* %tmp.7.i24544 - %tmp.0.i24547 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24540, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24549 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24547, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24550 = load double* %tmp.14.i24549 ; [#uses=1] - %tmp.17.i24552 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24547, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24553 = load double* %tmp.17.i24552 ; [#uses=1] - %tmp.4.i24527 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24526, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24529 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i24529, double* %tmp.4.i24527 - %tmp.7.i24530 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24526, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24532 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i24532, double* %tmp.7.i24530 - %tmp.0.i24533 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24526, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i24534 = getelementptr %"struct.std::dcomplex"* %mem_tmp.532, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i24535 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24533, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24536 = load double* %tmp.14.i24535 ; [#uses=1] - store double %tmp.15.i24536, double* %tmp.13.i24534 - %tmp.16.i24537 = getelementptr %"struct.std::dcomplex"* %mem_tmp.532, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i24538 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24533, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24539 = load double* %tmp.17.i24538 ; [#uses=1] - store double %tmp.18.i24539, double* %tmp.16.i24537 - %tmp.4.i24513 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24512, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24550, double* %tmp.4.i24513 - %tmp.7.i24516 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24512, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24553, double* %tmp.7.i24516 - %tmp.0.i24519 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i24512, %"struct.std::dcomplex"* %mem_tmp.532 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24521 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24519, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24522 = load double* %tmp.14.i24521 ; [#uses=1] - %tmp.17.i24524 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24519, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24525 = load double* %tmp.17.i24524 ; [#uses=1] - %tmp.4.i24499 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24498, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24522, double* %tmp.4.i24499 - %tmp.7.i24502 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24498, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24525, double* %tmp.7.i24502 - %tmp.0.i24505 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24498, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i24506 = getelementptr %"struct.std::dcomplex"* %mem_tmp.529, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i24507 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24505, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24508 = load double* %tmp.14.i24507 ; [#uses=1] - store double %tmp.15.i24508, double* %tmp.13.i24506 - %tmp.16.i24509 = getelementptr %"struct.std::dcomplex"* %mem_tmp.529, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i24510 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24505, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24511 = load double* %tmp.17.i24510 ; [#uses=1] - store double %tmp.18.i24511, double* %tmp.16.i24509 - %tmp.4.i24485 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24484, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24564, double* %tmp.4.i24485 - %tmp.7.i24488 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24484, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24567, double* %tmp.7.i24488 - %tmp.0.i24491 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24484, %"struct.std::dcomplex"* %mem_tmp.529 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24493 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24491, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24494 = load double* %tmp.14.i24493 ; [#uses=1] - %tmp.17.i24496 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24491, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24497 = load double* %tmp.17.i24496 ; [#uses=1] - store double %tmp.15.i24494, double* %tmp.2.i34364 - store double %tmp.18.i24497, double* %tmp.6.i34365 - %tmp.4.i24451 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24450, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24453 = load double* %tmp.5.i32460 ; [#uses=1] - store double %tmp.6.i24453, double* %tmp.4.i24451 - %tmp.7.i24454 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24450, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24456 = load double* %tmp.8.i32463 ; [#uses=1] - store double %tmp.9.i24456, double* %tmp.7.i24454 - %tmp.0.i24457 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24450, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24459 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24457, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24460 = load double* %tmp.14.i24459 ; [#uses=1] - %tmp.17.i24462 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24457, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24463 = load double* %tmp.17.i24462 ; [#uses=1] - %tmp.7.i24417 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i24431 = add double %tmp.7.i24417, %tmp.15.i24460 ; [#uses=1] - store double %tmp.15.i24431, double* %tmp.2.i34366 - %tmp.26.i24438 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i24449 = add double %tmp.26.i24438, %tmp.18.i24463 ; [#uses=1] - store double %tmp.31.i24449, double* %tmp.6.i34367 - %tmp.4.i24397 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24396, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24399 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i24399, double* %tmp.4.i24397 - %tmp.7.i24400 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24396, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24402 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i24402, double* %tmp.7.i24400 - %tmp.0.i24403 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24396, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24405 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24403, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24406 = load double* %tmp.14.i24405 ; [#uses=1] - %tmp.17.i24408 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24403, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24409 = load double* %tmp.17.i24408 ; [#uses=1] - %tmp.4.i24383 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24382, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24385 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i24385, double* %tmp.4.i24383 - %tmp.7.i24386 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24382, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24388 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i24388, double* %tmp.7.i24386 - %tmp.0.i24389 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24382, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i24390 = getelementptr %"struct.std::dcomplex"* %mem_tmp.539, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i24391 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24389, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24392 = load double* %tmp.14.i24391 ; [#uses=1] - store double %tmp.15.i24392, double* %tmp.13.i24390 - %tmp.16.i24393 = getelementptr %"struct.std::dcomplex"* %mem_tmp.539, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i24394 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24389, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24395 = load double* %tmp.17.i24394 ; [#uses=1] - store double %tmp.18.i24395, double* %tmp.16.i24393 - %tmp.4.i24369 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24368, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24406, double* %tmp.4.i24369 - %tmp.7.i24372 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24368, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24409, double* %tmp.7.i24372 - %tmp.0.i24375 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i24368, %"struct.std::dcomplex"* %mem_tmp.539 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24377 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24375, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24378 = load double* %tmp.14.i24377 ; [#uses=1] - %tmp.17.i24380 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24375, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24381 = load double* %tmp.17.i24380 ; [#uses=1] - %tmp.4.i24355 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24354, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24378, double* %tmp.4.i24355 - %tmp.7.i24358 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24354, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24381, double* %tmp.7.i24358 - %tmp.0.i24361 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24354, %"struct.std::dcomplex"* %tmp.15 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24363 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24361, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24364 = load double* %tmp.14.i24363 ; [#uses=1] - %tmp.17.i24366 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24361, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24367 = load double* %tmp.17.i24366 ; [#uses=1] - %tmp.4.i24341 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24340, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24343 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i24343, double* %tmp.4.i24341 - %tmp.7.i24344 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24340, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24346 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i24346, double* %tmp.7.i24344 - %tmp.0.i24347 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24340, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24349 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24347, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24350 = load double* %tmp.14.i24349 ; [#uses=1] - %tmp.17.i24352 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24347, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24353 = load double* %tmp.17.i24352 ; [#uses=1] - %tmp.4.i24327 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24326, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24329 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i24329, double* %tmp.4.i24327 - %tmp.7.i24330 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24326, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24332 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i24332, double* %tmp.7.i24330 - %tmp.0.i24333 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24326, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i24334 = getelementptr %"struct.std::dcomplex"* %mem_tmp.543, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i24335 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24333, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24336 = load double* %tmp.14.i24335 ; [#uses=1] - store double %tmp.15.i24336, double* %tmp.13.i24334 - %tmp.16.i24337 = getelementptr %"struct.std::dcomplex"* %mem_tmp.543, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i24338 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24333, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24339 = load double* %tmp.17.i24338 ; [#uses=1] - store double %tmp.18.i24339, double* %tmp.16.i24337 - %tmp.4.i24313 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24312, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24350, double* %tmp.4.i24313 - %tmp.7.i24316 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24312, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24353, double* %tmp.7.i24316 - %tmp.0.i24319 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i24312, %"struct.std::dcomplex"* %mem_tmp.543 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24321 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24319, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24322 = load double* %tmp.14.i24321 ; [#uses=1] - %tmp.17.i24324 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24319, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24325 = load double* %tmp.17.i24324 ; [#uses=1] - %tmp.4.i24299 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24298, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24322, double* %tmp.4.i24299 - %tmp.7.i24302 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24298, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24325, double* %tmp.7.i24302 - %tmp.0.i24305 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24298, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i24306 = getelementptr %"struct.std::dcomplex"* %mem_tmp.540, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i24307 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24305, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24308 = load double* %tmp.14.i24307 ; [#uses=1] - store double %tmp.15.i24308, double* %tmp.13.i24306 - %tmp.16.i24309 = getelementptr %"struct.std::dcomplex"* %mem_tmp.540, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i24310 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24305, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24311 = load double* %tmp.17.i24310 ; [#uses=1] - store double %tmp.18.i24311, double* %tmp.16.i24309 - %tmp.4.i24285 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24284, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24364, double* %tmp.4.i24285 - %tmp.7.i24288 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24284, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24367, double* %tmp.7.i24288 - %tmp.0.i24291 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24284, %"struct.std::dcomplex"* %mem_tmp.540 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24293 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24291, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24294 = load double* %tmp.14.i24293 ; [#uses=1] - %tmp.17.i24296 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24291, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24297 = load double* %tmp.17.i24296 ; [#uses=1] - %tmp.4.i24271 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24270, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24273 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i24273, double* %tmp.4.i24271 - %tmp.7.i24274 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24270, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24276 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i24276, double* %tmp.7.i24274 - %tmp.0.i24277 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24270, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24279 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24277, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24280 = load double* %tmp.14.i24279 ; [#uses=1] - %tmp.17.i24282 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24277, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24283 = load double* %tmp.17.i24282 ; [#uses=1] - %tmp.4.i24257 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24256, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24259 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i24259, double* %tmp.4.i24257 - %tmp.7.i24260 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24256, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24262 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i24262, double* %tmp.7.i24260 - %tmp.0.i24263 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24256, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i24264 = getelementptr %"struct.std::dcomplex"* %mem_tmp.547, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i24265 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24263, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24266 = load double* %tmp.14.i24265 ; [#uses=1] - store double %tmp.15.i24266, double* %tmp.13.i24264 - %tmp.16.i24267 = getelementptr %"struct.std::dcomplex"* %mem_tmp.547, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i24268 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24263, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24269 = load double* %tmp.17.i24268 ; [#uses=1] - store double %tmp.18.i24269, double* %tmp.16.i24267 - %tmp.4.i24243 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24242, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24280, double* %tmp.4.i24243 - %tmp.7.i24246 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24242, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24283, double* %tmp.7.i24246 - %tmp.0.i24249 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i24242, %"struct.std::dcomplex"* %mem_tmp.547 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24251 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24249, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24252 = load double* %tmp.14.i24251 ; [#uses=1] - %tmp.17.i24254 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24249, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24255 = load double* %tmp.17.i24254 ; [#uses=1] - %tmp.4.i24229 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24228, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24252, double* %tmp.4.i24229 - %tmp.7.i24232 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24228, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24255, double* %tmp.7.i24232 - %tmp.0.i24235 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24228, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i24236 = getelementptr %"struct.std::dcomplex"* %mem_tmp.544, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i24237 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24235, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24238 = load double* %tmp.14.i24237 ; [#uses=1] - store double %tmp.15.i24238, double* %tmp.13.i24236 - %tmp.16.i24239 = getelementptr %"struct.std::dcomplex"* %mem_tmp.544, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i24240 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24235, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24241 = load double* %tmp.17.i24240 ; [#uses=1] - store double %tmp.18.i24241, double* %tmp.16.i24239 - %tmp.4.i24215 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24214, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24294, double* %tmp.4.i24215 - %tmp.7.i24218 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24214, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24297, double* %tmp.7.i24218 - %tmp.0.i24221 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24214, %"struct.std::dcomplex"* %mem_tmp.544 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24223 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24221, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24224 = load double* %tmp.14.i24223 ; [#uses=1] - %tmp.17.i24226 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24221, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24227 = load double* %tmp.17.i24226 ; [#uses=1] - store double %tmp.15.i24224, double* %tmp.2.i34364 - store double %tmp.18.i24227, double* %tmp.6.i34365 - %tmp.4.i24181 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24180, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24183 = load double* %tmp.5.i27590 ; [#uses=1] - store double %tmp.6.i24183, double* %tmp.4.i24181 - %tmp.7.i24184 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24180, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24186 = load double* %tmp.8.i27593 ; [#uses=1] - store double %tmp.9.i24186, double* %tmp.7.i24184 - %tmp.0.i24187 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24180, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24189 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24187, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24190 = load double* %tmp.14.i24189 ; [#uses=1] - %tmp.17.i24192 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24187, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24193 = load double* %tmp.17.i24192 ; [#uses=1] - %tmp.7.i24147 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i24161 = add double %tmp.7.i24147, %tmp.15.i24190 ; [#uses=1] - store double %tmp.15.i24161, double* %tmp.2.i34366 - %tmp.26.i24168 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i24179 = add double %tmp.26.i24168, %tmp.18.i24193 ; [#uses=1] - store double %tmp.31.i24179, double* %tmp.6.i34367 - %tmp.4.i24127 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24126, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24129 = load double* %tmp.5.i31000 ; [#uses=1] - store double %tmp.6.i24129, double* %tmp.4.i24127 - %tmp.7.i24130 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24126, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24132 = load double* %tmp.8.i31003 ; [#uses=1] - store double %tmp.9.i24132, double* %tmp.7.i24130 - %tmp.0.i24133 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24126, %"struct.std::dcomplex"* %ret4 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24135 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24133, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24136 = load double* %tmp.14.i24135 ; [#uses=1] - %tmp.17.i24138 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24133, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24139 = load double* %tmp.17.i24138 ; [#uses=1] - %tmp.7.i24093 = load double* %tmp.2.i34368 ; [#uses=1] - %tmp.15.i24107 = add double %tmp.7.i24093, %tmp.15.i24136 ; [#uses=1] - store double %tmp.15.i24107, double* %tmp.2.i34368 - %tmp.26.i24114 = load double* %tmp.6.i34369 ; [#uses=1] - %tmp.31.i24125 = add double %tmp.26.i24114, %tmp.18.i24139 ; [#uses=1] - store double %tmp.31.i24125, double* %tmp.6.i34369 - store double 0.000000e+00, double* %tmp.2.i34366 - store double 0.000000e+00, double* %tmp.6.i34367 - %tmp.4.i24071 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24070, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24073 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i24073, double* %tmp.4.i24071 - %tmp.7.i24074 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24070, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24076 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i24076, double* %tmp.7.i24074 - %tmp.0.i24077 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24070, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24079 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24077, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24080 = load double* %tmp.14.i24079 ; [#uses=1] - %tmp.17.i24082 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24077, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24083 = load double* %tmp.17.i24082 ; [#uses=1] - %tmp.4.i24057 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24056, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24059 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i24059, double* %tmp.4.i24057 - %tmp.7.i24060 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24056, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24062 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i24062, double* %tmp.7.i24060 - %tmp.0.i24063 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24056, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i24064 = getelementptr %"struct.std::dcomplex"* %mem_tmp.555, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i24065 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24063, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24066 = load double* %tmp.14.i24065 ; [#uses=1] - store double %tmp.15.i24066, double* %tmp.13.i24064 - %tmp.16.i24067 = getelementptr %"struct.std::dcomplex"* %mem_tmp.555, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i24068 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24063, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24069 = load double* %tmp.17.i24068 ; [#uses=1] - store double %tmp.18.i24069, double* %tmp.16.i24067 - %tmp.4.i24043 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24042, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24080, double* %tmp.4.i24043 - %tmp.7.i24046 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24042, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24083, double* %tmp.7.i24046 - %tmp.0.i24049 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i24042, %"struct.std::dcomplex"* %mem_tmp.555 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24051 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24049, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24052 = load double* %tmp.14.i24051 ; [#uses=1] - %tmp.17.i24054 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24049, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24055 = load double* %tmp.17.i24054 ; [#uses=1] - %tmp.4.i24029 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24028, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24052, double* %tmp.4.i24029 - %tmp.7.i24032 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24028, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24055, double* %tmp.7.i24032 - %tmp.0.i24035 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24028, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24037 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24035, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24038 = load double* %tmp.14.i24037 ; [#uses=1] - %tmp.17.i24040 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24035, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24041 = load double* %tmp.17.i24040 ; [#uses=1] - %tmp.4.i24015 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24014, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24017 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i24017, double* %tmp.4.i24015 - %tmp.7.i24018 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24014, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24020 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i24020, double* %tmp.7.i24018 - %tmp.0.i24021 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24014, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i24023 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24021, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24024 = load double* %tmp.14.i24023 ; [#uses=1] - %tmp.17.i24026 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24021, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24027 = load double* %tmp.17.i24026 ; [#uses=1] - %tmp.4.i24001 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24000, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i24003 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i24003, double* %tmp.4.i24001 - %tmp.7.i24004 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i24000, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i24006 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i24006, double* %tmp.7.i24004 - %tmp.0.i24007 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i24000, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i24008 = getelementptr %"struct.std::dcomplex"* %mem_tmp.559, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i24009 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24007, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i24010 = load double* %tmp.14.i24009 ; [#uses=1] - store double %tmp.15.i24010, double* %tmp.13.i24008 - %tmp.16.i24011 = getelementptr %"struct.std::dcomplex"* %mem_tmp.559, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i24012 = getelementptr %"struct.std::dcomplex"* %tmp.0.i24007, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i24013 = load double* %tmp.17.i24012 ; [#uses=1] - store double %tmp.18.i24013, double* %tmp.16.i24011 - %tmp.4.i23987 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23986, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24024, double* %tmp.4.i23987 - %tmp.7.i23990 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23986, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24027, double* %tmp.7.i23990 - %tmp.0.i23993 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i23986, %"struct.std::dcomplex"* %mem_tmp.559 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23995 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23993, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23996 = load double* %tmp.14.i23995 ; [#uses=1] - %tmp.17.i23998 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23993, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23999 = load double* %tmp.17.i23998 ; [#uses=1] - %tmp.4.i23973 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23972, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23996, double* %tmp.4.i23973 - %tmp.7.i23976 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23972, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23999, double* %tmp.7.i23976 - %tmp.0.i23979 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23972, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23980 = getelementptr %"struct.std::dcomplex"* %mem_tmp.556, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23981 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23979, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23982 = load double* %tmp.14.i23981 ; [#uses=1] - store double %tmp.15.i23982, double* %tmp.13.i23980 - %tmp.16.i23983 = getelementptr %"struct.std::dcomplex"* %mem_tmp.556, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23984 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23979, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23985 = load double* %tmp.17.i23984 ; [#uses=1] - store double %tmp.18.i23985, double* %tmp.16.i23983 - %tmp.4.i23959 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23958, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i24038, double* %tmp.4.i23959 - %tmp.7.i23962 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23958, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i24041, double* %tmp.7.i23962 - %tmp.0.i23965 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23958, %"struct.std::dcomplex"* %mem_tmp.556 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23967 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23965, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23968 = load double* %tmp.14.i23967 ; [#uses=1] - %tmp.17.i23970 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23965, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23971 = load double* %tmp.17.i23970 ; [#uses=1] - %tmp.4.i23945 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23944, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23947 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i23947, double* %tmp.4.i23945 - %tmp.7.i23948 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23944, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23950 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i23950, double* %tmp.7.i23948 - %tmp.0.i23951 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23944, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23953 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23951, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23954 = load double* %tmp.14.i23953 ; [#uses=1] - %tmp.17.i23956 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23951, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23957 = load double* %tmp.17.i23956 ; [#uses=1] - %tmp.4.i23931 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23930, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23933 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i23933, double* %tmp.4.i23931 - %tmp.7.i23934 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23930, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23936 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i23936, double* %tmp.7.i23934 - %tmp.0.i23937 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23930, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23938 = getelementptr %"struct.std::dcomplex"* %mem_tmp.563, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23939 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23937, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23940 = load double* %tmp.14.i23939 ; [#uses=1] - store double %tmp.15.i23940, double* %tmp.13.i23938 - %tmp.16.i23941 = getelementptr %"struct.std::dcomplex"* %mem_tmp.563, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23942 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23937, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23943 = load double* %tmp.17.i23942 ; [#uses=1] - store double %tmp.18.i23943, double* %tmp.16.i23941 - %tmp.4.i23917 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23916, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23954, double* %tmp.4.i23917 - %tmp.7.i23920 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23916, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23957, double* %tmp.7.i23920 - %tmp.0.i23923 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i23916, %"struct.std::dcomplex"* %mem_tmp.563 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23925 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23923, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23926 = load double* %tmp.14.i23925 ; [#uses=1] - %tmp.17.i23928 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23923, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23929 = load double* %tmp.17.i23928 ; [#uses=1] - %tmp.4.i23903 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23902, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23926, double* %tmp.4.i23903 - %tmp.7.i23906 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23902, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23929, double* %tmp.7.i23906 - %tmp.0.i23909 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23902, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23910 = getelementptr %"struct.std::dcomplex"* %mem_tmp.560, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23911 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23909, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23912 = load double* %tmp.14.i23911 ; [#uses=1] - store double %tmp.15.i23912, double* %tmp.13.i23910 - %tmp.16.i23913 = getelementptr %"struct.std::dcomplex"* %mem_tmp.560, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23914 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23909, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23915 = load double* %tmp.17.i23914 ; [#uses=1] - store double %tmp.18.i23915, double* %tmp.16.i23913 - %tmp.4.i23889 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23888, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23968, double* %tmp.4.i23889 - %tmp.7.i23892 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23888, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23971, double* %tmp.7.i23892 - %tmp.0.i23895 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23888, %"struct.std::dcomplex"* %mem_tmp.560 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23897 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23895, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23898 = load double* %tmp.14.i23897 ; [#uses=1] - %tmp.17.i23900 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23895, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23901 = load double* %tmp.17.i23900 ; [#uses=1] - store double %tmp.15.i23898, double* %tmp.2.i34364 - store double %tmp.18.i23901, double* %tmp.6.i34365 - %tmp.4.i23855 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23854, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23857 = load double* %tmp.5.i27590 ; [#uses=1] - store double %tmp.6.i23857, double* %tmp.4.i23855 - %tmp.7.i23858 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23854, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23860 = load double* %tmp.8.i27593 ; [#uses=1] - store double %tmp.9.i23860, double* %tmp.7.i23858 - %tmp.0.i23861 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23854, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23863 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23861, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23864 = load double* %tmp.14.i23863 ; [#uses=1] - %tmp.17.i23866 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23861, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23867 = load double* %tmp.17.i23866 ; [#uses=1] - %tmp.7.i23821 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i23835 = add double %tmp.7.i23821, %tmp.15.i23864 ; [#uses=1] - store double %tmp.15.i23835, double* %tmp.2.i34366 - %tmp.26.i23842 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i23853 = add double %tmp.26.i23842, %tmp.18.i23867 ; [#uses=1] - store double %tmp.31.i23853, double* %tmp.6.i34367 - %tmp.4.i23801 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23800, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23803 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i23803, double* %tmp.4.i23801 - %tmp.7.i23804 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23800, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23806 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i23806, double* %tmp.7.i23804 - %tmp.0.i23807 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23800, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23809 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23807, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23810 = load double* %tmp.14.i23809 ; [#uses=1] - %tmp.17.i23812 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23807, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23813 = load double* %tmp.17.i23812 ; [#uses=1] - %tmp.4.i23787 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23786, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23789 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i23789, double* %tmp.4.i23787 - %tmp.7.i23790 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23786, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23792 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i23792, double* %tmp.7.i23790 - %tmp.0.i23793 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23786, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23794 = getelementptr %"struct.std::dcomplex"* %mem_tmp.570, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23795 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23793, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23796 = load double* %tmp.14.i23795 ; [#uses=1] - store double %tmp.15.i23796, double* %tmp.13.i23794 - %tmp.16.i23797 = getelementptr %"struct.std::dcomplex"* %mem_tmp.570, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23798 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23793, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23799 = load double* %tmp.17.i23798 ; [#uses=1] - store double %tmp.18.i23799, double* %tmp.16.i23797 - %tmp.4.i23773 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23772, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23810, double* %tmp.4.i23773 - %tmp.7.i23776 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23772, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23813, double* %tmp.7.i23776 - %tmp.0.i23779 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i23772, %"struct.std::dcomplex"* %mem_tmp.570 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23781 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23779, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23782 = load double* %tmp.14.i23781 ; [#uses=1] - %tmp.17.i23784 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23779, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23785 = load double* %tmp.17.i23784 ; [#uses=1] - %tmp.4.i23759 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23758, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23782, double* %tmp.4.i23759 - %tmp.7.i23762 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23758, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23785, double* %tmp.7.i23762 - %tmp.0.i23765 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23758, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23767 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23765, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23768 = load double* %tmp.14.i23767 ; [#uses=1] - %tmp.17.i23770 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23765, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23771 = load double* %tmp.17.i23770 ; [#uses=1] - %tmp.4.i23745 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23744, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23747 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i23747, double* %tmp.4.i23745 - %tmp.7.i23748 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23744, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23750 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i23750, double* %tmp.7.i23748 - %tmp.0.i23751 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23744, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23753 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23751, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23754 = load double* %tmp.14.i23753 ; [#uses=1] - %tmp.17.i23756 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23751, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23757 = load double* %tmp.17.i23756 ; [#uses=1] - %tmp.4.i23731 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23730, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23733 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i23733, double* %tmp.4.i23731 - %tmp.7.i23734 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23730, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23736 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i23736, double* %tmp.7.i23734 - %tmp.0.i23737 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23730, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23738 = getelementptr %"struct.std::dcomplex"* %mem_tmp.574, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23739 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23737, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23740 = load double* %tmp.14.i23739 ; [#uses=1] - store double %tmp.15.i23740, double* %tmp.13.i23738 - %tmp.16.i23741 = getelementptr %"struct.std::dcomplex"* %mem_tmp.574, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23742 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23737, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23743 = load double* %tmp.17.i23742 ; [#uses=1] - store double %tmp.18.i23743, double* %tmp.16.i23741 - %tmp.4.i23717 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23716, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23754, double* %tmp.4.i23717 - %tmp.7.i23720 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23716, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23757, double* %tmp.7.i23720 - %tmp.0.i23723 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i23716, %"struct.std::dcomplex"* %mem_tmp.574 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23725 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23723, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23726 = load double* %tmp.14.i23725 ; [#uses=1] - %tmp.17.i23728 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23723, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23729 = load double* %tmp.17.i23728 ; [#uses=1] - %tmp.4.i23703 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23702, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23726, double* %tmp.4.i23703 - %tmp.7.i23706 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23702, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23729, double* %tmp.7.i23706 - %tmp.0.i23709 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23702, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23710 = getelementptr %"struct.std::dcomplex"* %mem_tmp.571, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23711 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23709, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23712 = load double* %tmp.14.i23711 ; [#uses=1] - store double %tmp.15.i23712, double* %tmp.13.i23710 - %tmp.16.i23713 = getelementptr %"struct.std::dcomplex"* %mem_tmp.571, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23714 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23709, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23715 = load double* %tmp.17.i23714 ; [#uses=1] - store double %tmp.18.i23715, double* %tmp.16.i23713 - %tmp.4.i23689 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23688, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23768, double* %tmp.4.i23689 - %tmp.7.i23692 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23688, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23771, double* %tmp.7.i23692 - %tmp.0.i23695 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23688, %"struct.std::dcomplex"* %mem_tmp.571 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23697 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23695, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23698 = load double* %tmp.14.i23697 ; [#uses=1] - %tmp.17.i23700 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23695, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23701 = load double* %tmp.17.i23700 ; [#uses=1] - %tmp.4.i23675 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23674, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23677 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i23677, double* %tmp.4.i23675 - %tmp.7.i23678 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23674, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23680 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i23680, double* %tmp.7.i23678 - %tmp.0.i23681 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23674, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23683 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23681, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23684 = load double* %tmp.14.i23683 ; [#uses=1] - %tmp.17.i23686 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23681, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23687 = load double* %tmp.17.i23686 ; [#uses=1] - %tmp.4.i23661 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23660, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23663 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i23663, double* %tmp.4.i23661 - %tmp.7.i23664 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23660, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23666 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i23666, double* %tmp.7.i23664 - %tmp.0.i23667 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23660, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23668 = getelementptr %"struct.std::dcomplex"* %mem_tmp.578, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23669 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23667, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23670 = load double* %tmp.14.i23669 ; [#uses=1] - store double %tmp.15.i23670, double* %tmp.13.i23668 - %tmp.16.i23671 = getelementptr %"struct.std::dcomplex"* %mem_tmp.578, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23672 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23667, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23673 = load double* %tmp.17.i23672 ; [#uses=1] - store double %tmp.18.i23673, double* %tmp.16.i23671 - %tmp.4.i23647 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23646, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23684, double* %tmp.4.i23647 - %tmp.7.i23650 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23646, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23687, double* %tmp.7.i23650 - %tmp.0.i23653 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i23646, %"struct.std::dcomplex"* %mem_tmp.578 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23655 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23653, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23656 = load double* %tmp.14.i23655 ; [#uses=1] - %tmp.17.i23658 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23653, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23659 = load double* %tmp.17.i23658 ; [#uses=1] - %tmp.4.i23633 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23632, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23656, double* %tmp.4.i23633 - %tmp.7.i23636 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23632, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23659, double* %tmp.7.i23636 - %tmp.0.i23639 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23632, %"struct.std::dcomplex"* %tmp.1075 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23640 = getelementptr %"struct.std::dcomplex"* %mem_tmp.575, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23641 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23639, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23642 = load double* %tmp.14.i23641 ; [#uses=1] - store double %tmp.15.i23642, double* %tmp.13.i23640 - %tmp.16.i23643 = getelementptr %"struct.std::dcomplex"* %mem_tmp.575, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23644 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23639, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23645 = load double* %tmp.17.i23644 ; [#uses=1] - store double %tmp.18.i23645, double* %tmp.16.i23643 - %tmp.4.i23619 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23618, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23698, double* %tmp.4.i23619 - %tmp.7.i23622 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23618, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23701, double* %tmp.7.i23622 - %tmp.0.i23625 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23618, %"struct.std::dcomplex"* %mem_tmp.575 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23627 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23625, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23628 = load double* %tmp.14.i23627 ; [#uses=1] - %tmp.17.i23630 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23625, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23631 = load double* %tmp.17.i23630 ; [#uses=1] - store double %tmp.15.i23628, double* %tmp.2.i34364 - store double %tmp.18.i23631, double* %tmp.6.i34365 - %tmp.4.i23585 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23584, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23587 = load double* %tmp.5.i33596 ; [#uses=1] - store double %tmp.6.i23587, double* %tmp.4.i23585 - %tmp.7.i23588 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23584, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23590 = load double* %tmp.8.i33599 ; [#uses=1] - store double %tmp.9.i23590, double* %tmp.7.i23588 - %tmp.0.i23591 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23584, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23593 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23591, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23594 = load double* %tmp.14.i23593 ; [#uses=1] - %tmp.17.i23596 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23591, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23597 = load double* %tmp.17.i23596 ; [#uses=1] - %tmp.7.i23551 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i23565 = add double %tmp.7.i23551, %tmp.15.i23594 ; [#uses=1] - store double %tmp.15.i23565, double* %tmp.2.i34366 - %tmp.26.i23572 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i23583 = add double %tmp.26.i23572, %tmp.18.i23597 ; [#uses=1] - store double %tmp.31.i23583, double* %tmp.6.i34367 - %tmp.4.i23531 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23530, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23533 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i23533, double* %tmp.4.i23531 - %tmp.7.i23534 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23530, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23536 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i23536, double* %tmp.7.i23534 - %tmp.0.i23537 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23530, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23539 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23537, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23540 = load double* %tmp.14.i23539 ; [#uses=1] - %tmp.17.i23542 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23537, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23543 = load double* %tmp.17.i23542 ; [#uses=1] - %tmp.4.i23517 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23516, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23519 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i23519, double* %tmp.4.i23517 - %tmp.7.i23520 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23516, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23522 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i23522, double* %tmp.7.i23520 - %tmp.0.i23523 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23516, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23524 = getelementptr %"struct.std::dcomplex"* %mem_tmp.585, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23525 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23523, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23526 = load double* %tmp.14.i23525 ; [#uses=1] - store double %tmp.15.i23526, double* %tmp.13.i23524 - %tmp.16.i23527 = getelementptr %"struct.std::dcomplex"* %mem_tmp.585, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23528 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23523, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23529 = load double* %tmp.17.i23528 ; [#uses=1] - store double %tmp.18.i23529, double* %tmp.16.i23527 - %tmp.4.i23503 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23502, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23540, double* %tmp.4.i23503 - %tmp.7.i23506 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23502, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23543, double* %tmp.7.i23506 - %tmp.0.i23509 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i23502, %"struct.std::dcomplex"* %mem_tmp.585 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23511 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23509, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23512 = load double* %tmp.14.i23511 ; [#uses=1] - %tmp.17.i23514 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23509, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23515 = load double* %tmp.17.i23514 ; [#uses=1] - %tmp.4.i23489 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23488, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23512, double* %tmp.4.i23489 - %tmp.7.i23492 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23488, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23515, double* %tmp.7.i23492 - %tmp.0.i23495 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23488, %"struct.std::dcomplex"* %tmp.1075 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23497 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23495, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23498 = load double* %tmp.14.i23497 ; [#uses=1] - %tmp.17.i23500 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23495, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23501 = load double* %tmp.17.i23500 ; [#uses=1] - %tmp.4.i23475 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23474, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23477 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i23477, double* %tmp.4.i23475 - %tmp.7.i23478 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23474, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23480 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i23480, double* %tmp.7.i23478 - %tmp.0.i23481 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23474, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23483 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23481, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23484 = load double* %tmp.14.i23483 ; [#uses=1] - %tmp.17.i23486 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23481, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23487 = load double* %tmp.17.i23486 ; [#uses=1] - %tmp.4.i23461 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23460, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23463 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i23463, double* %tmp.4.i23461 - %tmp.7.i23464 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23460, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23466 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i23466, double* %tmp.7.i23464 - %tmp.0.i23467 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23460, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23468 = getelementptr %"struct.std::dcomplex"* %mem_tmp.589, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23469 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23467, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23470 = load double* %tmp.14.i23469 ; [#uses=1] - store double %tmp.15.i23470, double* %tmp.13.i23468 - %tmp.16.i23471 = getelementptr %"struct.std::dcomplex"* %mem_tmp.589, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23472 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23467, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23473 = load double* %tmp.17.i23472 ; [#uses=1] - store double %tmp.18.i23473, double* %tmp.16.i23471 - %tmp.4.i23447 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23446, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23484, double* %tmp.4.i23447 - %tmp.7.i23450 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23446, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23487, double* %tmp.7.i23450 - %tmp.0.i23453 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i23446, %"struct.std::dcomplex"* %mem_tmp.589 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23455 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23453, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23456 = load double* %tmp.14.i23455 ; [#uses=1] - %tmp.17.i23458 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23453, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23459 = load double* %tmp.17.i23458 ; [#uses=1] - %tmp.4.i23433 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23432, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23456, double* %tmp.4.i23433 - %tmp.7.i23436 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23432, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23459, double* %tmp.7.i23436 - %tmp.0.i23439 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23432, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23440 = getelementptr %"struct.std::dcomplex"* %mem_tmp.586, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23441 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23439, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23442 = load double* %tmp.14.i23441 ; [#uses=1] - store double %tmp.15.i23442, double* %tmp.13.i23440 - %tmp.16.i23443 = getelementptr %"struct.std::dcomplex"* %mem_tmp.586, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23444 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23439, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23445 = load double* %tmp.17.i23444 ; [#uses=1] - store double %tmp.18.i23445, double* %tmp.16.i23443 - %tmp.4.i23419 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23418, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23498, double* %tmp.4.i23419 - %tmp.7.i23422 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23418, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23501, double* %tmp.7.i23422 - %tmp.0.i23425 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23418, %"struct.std::dcomplex"* %mem_tmp.586 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23427 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23425, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23428 = load double* %tmp.14.i23427 ; [#uses=1] - %tmp.17.i23430 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23425, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23431 = load double* %tmp.17.i23430 ; [#uses=1] - %tmp.4.i23405 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23404, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23407 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i23407, double* %tmp.4.i23405 - %tmp.7.i23408 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23404, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23410 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i23410, double* %tmp.7.i23408 - %tmp.0.i23411 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23404, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23413 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23411, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23414 = load double* %tmp.14.i23413 ; [#uses=1] - %tmp.17.i23416 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23411, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23417 = load double* %tmp.17.i23416 ; [#uses=1] - %tmp.4.i23391 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23390, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23393 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i23393, double* %tmp.4.i23391 - %tmp.7.i23394 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23390, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23396 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i23396, double* %tmp.7.i23394 - %tmp.0.i23397 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23390, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23398 = getelementptr %"struct.std::dcomplex"* %mem_tmp.593, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23399 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23397, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23400 = load double* %tmp.14.i23399 ; [#uses=1] - store double %tmp.15.i23400, double* %tmp.13.i23398 - %tmp.16.i23401 = getelementptr %"struct.std::dcomplex"* %mem_tmp.593, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23402 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23397, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23403 = load double* %tmp.17.i23402 ; [#uses=1] - store double %tmp.18.i23403, double* %tmp.16.i23401 - %tmp.4.i23377 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23376, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23414, double* %tmp.4.i23377 - %tmp.7.i23380 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23376, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23417, double* %tmp.7.i23380 - %tmp.0.i23383 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i23376, %"struct.std::dcomplex"* %mem_tmp.593 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23385 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23383, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23386 = load double* %tmp.14.i23385 ; [#uses=1] - %tmp.17.i23388 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23383, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23389 = load double* %tmp.17.i23388 ; [#uses=1] - %tmp.4.i23363 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23362, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23386, double* %tmp.4.i23363 - %tmp.7.i23366 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23362, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23389, double* %tmp.7.i23366 - %tmp.0.i23369 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23362, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23370 = getelementptr %"struct.std::dcomplex"* %mem_tmp.590, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23371 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23369, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23372 = load double* %tmp.14.i23371 ; [#uses=1] - store double %tmp.15.i23372, double* %tmp.13.i23370 - %tmp.16.i23373 = getelementptr %"struct.std::dcomplex"* %mem_tmp.590, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23374 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23369, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23375 = load double* %tmp.17.i23374 ; [#uses=1] - store double %tmp.18.i23375, double* %tmp.16.i23373 - %tmp.4.i23349 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23348, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23428, double* %tmp.4.i23349 - %tmp.7.i23352 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23348, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23431, double* %tmp.7.i23352 - %tmp.0.i23355 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23348, %"struct.std::dcomplex"* %mem_tmp.590 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23357 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23355, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23358 = load double* %tmp.14.i23357 ; [#uses=1] - %tmp.17.i23360 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23355, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23361 = load double* %tmp.17.i23360 ; [#uses=1] - store double %tmp.15.i23358, double* %tmp.2.i34364 - store double %tmp.18.i23361, double* %tmp.6.i34365 - %tmp.4.i23315 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23314, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23317 = load double* %tmp.5.i34136 ; [#uses=1] - store double %tmp.6.i23317, double* %tmp.4.i23315 - %tmp.7.i23318 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23314, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23320 = load double* %tmp.8.i34139 ; [#uses=1] - store double %tmp.9.i23320, double* %tmp.7.i23318 - %tmp.0.i23321 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23314, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23323 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23321, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23324 = load double* %tmp.14.i23323 ; [#uses=1] - %tmp.17.i23326 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23321, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23327 = load double* %tmp.17.i23326 ; [#uses=1] - %tmp.7.i23281 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i23295 = add double %tmp.7.i23281, %tmp.15.i23324 ; [#uses=1] - store double %tmp.15.i23295, double* %tmp.2.i34366 - %tmp.26.i23302 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i23313 = add double %tmp.26.i23302, %tmp.18.i23327 ; [#uses=1] - store double %tmp.31.i23313, double* %tmp.6.i34367 - %tmp.4.i23261 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23260, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23263 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i23263, double* %tmp.4.i23261 - %tmp.7.i23264 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23260, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23266 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i23266, double* %tmp.7.i23264 - %tmp.0.i23267 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23260, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23269 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23267, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23270 = load double* %tmp.14.i23269 ; [#uses=1] - %tmp.17.i23272 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23267, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23273 = load double* %tmp.17.i23272 ; [#uses=1] - %tmp.4.i23247 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23246, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23249 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i23249, double* %tmp.4.i23247 - %tmp.7.i23250 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23246, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23252 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i23252, double* %tmp.7.i23250 - %tmp.0.i23253 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23246, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23254 = getelementptr %"struct.std::dcomplex"* %mem_tmp.600, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23255 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23253, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23256 = load double* %tmp.14.i23255 ; [#uses=1] - store double %tmp.15.i23256, double* %tmp.13.i23254 - %tmp.16.i23257 = getelementptr %"struct.std::dcomplex"* %mem_tmp.600, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23258 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23253, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23259 = load double* %tmp.17.i23258 ; [#uses=1] - store double %tmp.18.i23259, double* %tmp.16.i23257 - %tmp.4.i23233 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23232, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23270, double* %tmp.4.i23233 - %tmp.7.i23236 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23232, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23273, double* %tmp.7.i23236 - %tmp.0.i23239 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i23232, %"struct.std::dcomplex"* %mem_tmp.600 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23241 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23239, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23242 = load double* %tmp.14.i23241 ; [#uses=1] - %tmp.17.i23244 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23239, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23245 = load double* %tmp.17.i23244 ; [#uses=1] - %tmp.4.i23219 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23218, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23242, double* %tmp.4.i23219 - %tmp.7.i23222 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23218, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23245, double* %tmp.7.i23222 - %tmp.0.i23225 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23218, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23227 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23225, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23228 = load double* %tmp.14.i23227 ; [#uses=1] - %tmp.17.i23230 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23225, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23231 = load double* %tmp.17.i23230 ; [#uses=1] - %tmp.4.i23205 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23204, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23207 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i23207, double* %tmp.4.i23205 - %tmp.7.i23208 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23204, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23210 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i23210, double* %tmp.7.i23208 - %tmp.0.i23211 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23204, %"struct.std::dcomplex"* %tmp.6 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23213 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23211, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23214 = load double* %tmp.14.i23213 ; [#uses=1] - %tmp.17.i23216 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23211, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23217 = load double* %tmp.17.i23216 ; [#uses=1] - %tmp.4.i23191 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23190, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23193 = load double* %tmp.5.i34338 ; [#uses=1] - store double %tmp.6.i23193, double* %tmp.4.i23191 - %tmp.7.i23194 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23190, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23196 = load double* %tmp.8.i34341 ; [#uses=1] - store double %tmp.9.i23196, double* %tmp.7.i23194 - %tmp.0.i23197 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23190, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23198 = getelementptr %"struct.std::dcomplex"* %mem_tmp.604, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23199 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23197, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23200 = load double* %tmp.14.i23199 ; [#uses=1] - store double %tmp.15.i23200, double* %tmp.13.i23198 - %tmp.16.i23201 = getelementptr %"struct.std::dcomplex"* %mem_tmp.604, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23202 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23197, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23203 = load double* %tmp.17.i23202 ; [#uses=1] - store double %tmp.18.i23203, double* %tmp.16.i23201 - %tmp.4.i23177 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23176, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23214, double* %tmp.4.i23177 - %tmp.7.i23180 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23176, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23217, double* %tmp.7.i23180 - %tmp.0.i23183 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i23176, %"struct.std::dcomplex"* %mem_tmp.604 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23185 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23183, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23186 = load double* %tmp.14.i23185 ; [#uses=1] - %tmp.17.i23188 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23183, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23189 = load double* %tmp.17.i23188 ; [#uses=1] - %tmp.4.i23163 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23162, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23186, double* %tmp.4.i23163 - %tmp.7.i23166 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23162, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23189, double* %tmp.7.i23166 - %tmp.0.i23169 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23162, %"struct.std::dcomplex"* %tmp.1075 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23170 = getelementptr %"struct.std::dcomplex"* %mem_tmp.601, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23171 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23169, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23172 = load double* %tmp.14.i23171 ; [#uses=1] - store double %tmp.15.i23172, double* %tmp.13.i23170 - %tmp.16.i23173 = getelementptr %"struct.std::dcomplex"* %mem_tmp.601, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23174 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23169, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23175 = load double* %tmp.17.i23174 ; [#uses=1] - store double %tmp.18.i23175, double* %tmp.16.i23173 - %tmp.4.i23149 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23148, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23228, double* %tmp.4.i23149 - %tmp.7.i23152 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23148, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23231, double* %tmp.7.i23152 - %tmp.0.i23155 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23148, %"struct.std::dcomplex"* %mem_tmp.601 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23157 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23155, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23158 = load double* %tmp.14.i23157 ; [#uses=1] - %tmp.17.i23160 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23155, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23161 = load double* %tmp.17.i23160 ; [#uses=1] - %tmp.4.i23135 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23134, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23137 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i23137, double* %tmp.4.i23135 - %tmp.7.i23138 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23134, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23140 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i23140, double* %tmp.7.i23138 - %tmp.0.i23141 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23134, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23143 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23141, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23144 = load double* %tmp.14.i23143 ; [#uses=1] - %tmp.17.i23146 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23141, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23147 = load double* %tmp.17.i23146 ; [#uses=1] - %tmp.4.i23121 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23120, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23123 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i23123, double* %tmp.4.i23121 - %tmp.7.i23124 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23120, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23126 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i23126, double* %tmp.7.i23124 - %tmp.0.i23127 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23120, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23128 = getelementptr %"struct.std::dcomplex"* %mem_tmp.608, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23129 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23127, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23130 = load double* %tmp.14.i23129 ; [#uses=1] - store double %tmp.15.i23130, double* %tmp.13.i23128 - %tmp.16.i23131 = getelementptr %"struct.std::dcomplex"* %mem_tmp.608, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23132 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23127, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23133 = load double* %tmp.17.i23132 ; [#uses=1] - store double %tmp.18.i23133, double* %tmp.16.i23131 - %tmp.4.i23107 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23106, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23144, double* %tmp.4.i23107 - %tmp.7.i23110 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23106, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23147, double* %tmp.7.i23110 - %tmp.0.i23113 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i23106, %"struct.std::dcomplex"* %mem_tmp.608 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23115 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23113, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23116 = load double* %tmp.14.i23115 ; [#uses=1] - %tmp.17.i23118 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23113, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23119 = load double* %tmp.17.i23118 ; [#uses=1] - %tmp.4.i23093 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23092, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23116, double* %tmp.4.i23093 - %tmp.7.i23096 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23092, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23119, double* %tmp.7.i23096 - %tmp.0.i23099 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23092, %"struct.std::dcomplex"* %tmp.45 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i23100 = getelementptr %"struct.std::dcomplex"* %mem_tmp.605, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i23101 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23099, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23102 = load double* %tmp.14.i23101 ; [#uses=1] - store double %tmp.15.i23102, double* %tmp.13.i23100 - %tmp.16.i23103 = getelementptr %"struct.std::dcomplex"* %mem_tmp.605, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i23104 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23099, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23105 = load double* %tmp.17.i23104 ; [#uses=1] - store double %tmp.18.i23105, double* %tmp.16.i23103 - %tmp.4.i23079 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23078, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i23158, double* %tmp.4.i23079 - %tmp.7.i23082 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23078, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i23161, double* %tmp.7.i23082 - %tmp.0.i23085 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23078, %"struct.std::dcomplex"* %mem_tmp.605 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23087 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23085, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23088 = load double* %tmp.14.i23087 ; [#uses=1] - %tmp.17.i23090 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23085, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23091 = load double* %tmp.17.i23090 ; [#uses=1] - store double %tmp.15.i23088, double* %tmp.2.i34364 - store double %tmp.18.i23091, double* %tmp.6.i34365 - %tmp.4.i23045 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23044, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i23047 = load double* %tmp.5.i32460 ; [#uses=1] - store double %tmp.6.i23047, double* %tmp.4.i23045 - %tmp.7.i23048 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i23044, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i23050 = load double* %tmp.8.i32463 ; [#uses=1] - store double %tmp.9.i23050, double* %tmp.7.i23048 - %tmp.0.i23051 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i23044, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i23053 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23051, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23054 = load double* %tmp.14.i23053 ; [#uses=1] - %tmp.17.i23056 = getelementptr %"struct.std::dcomplex"* %tmp.0.i23051, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23057 = load double* %tmp.17.i23056 ; [#uses=1] - %tmp.7.i23011 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i23025 = add double %tmp.7.i23011, %tmp.15.i23054 ; [#uses=1] - store double %tmp.15.i23025, double* %tmp.2.i34366 - %tmp.26.i23032 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i23043 = add double %tmp.26.i23032, %tmp.18.i23057 ; [#uses=1] - store double %tmp.31.i23043, double* %tmp.6.i34367 - %tmp.4.i22991 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22990, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22993 = load double* %tmp.5.i29864 ; [#uses=1] - store double %tmp.6.i22993, double* %tmp.4.i22991 - %tmp.7.i22994 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22990, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22996 = load double* %tmp.8.i29867 ; [#uses=1] - store double %tmp.9.i22996, double* %tmp.7.i22994 - %tmp.0.i22997 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22990, %"struct.std::dcomplex"* %ret4 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22999 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22997, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i23000 = load double* %tmp.14.i22999 ; [#uses=1] - %tmp.17.i23002 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22997, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i23003 = load double* %tmp.17.i23002 ; [#uses=1] - %tmp.7.i22957 = load double* %tmp.2.i34368 ; [#uses=1] - %tmp.15.i22971 = add double %tmp.7.i22957, %tmp.15.i23000 ; [#uses=1] - store double %tmp.15.i22971, double* %tmp.2.i34368 - %tmp.26.i22978 = load double* %tmp.6.i34369 ; [#uses=1] - %tmp.31.i22989 = add double %tmp.26.i22978, %tmp.18.i23003 ; [#uses=1] - store double %tmp.31.i22989, double* %tmp.6.i34369 - store double 0.000000e+00, double* %tmp.2.i34366 - store double 0.000000e+00, double* %tmp.6.i34367 - %tmp.4.i22935 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22934, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.5.i22936 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 5, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22937 = load double* %tmp.5.i22936 ; [#uses=1] - store double %tmp.6.i22937, double* %tmp.4.i22935 - %tmp.7.i22938 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22934, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.8.i22939 = getelementptr [6 x %"struct.std::dcomplex"]* %_m, i32 5, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22940 = load double* %tmp.8.i22939 ; [#uses=1] - store double %tmp.9.i22940, double* %tmp.7.i22938 - %tmp.0.i22941 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22934, %"struct.std::dcomplex"* %ret5 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22943 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22941, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22944 = load double* %tmp.14.i22943 ; [#uses=1] - %tmp.17.i22946 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22941, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22947 = load double* %tmp.17.i22946 ; [#uses=1] - %tmp.7.i22901 = load double* %tmp.2.i ; [#uses=1] - %tmp.15.i22915 = add double %tmp.7.i22901, %tmp.15.i22944 ; [#uses=1] - store double %tmp.15.i22915, double* %tmp.2.i - %tmp.26.i22922 = load double* %tmp.6.i ; [#uses=1] - %tmp.31.i22933 = add double %tmp.26.i22922, %tmp.18.i22947 ; [#uses=1] - store double %tmp.31.i22933, double* %tmp.6.i - store double 0.000000e+00, double* %tmp.2.i34368 - store double 0.000000e+00, double* %tmp.6.i34369 - %tmp.4.i22879 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22878, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22881 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i22881, double* %tmp.4.i22879 - %tmp.7.i22882 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22878, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22884 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i22884, double* %tmp.7.i22882 - %tmp.0.i22885 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22878, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22887 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22885, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22888 = load double* %tmp.14.i22887 ; [#uses=1] - %tmp.17.i22890 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22885, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22891 = load double* %tmp.17.i22890 ; [#uses=1] - %tmp.4.i22865 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22864, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22867 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i22867, double* %tmp.4.i22865 - %tmp.7.i22868 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22864, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22870 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i22870, double* %tmp.7.i22868 - %tmp.0.i22871 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22864, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i22872 = getelementptr %"struct.std::dcomplex"* %mem_tmp.617, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i22873 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22871, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22874 = load double* %tmp.14.i22873 ; [#uses=1] - store double %tmp.15.i22874, double* %tmp.13.i22872 - %tmp.16.i22875 = getelementptr %"struct.std::dcomplex"* %mem_tmp.617, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i22876 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22871, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22877 = load double* %tmp.17.i22876 ; [#uses=1] - store double %tmp.18.i22877, double* %tmp.16.i22875 - %tmp.4.i22851 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22850, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22888, double* %tmp.4.i22851 - %tmp.7.i22854 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22850, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22891, double* %tmp.7.i22854 - %tmp.0.i22857 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i22850, %"struct.std::dcomplex"* %mem_tmp.617 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22859 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22857, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22860 = load double* %tmp.14.i22859 ; [#uses=1] - %tmp.17.i22862 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22857, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22863 = load double* %tmp.17.i22862 ; [#uses=1] - %tmp.4.i22837 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22836, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22860, double* %tmp.4.i22837 - %tmp.7.i22840 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22836, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22863, double* %tmp.7.i22840 - %tmp.0.i22843 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22836, %"struct.std::dcomplex"* %tmp.30 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22845 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22843, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22846 = load double* %tmp.14.i22845 ; [#uses=1] - %tmp.17.i22848 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22843, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22849 = load double* %tmp.17.i22848 ; [#uses=1] - %tmp.4.i22823 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22822, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22825 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i22825, double* %tmp.4.i22823 - %tmp.7.i22826 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22822, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22828 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i22828, double* %tmp.7.i22826 - %tmp.0.i22829 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22822, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22831 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22829, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22832 = load double* %tmp.14.i22831 ; [#uses=1] - %tmp.17.i22834 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22829, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22835 = load double* %tmp.17.i22834 ; [#uses=1] - %tmp.4.i22809 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22808, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22811 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i22811, double* %tmp.4.i22809 - %tmp.7.i22812 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22808, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22814 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i22814, double* %tmp.7.i22812 - %tmp.0.i22815 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22808, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i22816 = getelementptr %"struct.std::dcomplex"* %mem_tmp.621, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i22817 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22815, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22818 = load double* %tmp.14.i22817 ; [#uses=1] - store double %tmp.15.i22818, double* %tmp.13.i22816 - %tmp.16.i22819 = getelementptr %"struct.std::dcomplex"* %mem_tmp.621, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i22820 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22815, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22821 = load double* %tmp.17.i22820 ; [#uses=1] - store double %tmp.18.i22821, double* %tmp.16.i22819 - %tmp.4.i22795 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22794, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22832, double* %tmp.4.i22795 - %tmp.7.i22798 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22794, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22835, double* %tmp.7.i22798 - %tmp.0.i22801 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i22794, %"struct.std::dcomplex"* %mem_tmp.621 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22803 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22801, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22804 = load double* %tmp.14.i22803 ; [#uses=1] - %tmp.17.i22806 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22801, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22807 = load double* %tmp.17.i22806 ; [#uses=1] - %tmp.4.i22781 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22780, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22804, double* %tmp.4.i22781 - %tmp.7.i22784 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22780, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22807, double* %tmp.7.i22784 - %tmp.0.i22787 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22780, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i22788 = getelementptr %"struct.std::dcomplex"* %mem_tmp.618, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i22789 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22787, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22790 = load double* %tmp.14.i22789 ; [#uses=1] - store double %tmp.15.i22790, double* %tmp.13.i22788 - %tmp.16.i22791 = getelementptr %"struct.std::dcomplex"* %mem_tmp.618, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i22792 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22787, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22793 = load double* %tmp.17.i22792 ; [#uses=1] - store double %tmp.18.i22793, double* %tmp.16.i22791 - %tmp.4.i22767 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22766, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22846, double* %tmp.4.i22767 - %tmp.7.i22770 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22766, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22849, double* %tmp.7.i22770 - %tmp.0.i22773 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22766, %"struct.std::dcomplex"* %mem_tmp.618 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22775 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22773, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22776 = load double* %tmp.14.i22775 ; [#uses=1] - %tmp.17.i22778 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22773, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22779 = load double* %tmp.17.i22778 ; [#uses=1] - %tmp.4.i22753 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22752, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22755 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i22755, double* %tmp.4.i22753 - %tmp.7.i22756 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22752, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22758 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i22758, double* %tmp.7.i22756 - %tmp.0.i22759 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22752, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22761 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22759, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22762 = load double* %tmp.14.i22761 ; [#uses=1] - %tmp.17.i22764 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22759, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22765 = load double* %tmp.17.i22764 ; [#uses=1] - %tmp.4.i22739 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22738, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22741 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i22741, double* %tmp.4.i22739 - %tmp.7.i22742 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22738, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22744 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i22744, double* %tmp.7.i22742 - %tmp.0.i22745 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22738, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i22746 = getelementptr %"struct.std::dcomplex"* %mem_tmp.625, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i22747 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22745, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22748 = load double* %tmp.14.i22747 ; [#uses=1] - store double %tmp.15.i22748, double* %tmp.13.i22746 - %tmp.16.i22749 = getelementptr %"struct.std::dcomplex"* %mem_tmp.625, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i22750 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22745, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22751 = load double* %tmp.17.i22750 ; [#uses=1] - store double %tmp.18.i22751, double* %tmp.16.i22749 - %tmp.4.i22725 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22724, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22762, double* %tmp.4.i22725 - %tmp.7.i22728 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22724, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22765, double* %tmp.7.i22728 - %tmp.0.i22731 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i22724, %"struct.std::dcomplex"* %mem_tmp.625 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22733 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22731, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22734 = load double* %tmp.14.i22733 ; [#uses=1] - %tmp.17.i22736 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22731, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22737 = load double* %tmp.17.i22736 ; [#uses=1] - %tmp.4.i22711 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22710, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22734, double* %tmp.4.i22711 - %tmp.7.i22714 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22710, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22737, double* %tmp.7.i22714 - %tmp.0.i22717 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22710, %"struct.std::dcomplex"* %tmp.1075 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i22718 = getelementptr %"struct.std::dcomplex"* %mem_tmp.622, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i22719 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22717, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22720 = load double* %tmp.14.i22719 ; [#uses=1] - store double %tmp.15.i22720, double* %tmp.13.i22718 - %tmp.16.i22721 = getelementptr %"struct.std::dcomplex"* %mem_tmp.622, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i22722 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22717, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22723 = load double* %tmp.17.i22722 ; [#uses=1] - store double %tmp.18.i22723, double* %tmp.16.i22721 - %tmp.4.i22697 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22696, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22776, double* %tmp.4.i22697 - %tmp.7.i22700 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22696, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22779, double* %tmp.7.i22700 - %tmp.0.i22703 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22696, %"struct.std::dcomplex"* %mem_tmp.622 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22705 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22703, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22706 = load double* %tmp.14.i22705 ; [#uses=1] - %tmp.17.i22708 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22703, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22709 = load double* %tmp.17.i22708 ; [#uses=1] - store double %tmp.15.i22706, double* %tmp.2.i34364 - store double %tmp.18.i22709, double* %tmp.6.i34365 - %tmp.4.i22663 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22662, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22665 = load double* %tmp.5.i32460 ; [#uses=1] - store double %tmp.6.i22665, double* %tmp.4.i22663 - %tmp.7.i22666 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22662, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22668 = load double* %tmp.8.i32463 ; [#uses=1] - store double %tmp.9.i22668, double* %tmp.7.i22666 - %tmp.0.i22669 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22662, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22671 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22669, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22672 = load double* %tmp.14.i22671 ; [#uses=1] - %tmp.17.i22674 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22669, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22675 = load double* %tmp.17.i22674 ; [#uses=1] - %tmp.7.i22629 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i22643 = add double %tmp.7.i22629, %tmp.15.i22672 ; [#uses=1] - store double %tmp.15.i22643, double* %tmp.2.i34366 - %tmp.26.i22650 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i22661 = add double %tmp.26.i22650, %tmp.18.i22675 ; [#uses=1] - store double %tmp.31.i22661, double* %tmp.6.i34367 - %tmp.4.i22609 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22608, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22611 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i22611, double* %tmp.4.i22609 - %tmp.7.i22612 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22608, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22614 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i22614, double* %tmp.7.i22612 - %tmp.0.i22615 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22608, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22617 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22615, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22618 = load double* %tmp.14.i22617 ; [#uses=1] - %tmp.17.i22620 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22615, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22621 = load double* %tmp.17.i22620 ; [#uses=1] - %tmp.4.i22595 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22594, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22597 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i22597, double* %tmp.4.i22595 - %tmp.7.i22598 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22594, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22600 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i22600, double* %tmp.7.i22598 - %tmp.0.i22601 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22594, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i22602 = getelementptr %"struct.std::dcomplex"* %mem_tmp.632, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i22603 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22601, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22604 = load double* %tmp.14.i22603 ; [#uses=1] - store double %tmp.15.i22604, double* %tmp.13.i22602 - %tmp.16.i22605 = getelementptr %"struct.std::dcomplex"* %mem_tmp.632, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i22606 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22601, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22607 = load double* %tmp.17.i22606 ; [#uses=1] - store double %tmp.18.i22607, double* %tmp.16.i22605 - %tmp.4.i22581 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22580, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22618, double* %tmp.4.i22581 - %tmp.7.i22584 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22580, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22621, double* %tmp.7.i22584 - %tmp.0.i22587 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i22580, %"struct.std::dcomplex"* %mem_tmp.632 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22589 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22587, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22590 = load double* %tmp.14.i22589 ; [#uses=1] - %tmp.17.i22592 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22587, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22593 = load double* %tmp.17.i22592 ; [#uses=1] - %tmp.4.i22567 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22566, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22590, double* %tmp.4.i22567 - %tmp.7.i22570 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22566, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22593, double* %tmp.7.i22570 - %tmp.0.i22573 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22566, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22575 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22573, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22576 = load double* %tmp.14.i22575 ; [#uses=1] - %tmp.17.i22578 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22573, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22579 = load double* %tmp.17.i22578 ; [#uses=1] - %tmp.4.i22553 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22552, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22555 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i22555, double* %tmp.4.i22553 - %tmp.7.i22556 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22552, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22558 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i22558, double* %tmp.7.i22556 - %tmp.0.i22559 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22552, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22561 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22559, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22562 = load double* %tmp.14.i22561 ; [#uses=1] - %tmp.17.i22564 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22559, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22565 = load double* %tmp.17.i22564 ; [#uses=1] - %tmp.4.i22539 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22538, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22541 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i22541, double* %tmp.4.i22539 - %tmp.7.i22542 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22538, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22544 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i22544, double* %tmp.7.i22542 - %tmp.0.i22545 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22538, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i22546 = getelementptr %"struct.std::dcomplex"* %mem_tmp.636, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i22547 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22545, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22548 = load double* %tmp.14.i22547 ; [#uses=1] - store double %tmp.15.i22548, double* %tmp.13.i22546 - %tmp.16.i22549 = getelementptr %"struct.std::dcomplex"* %mem_tmp.636, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i22550 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22545, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22551 = load double* %tmp.17.i22550 ; [#uses=1] - store double %tmp.18.i22551, double* %tmp.16.i22549 - %tmp.4.i22525 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22524, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22562, double* %tmp.4.i22525 - %tmp.7.i22528 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22524, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22565, double* %tmp.7.i22528 - %tmp.0.i22531 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i22524, %"struct.std::dcomplex"* %mem_tmp.636 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22533 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22531, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22534 = load double* %tmp.14.i22533 ; [#uses=1] - %tmp.17.i22536 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22531, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22537 = load double* %tmp.17.i22536 ; [#uses=1] - %tmp.4.i22511 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22510, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22534, double* %tmp.4.i22511 - %tmp.7.i22514 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22510, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22537, double* %tmp.7.i22514 - %tmp.0.i22517 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22510, %"struct.std::dcomplex"* %tmp.30 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i22518 = getelementptr %"struct.std::dcomplex"* %mem_tmp.633, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i22519 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22517, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22520 = load double* %tmp.14.i22519 ; [#uses=1] - store double %tmp.15.i22520, double* %tmp.13.i22518 - %tmp.16.i22521 = getelementptr %"struct.std::dcomplex"* %mem_tmp.633, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i22522 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22517, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22523 = load double* %tmp.17.i22522 ; [#uses=1] - store double %tmp.18.i22523, double* %tmp.16.i22521 - %tmp.4.i22497 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22496, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22576, double* %tmp.4.i22497 - %tmp.7.i22500 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22496, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22579, double* %tmp.7.i22500 - %tmp.0.i22503 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22496, %"struct.std::dcomplex"* %mem_tmp.633 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22505 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22503, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22506 = load double* %tmp.14.i22505 ; [#uses=1] - %tmp.17.i22508 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22503, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22509 = load double* %tmp.17.i22508 ; [#uses=1] - %tmp.4.i22483 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22482, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22485 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i22485, double* %tmp.4.i22483 - %tmp.7.i22486 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22482, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22488 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i22488, double* %tmp.7.i22486 - %tmp.0.i22489 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22482, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22491 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22489, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22492 = load double* %tmp.14.i22491 ; [#uses=1] - %tmp.17.i22494 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22489, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22495 = load double* %tmp.17.i22494 ; [#uses=1] - %tmp.4.i22469 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22468, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22471 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i22471, double* %tmp.4.i22469 - %tmp.7.i22472 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22468, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22474 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i22474, double* %tmp.7.i22472 - %tmp.0.i22475 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22468, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i22476 = getelementptr %"struct.std::dcomplex"* %mem_tmp.640, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i22477 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22475, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22478 = load double* %tmp.14.i22477 ; [#uses=1] - store double %tmp.15.i22478, double* %tmp.13.i22476 - %tmp.16.i22479 = getelementptr %"struct.std::dcomplex"* %mem_tmp.640, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i22480 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22475, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22481 = load double* %tmp.17.i22480 ; [#uses=1] - store double %tmp.18.i22481, double* %tmp.16.i22479 - %tmp.4.i22455 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22454, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22492, double* %tmp.4.i22455 - %tmp.7.i22458 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22454, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22495, double* %tmp.7.i22458 - %tmp.0.i22461 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i22454, %"struct.std::dcomplex"* %mem_tmp.640 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22463 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22461, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22464 = load double* %tmp.14.i22463 ; [#uses=1] - %tmp.17.i22466 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22461, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22467 = load double* %tmp.17.i22466 ; [#uses=1] - %tmp.4.i22441 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22440, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22464, double* %tmp.4.i22441 - %tmp.7.i22444 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22440, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22467, double* %tmp.7.i22444 - %tmp.0.i22447 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22440, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i22448 = getelementptr %"struct.std::dcomplex"* %mem_tmp.637, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i22449 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22447, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22450 = load double* %tmp.14.i22449 ; [#uses=1] - store double %tmp.15.i22450, double* %tmp.13.i22448 - %tmp.16.i22451 = getelementptr %"struct.std::dcomplex"* %mem_tmp.637, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i22452 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22447, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22453 = load double* %tmp.17.i22452 ; [#uses=1] - store double %tmp.18.i22453, double* %tmp.16.i22451 - %tmp.4.i22427 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22426, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22506, double* %tmp.4.i22427 - %tmp.7.i22430 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22426, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22509, double* %tmp.7.i22430 - %tmp.0.i22433 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22426, %"struct.std::dcomplex"* %mem_tmp.637 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22435 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22433, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22436 = load double* %tmp.14.i22435 ; [#uses=1] - %tmp.17.i22438 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22433, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22439 = load double* %tmp.17.i22438 ; [#uses=1] - store double %tmp.15.i22436, double* %tmp.2.i34364 - store double %tmp.18.i22439, double* %tmp.6.i34365 - %tmp.4.i22393 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22392, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22395 = load double* %tmp.5.i27590 ; [#uses=1] - store double %tmp.6.i22395, double* %tmp.4.i22393 - %tmp.7.i22396 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22392, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22398 = load double* %tmp.8.i27593 ; [#uses=1] - store double %tmp.9.i22398, double* %tmp.7.i22396 - %tmp.0.i22399 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22392, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22401 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22399, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22402 = load double* %tmp.14.i22401 ; [#uses=1] - %tmp.17.i22404 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22399, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22405 = load double* %tmp.17.i22404 ; [#uses=1] - %tmp.7.i22359 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i22373 = add double %tmp.7.i22359, %tmp.15.i22402 ; [#uses=1] - store double %tmp.15.i22373, double* %tmp.2.i34366 - %tmp.26.i22380 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i22391 = add double %tmp.26.i22380, %tmp.18.i22405 ; [#uses=1] - store double %tmp.31.i22391, double* %tmp.6.i34367 - %tmp.4.i22339 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22338, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22341 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i22341, double* %tmp.4.i22339 - %tmp.7.i22342 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22338, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22344 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i22344, double* %tmp.7.i22342 - %tmp.0.i22345 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22338, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22347 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22345, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22348 = load double* %tmp.14.i22347 ; [#uses=1] - %tmp.17.i22350 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22345, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22351 = load double* %tmp.17.i22350 ; [#uses=1] - %tmp.4.i22325 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22324, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22327 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i22327, double* %tmp.4.i22325 - %tmp.7.i22328 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22324, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22330 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i22330, double* %tmp.7.i22328 - %tmp.0.i22331 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22324, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i22332 = getelementptr %"struct.std::dcomplex"* %mem_tmp.647, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i22333 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22331, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22334 = load double* %tmp.14.i22333 ; [#uses=1] - store double %tmp.15.i22334, double* %tmp.13.i22332 - %tmp.16.i22335 = getelementptr %"struct.std::dcomplex"* %mem_tmp.647, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i22336 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22331, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22337 = load double* %tmp.17.i22336 ; [#uses=1] - store double %tmp.18.i22337, double* %tmp.16.i22335 - %tmp.4.i22311 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22310, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22348, double* %tmp.4.i22311 - %tmp.7.i22314 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22310, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22351, double* %tmp.7.i22314 - %tmp.0.i22317 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i22310, %"struct.std::dcomplex"* %mem_tmp.647 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22319 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22317, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22320 = load double* %tmp.14.i22319 ; [#uses=1] - %tmp.17.i22322 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22317, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22323 = load double* %tmp.17.i22322 ; [#uses=1] - %tmp.4.i22297 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22296, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22320, double* %tmp.4.i22297 - %tmp.7.i22300 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22296, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22323, double* %tmp.7.i22300 - %tmp.0.i22303 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22296, %"struct.std::dcomplex"* %tmp.95 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22305 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22303, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22306 = load double* %tmp.14.i22305 ; [#uses=1] - %tmp.17.i22308 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22303, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22309 = load double* %tmp.17.i22308 ; [#uses=1] - %tmp.4.i22283 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22282, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22285 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i22285, double* %tmp.4.i22283 - %tmp.7.i22286 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22282, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22288 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i22288, double* %tmp.7.i22286 - %tmp.0.i22289 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22282, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22291 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22289, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22292 = load double* %tmp.14.i22291 ; [#uses=1] - %tmp.17.i22294 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22289, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22295 = load double* %tmp.17.i22294 ; [#uses=1] - %tmp.4.i22269 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22268, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22271 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i22271, double* %tmp.4.i22269 - %tmp.7.i22272 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22268, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22274 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i22274, double* %tmp.7.i22272 - %tmp.0.i22275 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22268, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i22276 = getelementptr %"struct.std::dcomplex"* %mem_tmp.651, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i22277 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22275, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22278 = load double* %tmp.14.i22277 ; [#uses=1] - store double %tmp.15.i22278, double* %tmp.13.i22276 - %tmp.16.i22279 = getelementptr %"struct.std::dcomplex"* %mem_tmp.651, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i22280 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22275, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22281 = load double* %tmp.17.i22280 ; [#uses=1] - store double %tmp.18.i22281, double* %tmp.16.i22279 - %tmp.4.i22255 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22254, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22292, double* %tmp.4.i22255 - %tmp.7.i22258 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22254, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22295, double* %tmp.7.i22258 - %tmp.0.i22261 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i22254, %"struct.std::dcomplex"* %mem_tmp.651 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22263 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22261, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22264 = load double* %tmp.14.i22263 ; [#uses=1] - %tmp.17.i22266 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22261, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22267 = load double* %tmp.17.i22266 ; [#uses=1] - %tmp.4.i22241 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22240, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22264, double* %tmp.4.i22241 - %tmp.7.i22244 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22240, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22267, double* %tmp.7.i22244 - %tmp.0.i22247 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22240, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i22248 = getelementptr %"struct.std::dcomplex"* %mem_tmp.648, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i22249 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22247, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22250 = load double* %tmp.14.i22249 ; [#uses=1] - store double %tmp.15.i22250, double* %tmp.13.i22248 - %tmp.16.i22251 = getelementptr %"struct.std::dcomplex"* %mem_tmp.648, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i22252 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22247, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22253 = load double* %tmp.17.i22252 ; [#uses=1] - store double %tmp.18.i22253, double* %tmp.16.i22251 - %tmp.4.i22227 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22226, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22306, double* %tmp.4.i22227 - %tmp.7.i22230 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22226, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22309, double* %tmp.7.i22230 - %tmp.0.i22233 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22226, %"struct.std::dcomplex"* %mem_tmp.648 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22235 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22233, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22236 = load double* %tmp.14.i22235 ; [#uses=1] - %tmp.17.i22238 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22233, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22239 = load double* %tmp.17.i22238 ; [#uses=1] - %tmp.4.i22213 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22212, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22215 = load double* %tmp.5.i34082 ; [#uses=1] - store double %tmp.6.i22215, double* %tmp.4.i22213 - %tmp.7.i22216 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22212, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22218 = load double* %tmp.8.i34085 ; [#uses=1] - store double %tmp.9.i22218, double* %tmp.7.i22216 - %tmp.0.i22219 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22212, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22221 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22219, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22222 = load double* %tmp.14.i22221 ; [#uses=1] - %tmp.17.i22224 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22219, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22225 = load double* %tmp.17.i22224 ; [#uses=1] - %tmp.4.i22199 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22198, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22201 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i22201, double* %tmp.4.i22199 - %tmp.7.i22202 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22198, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22204 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i22204, double* %tmp.7.i22202 - %tmp.0.i22205 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22198, %"struct.std::dcomplex"* %tmp.62 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i22206 = getelementptr %"struct.std::dcomplex"* %mem_tmp.655, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i22207 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22205, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22208 = load double* %tmp.14.i22207 ; [#uses=1] - store double %tmp.15.i22208, double* %tmp.13.i22206 - %tmp.16.i22209 = getelementptr %"struct.std::dcomplex"* %mem_tmp.655, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i22210 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22205, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22211 = load double* %tmp.17.i22210 ; [#uses=1] - store double %tmp.18.i22211, double* %tmp.16.i22209 - %tmp.4.i22185 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22184, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22222, double* %tmp.4.i22185 - %tmp.7.i22188 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22184, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22225, double* %tmp.7.i22188 - %tmp.0.i22191 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i22184, %"struct.std::dcomplex"* %mem_tmp.655 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22193 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22191, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22194 = load double* %tmp.14.i22193 ; [#uses=1] - %tmp.17.i22196 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22191, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22197 = load double* %tmp.17.i22196 ; [#uses=1] - %tmp.4.i22171 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22170, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22194, double* %tmp.4.i22171 - %tmp.7.i22174 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22170, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22197, double* %tmp.7.i22174 - %tmp.0.i22177 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22170, %"struct.std::dcomplex"* %tmp.1075 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i22178 = getelementptr %"struct.std::dcomplex"* %mem_tmp.652, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i22179 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22177, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22180 = load double* %tmp.14.i22179 ; [#uses=1] - store double %tmp.15.i22180, double* %tmp.13.i22178 - %tmp.16.i22181 = getelementptr %"struct.std::dcomplex"* %mem_tmp.652, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i22182 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22177, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22183 = load double* %tmp.17.i22182 ; [#uses=1] - store double %tmp.18.i22183, double* %tmp.16.i22181 - %tmp.4.i22157 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22156, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22236, double* %tmp.4.i22157 - %tmp.7.i22160 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22156, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22239, double* %tmp.7.i22160 - %tmp.0.i22163 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22156, %"struct.std::dcomplex"* %mem_tmp.652 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22165 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22163, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22166 = load double* %tmp.14.i22165 ; [#uses=1] - %tmp.17.i22168 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22163, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22169 = load double* %tmp.17.i22168 ; [#uses=1] - store double %tmp.15.i22166, double* %tmp.2.i34364 - store double %tmp.18.i22169, double* %tmp.6.i34365 - %tmp.4.i22123 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22122, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22125 = load double* %tmp.5.i33866 ; [#uses=1] - store double %tmp.6.i22125, double* %tmp.4.i22123 - %tmp.7.i22126 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22122, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22128 = load double* %tmp.8.i33869 ; [#uses=1] - store double %tmp.9.i22128, double* %tmp.7.i22126 - %tmp.0.i22129 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22122, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22131 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22129, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22132 = load double* %tmp.14.i22131 ; [#uses=1] - %tmp.17.i22134 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22129, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22135 = load double* %tmp.17.i22134 ; [#uses=1] - %tmp.7.i22089 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i22103 = add double %tmp.7.i22089, %tmp.15.i22132 ; [#uses=1] - store double %tmp.15.i22103, double* %tmp.2.i34366 - %tmp.26.i22110 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i22121 = add double %tmp.26.i22110, %tmp.18.i22135 ; [#uses=1] - store double %tmp.31.i22121, double* %tmp.6.i34367 - %tmp.4.i22069 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22068, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22071 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i22071, double* %tmp.4.i22069 - %tmp.7.i22072 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22068, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22074 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i22074, double* %tmp.7.i22072 - %tmp.0.i22075 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22068, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22077 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22075, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22078 = load double* %tmp.14.i22077 ; [#uses=1] - %tmp.17.i22080 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22075, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22081 = load double* %tmp.17.i22080 ; [#uses=1] - %tmp.4.i22055 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22054, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22057 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i22057, double* %tmp.4.i22055 - %tmp.7.i22058 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22054, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22060 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i22060, double* %tmp.7.i22058 - %tmp.0.i22061 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22054, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i22062 = getelementptr %"struct.std::dcomplex"* %mem_tmp.662, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i22063 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22061, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22064 = load double* %tmp.14.i22063 ; [#uses=1] - store double %tmp.15.i22064, double* %tmp.13.i22062 - %tmp.16.i22065 = getelementptr %"struct.std::dcomplex"* %mem_tmp.662, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i22066 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22061, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22067 = load double* %tmp.17.i22066 ; [#uses=1] - store double %tmp.18.i22067, double* %tmp.16.i22065 - %tmp.4.i22041 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22040, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22078, double* %tmp.4.i22041 - %tmp.7.i22044 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22040, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22081, double* %tmp.7.i22044 - %tmp.0.i22047 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i22040, %"struct.std::dcomplex"* %mem_tmp.662 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22049 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22047, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22050 = load double* %tmp.14.i22049 ; [#uses=1] - %tmp.17.i22052 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22047, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22053 = load double* %tmp.17.i22052 ; [#uses=1] - %tmp.4.i22027 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22026, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22050, double* %tmp.4.i22027 - %tmp.7.i22030 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22026, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22053, double* %tmp.7.i22030 - %tmp.0.i22033 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22026, %"struct.std::dcomplex"* %tmp.1075 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22035 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22033, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22036 = load double* %tmp.14.i22035 ; [#uses=1] - %tmp.17.i22038 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22033, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22039 = load double* %tmp.17.i22038 ; [#uses=1] - %tmp.4.i22013 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22012, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22015 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i22015, double* %tmp.4.i22013 - %tmp.7.i22016 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i22012, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22018 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i22018, double* %tmp.7.i22016 - %tmp.0.i22019 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i22012, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i22021 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22019, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22022 = load double* %tmp.14.i22021 ; [#uses=1] - %tmp.17.i22024 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22019, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22025 = load double* %tmp.17.i22024 ; [#uses=1] - %tmp.4.i21999 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21998, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i22001 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i22001, double* %tmp.4.i21999 - %tmp.7.i22002 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21998, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i22004 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i22004, double* %tmp.7.i22002 - %tmp.0.i22005 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21998, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i22006 = getelementptr %"struct.std::dcomplex"* %mem_tmp.666, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i22007 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22005, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i22008 = load double* %tmp.14.i22007 ; [#uses=1] - store double %tmp.15.i22008, double* %tmp.13.i22006 - %tmp.16.i22009 = getelementptr %"struct.std::dcomplex"* %mem_tmp.666, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i22010 = getelementptr %"struct.std::dcomplex"* %tmp.0.i22005, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i22011 = load double* %tmp.17.i22010 ; [#uses=1] - store double %tmp.18.i22011, double* %tmp.16.i22009 - %tmp.4.i21985 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21984, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22022, double* %tmp.4.i21985 - %tmp.7.i21988 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21984, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22025, double* %tmp.7.i21988 - %tmp.0.i21991 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i21984, %"struct.std::dcomplex"* %mem_tmp.666 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21993 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21991, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21994 = load double* %tmp.14.i21993 ; [#uses=1] - %tmp.17.i21996 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21991, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21997 = load double* %tmp.17.i21996 ; [#uses=1] - %tmp.4.i21971 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21970, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i21994, double* %tmp.4.i21971 - %tmp.7.i21974 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21970, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i21997, double* %tmp.7.i21974 - %tmp.0.i21977 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21970, %"struct.std::dcomplex"* %tmp.30 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i21978 = getelementptr %"struct.std::dcomplex"* %mem_tmp.663, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i21979 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21977, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21980 = load double* %tmp.14.i21979 ; [#uses=1] - store double %tmp.15.i21980, double* %tmp.13.i21978 - %tmp.16.i21981 = getelementptr %"struct.std::dcomplex"* %mem_tmp.663, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i21982 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21977, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21983 = load double* %tmp.17.i21982 ; [#uses=1] - store double %tmp.18.i21983, double* %tmp.16.i21981 - %tmp.4.i21957 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21956, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i22036, double* %tmp.4.i21957 - %tmp.7.i21960 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21956, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i22039, double* %tmp.7.i21960 - %tmp.0.i21963 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21956, %"struct.std::dcomplex"* %mem_tmp.663 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21965 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21963, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21966 = load double* %tmp.14.i21965 ; [#uses=1] - %tmp.17.i21968 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21963, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21969 = load double* %tmp.17.i21968 ; [#uses=1] - %tmp.4.i21943 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21942, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i21945 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i21945, double* %tmp.4.i21943 - %tmp.7.i21946 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21942, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i21948 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i21948, double* %tmp.7.i21946 - %tmp.0.i21949 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21942, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21951 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21949, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21952 = load double* %tmp.14.i21951 ; [#uses=1] - %tmp.17.i21954 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21949, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21955 = load double* %tmp.17.i21954 ; [#uses=1] - %tmp.4.i21929 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21928, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i21931 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i21931, double* %tmp.4.i21929 - %tmp.7.i21932 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21928, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i21934 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i21934, double* %tmp.7.i21932 - %tmp.0.i21935 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21928, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i21936 = getelementptr %"struct.std::dcomplex"* %mem_tmp.670, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i21937 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21935, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21938 = load double* %tmp.14.i21937 ; [#uses=1] - store double %tmp.15.i21938, double* %tmp.13.i21936 - %tmp.16.i21939 = getelementptr %"struct.std::dcomplex"* %mem_tmp.670, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i21940 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21935, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21941 = load double* %tmp.17.i21940 ; [#uses=1] - store double %tmp.18.i21941, double* %tmp.16.i21939 - %tmp.4.i21915 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21914, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i21952, double* %tmp.4.i21915 - %tmp.7.i21918 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21914, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i21955, double* %tmp.7.i21918 - %tmp.0.i21921 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i21914, %"struct.std::dcomplex"* %mem_tmp.670 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21923 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21921, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21924 = load double* %tmp.14.i21923 ; [#uses=1] - %tmp.17.i21926 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21921, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21927 = load double* %tmp.17.i21926 ; [#uses=1] - %tmp.4.i21901 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21900, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i21924, double* %tmp.4.i21901 - %tmp.7.i21904 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21900, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i21927, double* %tmp.7.i21904 - %tmp.0.i21907 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21900, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i21908 = getelementptr %"struct.std::dcomplex"* %mem_tmp.667, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i21909 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21907, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21910 = load double* %tmp.14.i21909 ; [#uses=1] - store double %tmp.15.i21910, double* %tmp.13.i21908 - %tmp.16.i21911 = getelementptr %"struct.std::dcomplex"* %mem_tmp.667, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i21912 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21907, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21913 = load double* %tmp.17.i21912 ; [#uses=1] - store double %tmp.18.i21913, double* %tmp.16.i21911 - %tmp.4.i21887 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21886, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i21966, double* %tmp.4.i21887 - %tmp.7.i21890 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21886, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i21969, double* %tmp.7.i21890 - %tmp.0.i21893 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21886, %"struct.std::dcomplex"* %mem_tmp.667 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21895 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21893, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21896 = load double* %tmp.14.i21895 ; [#uses=1] - %tmp.17.i21898 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21893, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21899 = load double* %tmp.17.i21898 ; [#uses=1] - store double %tmp.15.i21896, double* %tmp.2.i34364 - store double %tmp.18.i21899, double* %tmp.6.i34365 - %tmp.4.i21853 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21852, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i21855 = load double* %tmp.5.i34136 ; [#uses=1] - store double %tmp.6.i21855, double* %tmp.4.i21853 - %tmp.7.i21856 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21852, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i21858 = load double* %tmp.8.i34139 ; [#uses=1] - store double %tmp.9.i21858, double* %tmp.7.i21856 - %tmp.0.i21859 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21852, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21861 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21859, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21862 = load double* %tmp.14.i21861 ; [#uses=1] - %tmp.17.i21864 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21859, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21865 = load double* %tmp.17.i21864 ; [#uses=1] - %tmp.7.i21819 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i21833 = add double %tmp.7.i21819, %tmp.15.i21862 ; [#uses=1] - store double %tmp.15.i21833, double* %tmp.2.i34366 - %tmp.26.i21840 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i21851 = add double %tmp.26.i21840, %tmp.18.i21865 ; [#uses=1] - store double %tmp.31.i21851, double* %tmp.6.i34367 - %tmp.4.i21799 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21798, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i21801 = load double* %tmp.5.i29864 ; [#uses=1] - store double %tmp.6.i21801, double* %tmp.4.i21799 - %tmp.7.i21802 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21798, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i21804 = load double* %tmp.8.i29867 ; [#uses=1] - store double %tmp.9.i21804, double* %tmp.7.i21802 - %tmp.0.i21805 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21798, %"struct.std::dcomplex"* %ret4 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21807 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21805, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21808 = load double* %tmp.14.i21807 ; [#uses=1] - %tmp.17.i21810 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21805, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21811 = load double* %tmp.17.i21810 ; [#uses=1] - %tmp.7.i21765 = load double* %tmp.2.i34368 ; [#uses=1] - %tmp.15.i21779 = add double %tmp.7.i21765, %tmp.15.i21808 ; [#uses=1] - store double %tmp.15.i21779, double* %tmp.2.i34368 - %tmp.26.i21786 = load double* %tmp.6.i34369 ; [#uses=1] - %tmp.31.i21797 = add double %tmp.26.i21786, %tmp.18.i21811 ; [#uses=1] - store double %tmp.31.i21797, double* %tmp.6.i34369 - store double 0.000000e+00, double* %tmp.2.i34366 - store double 0.000000e+00, double* %tmp.6.i34367 - %tmp.4.i21743 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21742, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i21745 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i21745, double* %tmp.4.i21743 - %tmp.7.i21746 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21742, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i21748 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i21748, double* %tmp.7.i21746 - %tmp.0.i21749 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21742, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21751 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21749, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21752 = load double* %tmp.14.i21751 ; [#uses=1] - %tmp.17.i21754 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21749, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21755 = load double* %tmp.17.i21754 ; [#uses=1] - %tmp.4.i21729 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21728, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i21731 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i21731, double* %tmp.4.i21729 - %tmp.7.i21732 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21728, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i21734 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i21734, double* %tmp.7.i21732 - %tmp.0.i21735 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21728, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i21736 = getelementptr %"struct.std::dcomplex"* %mem_tmp.678, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i21737 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21735, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21738 = load double* %tmp.14.i21737 ; [#uses=1] - store double %tmp.15.i21738, double* %tmp.13.i21736 - %tmp.16.i21739 = getelementptr %"struct.std::dcomplex"* %mem_tmp.678, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i21740 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21735, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21741 = load double* %tmp.17.i21740 ; [#uses=1] - store double %tmp.18.i21741, double* %tmp.16.i21739 - %tmp.4.i21715 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21714, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i21752, double* %tmp.4.i21715 - %tmp.7.i21718 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21714, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i21755, double* %tmp.7.i21718 - %tmp.0.i21721 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i21714, %"struct.std::dcomplex"* %mem_tmp.678 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21723 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21721, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21724 = load double* %tmp.14.i21723 ; [#uses=1] - %tmp.17.i21726 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21721, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21727 = load double* %tmp.17.i21726 ; [#uses=1] - %tmp.4.i21701 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21700, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i21724, double* %tmp.4.i21701 - %tmp.7.i21704 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21700, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i21727, double* %tmp.7.i21704 - %tmp.0.i21707 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21700, %"struct.std::dcomplex"* %tmp.220 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21709 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21707, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21710 = load double* %tmp.14.i21709 ; [#uses=1] - %tmp.17.i21712 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21707, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21713 = load double* %tmp.17.i21712 ; [#uses=1] - %tmp.4.i21687 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21686, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i21689 = load double* %tmp.5.i34352 ; [#uses=1] - store double %tmp.6.i21689, double* %tmp.4.i21687 - %tmp.7.i21690 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21686, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i21692 = load double* %tmp.8.i34355 ; [#uses=1] - store double %tmp.9.i21692, double* %tmp.7.i21690 - %tmp.0.i21693 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21686, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21695 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21693, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21696 = load double* %tmp.14.i21695 ; [#uses=1] - %tmp.17.i21698 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21693, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21699 = load double* %tmp.17.i21698 ; [#uses=1] - %tmp.4.i21673 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21672, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i21675 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i21675, double* %tmp.4.i21673 - %tmp.7.i21676 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21672, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i21678 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i21678, double* %tmp.7.i21676 - %tmp.0.i21679 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21672, %"struct.std::dcomplex"* %tmp.12 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i21680 = getelementptr %"struct.std::dcomplex"* %mem_tmp.682, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i21681 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21679, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21682 = load double* %tmp.14.i21681 ; [#uses=1] - store double %tmp.15.i21682, double* %tmp.13.i21680 - %tmp.16.i21683 = getelementptr %"struct.std::dcomplex"* %mem_tmp.682, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i21684 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21679, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21685 = load double* %tmp.17.i21684 ; [#uses=1] - store double %tmp.18.i21685, double* %tmp.16.i21683 - %tmp.4.i21659 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21658, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i21696, double* %tmp.4.i21659 - %tmp.7.i21662 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21658, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i21699, double* %tmp.7.i21662 - %tmp.0.i21665 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i21658, %"struct.std::dcomplex"* %mem_tmp.682 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21667 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21665, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21668 = load double* %tmp.14.i21667 ; [#uses=1] - %tmp.17.i21670 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21665, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21671 = load double* %tmp.17.i21670 ; [#uses=1] - %tmp.4.i21645 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21644, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i21668, double* %tmp.4.i21645 - %tmp.7.i21648 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21644, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i21671, double* %tmp.7.i21648 - %tmp.0.i21651 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21644, %"struct.std::dcomplex"* %tmp.1075 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i21652 = getelementptr %"struct.std::dcomplex"* %mem_tmp.679, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i21653 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21651, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21654 = load double* %tmp.14.i21653 ; [#uses=1] - store double %tmp.15.i21654, double* %tmp.13.i21652 - %tmp.16.i21655 = getelementptr %"struct.std::dcomplex"* %mem_tmp.679, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i21656 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21651, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21657 = load double* %tmp.17.i21656 ; [#uses=1] - store double %tmp.18.i21657, double* %tmp.16.i21655 - %tmp.4.i21631 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21630, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i21710, double* %tmp.4.i21631 - %tmp.7.i21634 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21630, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i21713, double* %tmp.7.i21634 - %tmp.0.i21637 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21630, %"struct.std::dcomplex"* %mem_tmp.679 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21639 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21637, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21640 = load double* %tmp.14.i21639 ; [#uses=1] - %tmp.17.i21642 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21637, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21643 = load double* %tmp.17.i21642 ; [#uses=1] - %tmp.4.i21617 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21616, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i21619 = load double* %tmp.5.i33146 ; [#uses=1] - store double %tmp.6.i21619, double* %tmp.4.i21617 - %tmp.7.i21620 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21616, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i21622 = load double* %tmp.8.i33149 ; [#uses=1] - store double %tmp.9.i21622, double* %tmp.7.i21620 - %tmp.0.i21623 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21616, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21625 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21623, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21626 = load double* %tmp.14.i21625 ; [#uses=1] - %tmp.17.i21628 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21623, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21629 = load double* %tmp.17.i21628 ; [#uses=1] - %tmp.4.i21603 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21602, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i21605 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i21605, double* %tmp.4.i21603 - %tmp.7.i21606 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21602, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i21608 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i21608, double* %tmp.7.i21606 - %tmp.0.i21609 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21602, %"struct.std::dcomplex"* %tmp.226 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i21610 = getelementptr %"struct.std::dcomplex"* %mem_tmp.686, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i21611 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21609, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21612 = load double* %tmp.14.i21611 ; [#uses=1] - store double %tmp.15.i21612, double* %tmp.13.i21610 - %tmp.16.i21613 = getelementptr %"struct.std::dcomplex"* %mem_tmp.686, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i21614 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21609, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21615 = load double* %tmp.17.i21614 ; [#uses=1] - store double %tmp.18.i21615, double* %tmp.16.i21613 - %tmp.4.i21589 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21588, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i21626, double* %tmp.4.i21589 - %tmp.7.i21592 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21588, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i21629, double* %tmp.7.i21592 - %tmp.0.i21595 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i21588, %"struct.std::dcomplex"* %mem_tmp.686 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21597 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21595, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21598 = load double* %tmp.14.i21597 ; [#uses=1] - %tmp.17.i21600 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21595, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21601 = load double* %tmp.17.i21600 ; [#uses=1] - %tmp.4.i21575 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21574, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i21598, double* %tmp.4.i21575 - %tmp.7.i21578 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21574, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i21601, double* %tmp.7.i21578 - %tmp.0.i21581 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21574, %"struct.std::dcomplex"* %tmp.30 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i21582 = getelementptr %"struct.std::dcomplex"* %mem_tmp.683, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i21583 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21581, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21584 = load double* %tmp.14.i21583 ; [#uses=1] - store double %tmp.15.i21584, double* %tmp.13.i21582 - %tmp.16.i21585 = getelementptr %"struct.std::dcomplex"* %mem_tmp.683, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i21586 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21581, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21587 = load double* %tmp.17.i21586 ; [#uses=1] - store double %tmp.18.i21587, double* %tmp.16.i21585 - %tmp.4.i21561 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21560, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i21640, double* %tmp.4.i21561 - %tmp.7.i21564 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21560, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i21643, double* %tmp.7.i21564 - %tmp.0.i21567 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexpLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21560, %"struct.std::dcomplex"* %mem_tmp.683 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21569 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21567, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21570 = load double* %tmp.14.i21569 ; [#uses=1] - %tmp.17.i21572 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21567, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21573 = load double* %tmp.17.i21572 ; [#uses=1] - store double %tmp.15.i21570, double* %tmp.2.i34364 - store double %tmp.18.i21573, double* %tmp.6.i34365 - %tmp.4.i21527 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21526, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i21529 = load double* %tmp.5.i33326 ; [#uses=1] - store double %tmp.6.i21529, double* %tmp.4.i21527 - %tmp.7.i21530 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21526, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i21532 = load double* %tmp.8.i33329 ; [#uses=1] - store double %tmp.9.i21532, double* %tmp.7.i21530 - %tmp.0.i21533 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21526, %"struct.std::dcomplex"* %ret3 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21535 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21533, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21536 = load double* %tmp.14.i21535 ; [#uses=1] - %tmp.17.i21538 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21533, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21539 = load double* %tmp.17.i21538 ; [#uses=1] - %tmp.7.i21493 = load double* %tmp.2.i34366 ; [#uses=1] - %tmp.15.i21507 = add double %tmp.7.i21493, %tmp.15.i21536 ; [#uses=1] - store double %tmp.15.i21507, double* %tmp.2.i34366 - %tmp.26.i21514 = load double* %tmp.6.i34367 ; [#uses=1] - %tmp.31.i21525 = add double %tmp.26.i21514, %tmp.18.i21539 ; [#uses=1] - store double %tmp.31.i21525, double* %tmp.6.i34367 - %tmp.4.i21473 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21472, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i21475 = load double* %tmp.5.i28602 ; [#uses=1] - store double %tmp.6.i21475, double* %tmp.4.i21473 - %tmp.7.i21476 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21472, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i21478 = load double* %tmp.8.i28605 ; [#uses=1] - store double %tmp.9.i21478, double* %tmp.7.i21476 - %tmp.0.i21479 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21472, %"struct.std::dcomplex"* %tmp.21 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21481 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21479, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21482 = load double* %tmp.14.i21481 ; [#uses=1] - %tmp.17.i21484 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21479, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21485 = load double* %tmp.17.i21484 ; [#uses=1] - %tmp.4.i21459 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21458, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.6.i21461 = load double* %tmp.5.i34282 ; [#uses=1] - store double %tmp.6.i21461, double* %tmp.4.i21459 - %tmp.7.i21462 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21458, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.9.i21464 = load double* %tmp.8.i34285 ; [#uses=1] - store double %tmp.9.i21464, double* %tmp.7.i21462 - %tmp.0.i21465 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmLERKS_( %"struct.std::dcomplex"* %mem_tmp.i21458, %"struct.std::dcomplex"* %tmp.1036 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.13.i21466 = getelementptr %"struct.std::dcomplex"* %mem_tmp.693, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.14.i21467 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21465, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21468 = load double* %tmp.14.i21467 ; [#uses=1] - store double %tmp.15.i21468, double* %tmp.13.i21466 - %tmp.16.i21469 = getelementptr %"struct.std::dcomplex"* %mem_tmp.693, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.17.i21470 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21465, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp.18.i21471 = load double* %tmp.17.i21470 ; [#uses=1] - store double %tmp.18.i21471, double* %tmp.16.i21469 - %tmp.4.i21445 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21444, i32 0, i32 0, i32 0 ; [#uses=1] - store double %tmp.15.i21482, double* %tmp.4.i21445 - %tmp.7.i21448 = getelementptr %"struct.std::dcomplex"* %mem_tmp.i21444, i32 0, i32 0, i32 1 ; [#uses=1] - store double %tmp.18.i21485, double* %tmp.7.i21448 - %tmp.0.i21451 = call %"struct.std::dcomplex"* @_ZNSt8dcomplexmIERKS_( %"struct.std::dcomplex"* %mem_tmp.i21444, %"struct.std::dcomplex"* %mem_tmp.693 ) ; <%"struct.std::dcomplex"*> [#uses=2] - %tmp.14.i21453 = getelementptr %"struct.std::dcomplex"* %tmp.0.i21451, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp.15.i21454 = load double* %tmp.14.i21453 ; [#uses=1] [... 13686 lines stripped ...] From sabre at nondot.org Thu Jan 8 13:02:04 2009 From: sabre at nondot.org (Chris Lattner) Date: Thu, 08 Jan 2009 19:02:04 -0000 Subject: [llvm-commits] [llvm] r61932 - /llvm/trunk/utils/llvmdo Message-ID: <200901081902.n08J24cM030560@zion.cs.uiuc.edu> Author: lattner Date: Thu Jan 8 13:02:03 2009 New Revision: 61932 URL: http://llvm.org/viewvc/llvm-project?rev=61932&view=rev Log: remove some exclusions that don't exist anymore. Modified: llvm/trunk/utils/llvmdo Modified: llvm/trunk/utils/llvmdo URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/llvmdo?rev=61932&r1=61931&r2=61932&view=diff ============================================================================== --- llvm/trunk/utils/llvmdo (original) +++ llvm/trunk/utils/llvmdo Thu Jan 8 13:02:03 2009 @@ -163,11 +163,8 @@ -o -name ltmain.sh \ -o -name aclocal.m4 \ -o -name acinclude.m4 \ - -o -name *VerifierIsReallySlow.llx \ -o -name *LoopSimplifyCrash.ll \ -o -name *AST-Remove.ll \ - -o -name llvmAsmParser.cpp \ - -o -name llvmAsmParser.h \ -o -name PPCPerfectShuffle.h \ " From sabre at nondot.org Thu Jan 8 13:05:36 2009 From: sabre at nondot.org (Chris Lattner) Date: Thu, 08 Jan 2009 19:05:36 -0000 Subject: [llvm-commits] [llvm] r61933 - /llvm/trunk/lib/AsmParser/LLParser.cpp Message-ID: <200901081905.n08J5aOV030658@zion.cs.uiuc.edu> Author: lattner Date: Thu Jan 8 13:05:36 2009 New Revision: 61933 URL: http://llvm.org/viewvc/llvm-project?rev=61933&view=rev Log: one more crash from PR3281, we now diagnose: llvm-as: t.ll:2:39: function may not return opaque type %"bwmoyl" = tail call coldcc opaque @g() ^ Modified: llvm/trunk/lib/AsmParser/LLParser.cpp Modified: llvm/trunk/lib/AsmParser/LLParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=61933&r1=61932&r2=61933&view=diff ============================================================================== --- llvm/trunk/lib/AsmParser/LLParser.cpp (original) +++ llvm/trunk/lib/AsmParser/LLParser.cpp Thu Jan 8 13:05:36 2009 @@ -564,11 +564,18 @@ // Otherwise, create a new forward reference for this value and remember it. GlobalValue *FwdVal; - if (const FunctionType *FT = dyn_cast(PTy->getElementType())) + if (const FunctionType *FT = dyn_cast(PTy->getElementType())) { + // Function types can return opaque but functions can't. + if (isa(FT->getReturnType())) { + Error(Loc, "function may not return opaque type"); + return 0; + } + FwdVal = Function::Create(FT, GlobalValue::ExternalWeakLinkage, Name, M); - else + } else { FwdVal = new GlobalVariable(PTy->getElementType(), false, GlobalValue::ExternalWeakLinkage, 0, Name, M); + } ForwardRefVals[Name] = std::make_pair(FwdVal, Loc); return FwdVal; From sabre at nondot.org Thu Jan 8 13:28:38 2009 From: sabre at nondot.org (Chris Lattner) Date: Thu, 08 Jan 2009 19:28:38 -0000 Subject: [llvm-commits] [llvm] r61934 - in /llvm/trunk: lib/Analysis/ValueTracking.cpp test/Transforms/InstCombine/2009-01-08-AlignAlloca.ll Message-ID: <200901081928.n08JScrB031557@zion.cs.uiuc.edu> Author: lattner Date: Thu Jan 8 13:28:38 2009 New Revision: 61934 URL: http://llvm.org/viewvc/llvm-project?rev=61934&view=rev Log: ValueTracker can't assume that an alloca with no specified alignment will get its preferred alignment. It has to be careful and cautiously assume it will just get the ABI alignment. This prevents instcombine from rounding up the alignment of a load/store without adjusting the alignment of the alloca. Added: llvm/trunk/test/Transforms/InstCombine/2009-01-08-AlignAlloca.ll Modified: llvm/trunk/lib/Analysis/ValueTracking.cpp Modified: llvm/trunk/lib/Analysis/ValueTracking.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ValueTracking.cpp?rev=61934&r1=61933&r2=61934&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/ValueTracking.cpp (original) +++ llvm/trunk/lib/Analysis/ValueTracking.cpp Thu Jan 8 13:28:38 2009 @@ -416,7 +416,7 @@ unsigned Align = AI->getAlignment(); if (Align == 0 && TD) { if (isa(AI)) - Align = TD->getPrefTypeAlignment(AI->getType()->getElementType()); + Align = TD->getABITypeAlignment(AI->getType()->getElementType()); else if (isa(AI)) { // Malloc returns maximally aligned memory. Align = TD->getABITypeAlignment(AI->getType()->getElementType()); Added: llvm/trunk/test/Transforms/InstCombine/2009-01-08-AlignAlloca.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/2009-01-08-AlignAlloca.ll?rev=61934&view=auto ============================================================================== --- llvm/trunk/test/Transforms/InstCombine/2009-01-08-AlignAlloca.ll (added) +++ llvm/trunk/test/Transforms/InstCombine/2009-01-08-AlignAlloca.ll Thu Jan 8 13:28:38 2009 @@ -0,0 +1,26 @@ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep {, align 4} | count 4 +; rdar://6480438 +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128" +target triple = "i386-apple-darwin9.6" + %struct.Key = type { { i32, i32 } } + %struct.anon = type <{ i8, [3 x i8], i32 }> + +define i32 @bar(i64 %key_token2) nounwind { +entry: + %iospec = alloca %struct.Key ; <%struct.Key*> [#uses=3] + %ret = alloca i32 ; [#uses=2] + %"alloca point" = bitcast i32 0 to i32 ; [#uses=0] + %0 = getelementptr %struct.Key* %iospec, i32 0, i32 0 ; <{ i32, i32 }*> [#uses=2] + %1 = getelementptr { i32, i32 }* %0, i32 0, i32 0 ; [#uses=1] + store i32 0, i32* %1, align 4 + %2 = getelementptr { i32, i32 }* %0, i32 0, i32 1 ; [#uses=1] + store i32 0, i32* %2, align 4 + %3 = getelementptr %struct.Key* %iospec, i32 0, i32 0 ; <{ i32, i32 }*> [#uses=1] + %4 = bitcast { i32, i32 }* %3 to i64* ; [#uses=1] + store i64 %key_token2, i64* %4, align 4 + %5 = call i32 (...)* @foo(%struct.Key* byval align 4 %iospec, i32* %ret) nounwind ; [#uses=0] + %6 = load i32* %ret, align 4 ; [#uses=1] + ret i32 %6 +} + +declare i32 @foo(...) From gohman at apple.com Thu Jan 8 13:45:00 2009 From: gohman at apple.com (Dan Gohman) Date: Thu, 8 Jan 2009 11:45:00 -0800 Subject: [llvm-commits] [llvm] r61934 - in /llvm/trunk: lib/Analysis/ValueTracking.cpp test/Transforms/InstCombine/2009-01-08-AlignAlloca.ll In-Reply-To: <200901081928.n08JScrB031557@zion.cs.uiuc.edu> References: <200901081928.n08JScrB031557@zion.cs.uiuc.edu> Message-ID: <1FBC044A-F1E3-42B7-BD4E-F7CB34E282A9@apple.com> On Jan 8, 2009, at 11:28 AM, Chris Lattner wrote: > Author: lattner > Date: Thu Jan 8 13:28:38 2009 > New Revision: 61934 > > URL: http://llvm.org/viewvc/llvm-project?rev=61934&view=rev > Log: > ValueTracker can't assume that an alloca with no specified alignment > will get its preferred alignment. It has to be careful and > cautiously assume > it will just get the ABI alignment. This prevents instcombine from > rounding > up the alignment of a load/store without adjusting the alignment of > the alloca. When would a default-alignment Alloca not be given its preferred alignment? Or, if you prefer that instcombine make give all Allocas an explicit alignment, could you add a comment to this code? Thanks, Dan From clattner at apple.com Thu Jan 8 14:48:42 2009 From: clattner at apple.com (Chris Lattner) Date: Thu, 8 Jan 2009 12:48:42 -0800 Subject: [llvm-commits] [llvm] r61934 - in /llvm/trunk: lib/Analysis/ValueTracking.cpp test/Transforms/InstCombine/2009-01-08-AlignAlloca.ll In-Reply-To: <1FBC044A-F1E3-42B7-BD4E-F7CB34E282A9@apple.com> References: <200901081928.n08JScrB031557@zion.cs.uiuc.edu> <1FBC044A-F1E3-42B7-BD4E-F7CB34E282A9@apple.com> Message-ID: <33C8737D-6D38-46A1-B12A-B85F0BBF4DEB@apple.com> On Jan 8, 2009, at 11:45 AM, Dan Gohman wrote: >> it will just get the ABI alignment. This prevents instcombine from >> rounding >> up the alignment of a load/store without adjusting the alignment of >> the alloca. > > When would a default-alignment Alloca not be given its preferred > alignment? > > Or, if you prefer that instcombine make give all Allocas an explicit > alignment, could you add a comment to this code? InstCombine already has code to handle this (see EnforceKnownAlignment). It isn't catching this case, but it could be made to do so if it were important. -Chris From baldrick at free.fr Thu Jan 8 14:55:50 2009 From: baldrick at free.fr (Duncan Sands) Date: Thu, 08 Jan 2009 20:55:50 -0000 Subject: [llvm-commits] [llvm] r61944 - /llvm/trunk/lib/VMCore/Globals.cpp Message-ID: <200901082055.n08KtopS002330@zion.cs.uiuc.edu> Author: baldrick Date: Thu Jan 8 14:55:49 2009 New Revision: 61944 URL: http://llvm.org/viewvc/llvm-project?rev=61944&view=rev Log: Use mayBeOverridden here, in anticipation of the day when more linkage types will be handled. Modified: llvm/trunk/lib/VMCore/Globals.cpp Modified: llvm/trunk/lib/VMCore/Globals.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Globals.cpp?rev=61944&r1=61943&r2=61944&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Globals.cpp (original) +++ llvm/trunk/lib/VMCore/Globals.cpp Thu Jan 8 14:55:49 2009 @@ -252,7 +252,7 @@ SmallPtrSet Visited; // Check if we need to stop early. - if (stopOnWeak && hasWeakLinkage()) + if (stopOnWeak && mayBeOverridden()) return this; const GlobalValue *GV = getAliasedGlobal(); @@ -260,7 +260,7 @@ // Iterate over aliasing chain, stopping on weak alias if necessary. while (const GlobalAlias *GA = dyn_cast(GV)) { - if (stopOnWeak && GA->hasWeakLinkage()) + if (stopOnWeak && GA->mayBeOverridden()) break; GV = GA->getAliasedGlobal(); From echeng at apple.com Thu Jan 8 15:31:07 2009 From: echeng at apple.com (Evan Cheng) Date: Thu, 8 Jan 2009 13:31:07 -0800 Subject: [llvm-commits] [llvm] r61802 - /llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp In-Reply-To: <200901060753.n067rXqB026545@zion.cs.uiuc.edu> References: <200901060753.n067rXqB026545@zion.cs.uiuc.edu> Message-ID: Can you add some test cases to the various pre-splitting features you are adding? Thanks, Evan On Jan 5, 2009, at 11:53 PM, Owen Anderson wrote: > Author: resistor > Date: Tue Jan 6 01:53:32 2009 > New Revision: 61802 > > URL: http://llvm.org/viewvc/llvm-project?rev=61802&view=rev > Log: > The phi construction algorithm used for interval reconstruction is > complicated by > two address instructions. We need to keep track of things we've > processed AS USES > independetly of whether we've processed them as defs. > > This fixes all known miscompilations when reconstruction is turned on. > > Modified: > llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp > > Modified: llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp?rev=61802&r1=61801&r2=61802&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp (original) > +++ llvm/trunk/lib/CodeGen/PreAllocSplitting.cpp Tue Jan 6 01:53:32 > 2009 > @@ -175,6 +175,7 @@ > VNInfo* PerformPHIConstruction(MachineBasicBlock::iterator use, > MachineBasicBlock* MBB, > LiveInterval* LI, > + SmallPtrSet& > Visited, > DenseMap 2> >& Defs, > DenseMap 2> >& Uses, > DenseMap VNInfo*>& NewVNs, > @@ -593,6 +594,7 @@ > > MachineBasicBlock::iterator use, > > MachineBasicBlock* MBB, > > LiveInterval* LI, > + SmallPtrSet 4>& Visited, > DenseMap 2> >& Defs, > DenseMap 2> >& Uses, > DenseMap VNInfo*>& NewVNs, > @@ -600,7 +602,9 @@ > DenseMap VNInfo*>& Phis, > bool toplevel, bool > intrablock) { > // Return memoized result if it's available. > - if (intrablock && NewVNs.count(use)) > + if (toplevel && Visited.count(use) && NewVNs.count(use)) > + return NewVNs[use]; > + else if (!toplevel && intrablock && NewVNs.count(use)) > return NewVNs[use]; > else if (!intrablock && LiveOut.count(MBB)) > return LiveOut[MBB]; > @@ -624,8 +628,8 @@ > > if (MBB->pred_size() == 1) { > Phis[MBB] = ret = PerformPHIConstruction((*MBB->pred_begin())- > >end(), > - *(MBB->pred_begin()), LI, > Defs, > - Uses, NewVNs, LiveOut, > Phis, > + *(MBB->pred_begin()), LI, > Visited, > + Defs, Uses, NewVNs, > LiveOut, Phis, > false, false); > unsigned EndIndex = 0; > if (intrablock) { > @@ -646,9 +650,9 @@ > DenseMap IncomingVNs; > for (MachineBasicBlock::pred_iterator PI = MBB->pred_begin(), > PE = MBB->pred_end(); PI != PE; ++PI) { > - VNInfo* Incoming = PerformPHIConstruction((*PI)->end(), > *PI, LI, Defs, > - Uses, NewVNs, LiveOut, > Phis, > - false, false); > + VNInfo* Incoming = PerformPHIConstruction((*PI)->end(), > *PI, LI, > + Visited, Defs, Uses, > NewVNs, > + LiveOut, Phis, false, > false); > if (Incoming != 0) > IncomingVNs[*PI] = Incoming; > } > @@ -732,7 +736,7 @@ > > // Now, recursively phi construct the VNInfo for the use we found, > // and then extend it to include the instruction we care about > - ret = PerformPHIConstruction(walker, MBB, LI, Defs, Uses, > + ret = PerformPHIConstruction(walker, MBB, LI, Visited, Defs, > Uses, > NewVNs, LiveOut, Phis, false, true); > > // FIXME: Need to set kills properly for inter-block stuff. > @@ -789,7 +793,7 @@ > if (foundDef) > ret = NewVNs[walker]; > else > - ret = PerformPHIConstruction(walker, MBB, LI, Defs, Uses, > + ret = PerformPHIConstruction(walker, MBB, LI, Visited, Defs, > Uses, > NewVNs, LiveOut, Phis, false, > true); > > if (foundUse && LI->isKill(ret, StartIndex)) > @@ -803,8 +807,11 @@ > > // Memoize results so we don't have to recompute them. > if (!intrablock) LiveOut[MBB] = ret; > - else NewVNs[use] = ret; > - > + else { > + NewVNs[use] = ret; > + Visited.insert(use); > + } > + > return ret; > } > > @@ -831,7 +838,14 @@ > unsigned DefIdx = LIs->getInstructionIndex(&*DI); > DefIdx = LiveIntervals::getDefIndex(DefIdx); > > - VNInfo* NewVN = LI->getNextValue(DefIdx, /*FIXME*/ 0, Alloc); > + VNInfo* NewVN = LI->getNextValue(DefIdx, 0, Alloc); > + > + // If the def is a move, set the copy field. > + unsigned source, dest; > + if (TII->isMoveInstr(*DI, source, dest)) > + if (dest == LI->reg) > + NewVN->copy = &*DI; > + > NewVNs[&*DI] = NewVN; > } > > @@ -845,9 +859,10 @@ > // the way. > DenseMap LiveOut; > DenseMap Phis; > + SmallPtrSet Visited; > for (MachineRegisterInfo::use_iterator UI = MRI->use_begin(LI->reg), > UE = MRI->use_end(); UI != UE; ++UI) { > - PerformPHIConstruction(&*UI, UI->getParent(), LI, Defs, > + PerformPHIConstruction(&*UI, UI->getParent(), LI, Visited, Defs, > Uses, NewVNs, LiveOut, Phis, true, true); > } > > @@ -1116,7 +1131,6 @@ > } > > RepairLiveInterval(CurrLI, ValNo, DefMI, RestoreIdx); > - > ++NumSplits; > ++NumRemats; > return true; > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From echeng at apple.com Thu Jan 8 15:36:36 2009 From: echeng at apple.com (Evan Cheng) Date: Thu, 8 Jan 2009 13:36:36 -0800 Subject: [llvm-commits] [llvm] r61928 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp In-Reply-To: <200901081719.n08HJMkY027122@zion.cs.uiuc.edu> References: <200901081719.n08HJMkY027122@zion.cs.uiuc.edu> Message-ID: On Jan 8, 2009, at 9:19 AM, Devang Patel wrote: > Author: dpatel > Date: Thu Jan 8 11:19:22 2009 > New Revision: 61928 > > URL: http://llvm.org/viewvc/llvm-project?rev=61928&view=rev > Log: > Add DebugInfo based APIs to record source line info. > > Modified: > llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp > > Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61928&r1=61927&r2=61928&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) > +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Thu Jan 8 > 11:19:22 2009 > @@ -1166,6 +1166,26 @@ > }; > > // > = > = > = > ----------------------------------------------------------------------= > ==// > +/// SourceLineInfo - This class is used to record source line > correspondence. > +/// > +class SrcLineInfo { > + unsigned Line; // Source line number. > + unsigned Column; // Source column. > + unsigned SourceID; // Source ID number. > + unsigned LabelID; // Label in code ID number. Do we have to use unsigned for each of these fields? Can we shrink the data structure (if that matters)? > > +public: > + SrcLineInfo(unsigned L, unsigned C, unsigned S, unsigned I) > + : Line(L), Column(C), SourceID(S), LabelID(I) {} > + > + // Accessors > + unsigned getLine() const { return Line; } > + unsigned getColumn() const { return Column; } > + unsigned getSourceID() const { return SourceID; } > + unsigned getLabelID() const { return LabelID; } > +}; > + > + > +// > = > = > = > ----------------------------------------------------------------------= > ==// > /// SrcFileInfo - This class is used to track source information. > /// > class SrcFileInfo { > @@ -1259,7 +1279,7 @@ > /// CompileUnits - All the compile units involved in this build. > The index > /// of each entry in this vector corresponds to the sources in MMI. > std::vector CompileUnits; > - DenseMap DW_CUs; > + DenseMap DW_CUs; > > /// AbbreviationsSet - Used to uniquely define abbreviations. > /// > @@ -1277,6 +1297,9 @@ > // SourceFiles - Uniquing vector for source files. > UniqueVector SrcFiles; > > + // Lines - List of of source line correspondence. > + std::vector Lines; > + > FoldingSet ValuesSet; > > /// Values - A list of all the unique values in use. > @@ -2539,6 +2562,23 @@ > return VariableDie; > } > > + unsigned RecordSourceLine(Value *V, unsigned Line, unsigned Col) { > + CompileUnit *Unit = DW_CUs[V]; > + assert (Unit && "Unable to find CompileUnit"); > + unsigned ID = NextLabelID(); > + Lines.push_back(SrcLineInfo(Line, Col, Unit->getID(), ID)); > + return ID; > + } Comments plz. :-) > > + > + unsigned getRecordSourceLineCount() { > + return Lines.size(); > + } Does this gets called a lot? If so, we want to keep the count separately. Evan > > + > + unsigned RecordSource(const std::string &Directory, > + const std::string &File) { > + unsigned DID = Directories.insert(Directory); > + return SrcFiles.insert(SrcFileInfo(DID,File)); > + } > > /// RecordRegionStart - Indicate the start of a region. > /// > @@ -3447,9 +3487,8 @@ > for (std::vector::iterator RI = Result.begin(), > RE = Result.end(); RI != RE; ++RI) { > DICompileUnit *DIUnit = new DICompileUnit(*RI); > - unsigned DID = Directories.insert(DIUnit->getDirectory()); > - unsigned ID = SrcFiles.insert(SrcFileInfo(DID, > - DIUnit- > >getFilename())); > + unsigned ID = RecordSource(DIUnit->getDirectory(), > + DIUnit->getFilename()); > > DIE *Die = new DIE(DW_TAG_compile_unit); > AddSectionOffset(Die, DW_AT_stmt_list, DW_FORM_data4, > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From echeng at apple.com Thu Jan 8 15:38:45 2009 From: echeng at apple.com (Evan Cheng) Date: Thu, 8 Jan 2009 13:38:45 -0800 Subject: [llvm-commits] [llvm] r61908 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp In-Reply-To: <200901080233.n082XfDo020155@zion.cs.uiuc.edu> References: <200901080233.n082XfDo020155@zion.cs.uiuc.edu> Message-ID: <3C336037-F225-486C-B58B-EAFC37C38F57@apple.com> On Jan 7, 2009, at 6:33 PM, Devang Patel wrote: > Author: dpatel > Date: Wed Jan 7 20:33:41 2009 > New Revision: 61908 > > URL: http://llvm.org/viewvc/llvm-project?rev=61908&view=rev > Log: > Add APIs to manage scope using DebugInfo interface. > This is a shameless copy of similar APIs from MachineModuleInfo. The > copy from MMI will be deleted in near future. > > Modified: > llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp > > Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=61908&r1=61907&r2=61908&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original) > +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Wed Jan 7 > 20:33:41 2009 > @@ -1193,6 +1193,60 @@ > }; > > // > = > = > = > ----------------------------------------------------------------------= > ==// > +/// DbgVariable - This class is used to track local variable > information. > +/// > +class DbgVariable { > +private: > + DIVariable *Var; // Variable Descriptor. > + unsigned FrameIndex; // Variable frame index. > + > +public: > + DbgVariable(DIVariable *V, unsigned I) : Var(V), FrameIndex(I) {} > + > + // Accessors. > + DIVariable *getVariable() const { return Var; } > + unsigned getFrameIndex() const { return FrameIndex; } > +}; > + > +// > = > = > = > ----------------------------------------------------------------------= > ==// > +/// DbgScope - This class is used to track scope information. > +/// > +class DbgScope { > +private: > + DbgScope *Parent; // Parent to this scope. > + DIDescriptor *Desc; // Debug info descriptor for > scope. > + // Either subprogram or block. > + unsigned StartLabelID; // Label ID of the beginning > of scope. > + unsigned EndLabelID; // Label ID of the end of > scope. > + SmallVector Scopes; // Scopes defined in scope. > + SmallVector Variables;// Variables declared in > scope. 32 seems a bit excessive, no? Evan > > + > +public: > + DbgScope(DbgScope *P, DIDescriptor *D) > + : Parent(P), Desc(D), StartLabelID(0), EndLabelID(0), Scopes(), > Variables() > + {} > + ~DbgScope(); > + > + // Accessors. > + DbgScope *getParent() const { return Parent; } > + DIDescriptor *getDesc() const { return Desc; } > + unsigned getStartLabelID() const { return StartLabelID; } > + unsigned getEndLabelID() const { return EndLabelID; } > + SmallVector &getScopes() { return Scopes; } > + SmallVector &getVariables() { return > Variables; } Return SmallVectorImpl instead? Evan > > + void setStartLabelID(unsigned S) { StartLabelID = S; } > + void setEndLabelID(unsigned E) { EndLabelID = E; } > + > + /// AddScope - Add a scope to the scope. > + /// > + void AddScope(DbgScope *S) { Scopes.push_back(S); } > + > + /// AddVariable - Add a variable to the scope. > + /// > + void AddVariable(DbgVariable *V) { Variables.push_back(V); } > +}; > + > +// > = > = > = > ----------------------------------------------------------------------= > ==// > /// DwarfDebug - Emits Dwarf debug directives. > /// > class DwarfDebug : public Dwarf { > @@ -1253,6 +1307,44 @@ > /// > bool shouldEmit; > > + // RootScope - Top level scope for the current function. > + // > + DbgScope *RootDbgScope; > + > + // DbgScopeMap - Tracks the scopes in the current function. > + DenseMap DbgScopeMap; > + > + // DbgLabelIDList - One entry per assigned label. Normally the > entry is equal to > + // the list index(+1). If the entry is zero then the label has > been deleted. > + // Any other value indicates the label has been deleted by is > mapped to > + // another label. > + SmallVector DbgLabelIDList; > + > + /// NextLabelID - Return the next unique label id. > + /// > + unsigned NextLabelID() { > + unsigned ID = (unsigned)DbgLabelIDList.size() + 1; > + DbgLabelIDList.push_back(ID); > + return ID; > + } > + > + /// RemapLabel - Indicate that a label has been merged into > another. > + /// > + void RemapLabel(unsigned OldLabelID, unsigned NewLabelID) { > + assert(0 < OldLabelID && OldLabelID <= DbgLabelIDList.size() && > + "Old label ID out of range."); > + assert(NewLabelID <= DbgLabelIDList.size() && > + "New label ID out of range."); > + DbgLabelIDList[OldLabelID - 1] = NewLabelID; > + } > + > + /// MappedLabel - Find out the label's final ID. Zero indicates > deletion. > + /// ID != Mapped ID indicates that the label was folded into > another label. > + unsigned MappedLabel(unsigned LabelID) const { > + assert(LabelID <= DbgLabelIDList.size() && "Debug label ID out > of range."); > + return LabelID ? DbgLabelIDList[LabelID - 1] : 0; > + } > + > struct FunctionDebugFrameInfo { > unsigned Number; > std::vector Moves; > @@ -1494,6 +1586,25 @@ > > /// AddSourceLine - Add location information to specified debug > information > /// entry. > + void AddSourceLine(DIE *Die, DIVariable *V) { > + unsigned FileID = 0; > + unsigned Line = V->getLineNumber(); > + if (V->getVersion() < DIDescriptor::Version7) { > + // Version6 or earlier. Use compile unit info to get file id. > + CompileUnit *Unit = FindCompileUnit(V->getCompileUnit()); > + FileID = Unit->getID(); > + } else { > + // Version7 or newer, use filename and directory info from > DIVariable > + // directly. > + unsigned DID = Directories.idFor(V->getDirectory()); > + FileID = SrcFiles.idFor(SrcFileInfo(DID, V->getFilename())); > + } > + AddUInt(Die, DW_AT_decl_file, 0, FileID); > + AddUInt(Die, DW_AT_decl_line, 0, Line); > + } > + > + /// AddSourceLine - Add location information to specified debug > information > + /// entry. > void AddSourceLine(DIE *Die, DIGlobal *G) { > unsigned FileID = 0; > unsigned Line = G->getLineNumber(); > @@ -2393,6 +2504,191 @@ > return VariableDie; > } > > + /// NewScopeVariable - Create a new scope variable. > + /// > + DIE *NewDbgScopeVariable(DbgVariable *DV, CompileUnit *Unit) { > + // Get the descriptor. > + DIVariable *VD = DV->getVariable(); > + > + // Translate tag to proper Dwarf tag. The result variable is > dropped for > + // now. > + unsigned Tag; > + switch (VD->getTag()) { > + case DW_TAG_return_variable: return NULL; > + case DW_TAG_arg_variable: Tag = DW_TAG_formal_parameter; > break; > + case DW_TAG_auto_variable: // fall thru > + default: Tag = DW_TAG_variable; break; > + } > + > + // Define variable debug information entry. > + DIE *VariableDie = new DIE(Tag); > + AddString(VariableDie, DW_AT_name, DW_FORM_string, VD- > >getName()); > + > + // Add source line info if available. > + AddSourceLine(VariableDie, VD); > + > + // Add variable type. > + AddType(Unit, VariableDie, VD->getType()); > + > + // Add variable address. > + MachineLocation Location; > + Location.set(RI->getFrameRegister(*MF), > + RI->getFrameIndexOffset(*MF, DV->getFrameIndex())); > + AddAddress(VariableDie, DW_AT_location, Location); > + > + return VariableDie; > + } > + > + > + /// getOrCreateScope - Returns the scope associated with the > given descriptor. > + /// > + DbgScope *getOrCreateScope(GlobalVariable *V) { > + DbgScope *&Slot = DbgScopeMap[V]; > + if (!Slot) { > + // FIXME - breaks down when the context is an inlined function. > + DIDescriptor ParentDesc; > + DIBlock *DB = new DIBlock(V); > + if (DIBlock *Block = dyn_cast(DB)) { > + ParentDesc = Block->getContext(); > + } > + DbgScope *Parent = ParentDesc.isNull() ? > + getOrCreateScope(ParentDesc.getGV()) : NULL; > + Slot = new DbgScope(Parent, DB); > + if (Parent) { > + Parent->AddScope(Slot); > + } else if (RootDbgScope) { > + // FIXME - Add inlined function scopes to the root so we > can delete > + // them later. Long term, handle inlined functions properly. > + RootDbgScope->AddScope(Slot); > + } else { > + // First function is top level function. > + RootDbgScope = Slot; > + } > + } > + return Slot; > + } > + > + /// ConstructDbgScope - Construct the components of a scope. > + /// > + void ConstructDbgScope(DbgScope *ParentScope, > + unsigned ParentStartID, unsigned > ParentEndID, > + DIE *ParentDie, CompileUnit *Unit) { > + // Add variables to scope. > + SmallVector &Variables = ParentScope- > >getVariables(); > + for (unsigned i = 0, N = Variables.size(); i < N; ++i) { > + DIE *VariableDie = NewDbgScopeVariable(Variables[i], Unit); > + if (VariableDie) ParentDie->AddChild(VariableDie); > + } > + > + // Add nested scopes. > + SmallVector &Scopes = ParentScope->getScopes(); > + for (unsigned j = 0, M = Scopes.size(); j < M; ++j) { > + // Define the Scope debug information entry. > + DbgScope *Scope = Scopes[j]; > + // FIXME - Ignore inlined functions for the time being. > + if (!Scope->getParent()) continue; > + > + unsigned StartID = MappedLabel(Scope->getStartLabelID()); > + unsigned EndID = MappedLabel(Scope->getEndLabelID()); > + > + // Ignore empty scopes. > + if (StartID == EndID && StartID != 0) continue; > + if (Scope->getScopes().empty() && Scope- > >getVariables().empty()) continue; > + > + if (StartID == ParentStartID && EndID == ParentEndID) { > + // Just add stuff to the parent scope. > + ConstructDbgScope(Scope, ParentStartID, ParentEndID, > ParentDie, Unit); > + } else { > + DIE *ScopeDie = new DIE(DW_TAG_lexical_block); > + > + // Add the scope bounds. > + if (StartID) { > + AddLabel(ScopeDie, DW_AT_low_pc, DW_FORM_addr, > + DWLabel("label", StartID)); > + } else { > + AddLabel(ScopeDie, DW_AT_low_pc, DW_FORM_addr, > + DWLabel("func_begin", SubprogramCount)); > + } > + if (EndID) { > + AddLabel(ScopeDie, DW_AT_high_pc, DW_FORM_addr, > + DWLabel("label", EndID)); > + } else { > + AddLabel(ScopeDie, DW_AT_high_pc, DW_FORM_addr, > + DWLabel("func_end", SubprogramCount)); > + } > + > + // Add the scope contents. > + ConstructDbgScope(Scope, StartID, EndID, ScopeDie, Unit); > + ParentDie->AddChild(ScopeDie); > + } > + } > + } > + > + /// ConstructRootDbgScope - Construct the scope for the subprogram. > + /// > + void ConstructRootDbgScope(DbgScope *RootScope) { > + // Exit if there is no root scope. > + if (!RootScope) return; > + > + // Get the subprogram debug information entry. > + DISubprogram *SPD = cast(RootScope->getDesc()); > + > + // Get the compile unit context. > + CompileUnit *Unit = FindCompileUnit(SPD->getCompileUnit()); > + > + // Get the subprogram die. > + DIE *SPDie = Unit->getDieMapSlotFor(SPD->getGV()); > + assert(SPDie && "Missing subprogram descriptor"); > + > + // Add the function bounds. > + AddLabel(SPDie, DW_AT_low_pc, DW_FORM_addr, > + DWLabel("func_begin", SubprogramCount)); > + AddLabel(SPDie, DW_AT_high_pc, DW_FORM_addr, > + DWLabel("func_end", SubprogramCount)); > + MachineLocation Location(RI->getFrameRegister(*MF)); > + AddAddress(SPDie, DW_AT_frame_base, Location); > + > + ConstructDbgScope(RootScope, 0, 0, SPDie, Unit); > + } > + > + /// ConstructDefaultDbgScope - Construct a default scope for the > subprogram. > + /// > + void ConstructDefaultDbgScope(MachineFunction *MF) { > + // Find the correct subprogram descriptor. > + std::string SPName = "llvm.dbg.subprograms"; > + std::vector Result; > + getGlobalVariablesUsing(*M, SPName, Result); > + for (std::vector::iterator I = Result.begin(), > + E = Result.end(); I != E; ++I) { > + > + DISubprogram *SPD = new DISubprogram(*I); > + > + if (SPD->getName() == MF->getFunction()->getName()) { > + // Get the compile unit context. > + CompileUnit *Unit = FindCompileUnit(SPD->getCompileUnit()); > + > + // Get the subprogram die. > + DIE *SPDie = Unit->getDieMapSlotFor(SPD->getGV()); > + assert(SPDie && "Missing subprogram descriptor"); > + > + // Add the function bounds. > + AddLabel(SPDie, DW_AT_low_pc, DW_FORM_addr, > + DWLabel("func_begin", SubprogramCount)); > + AddLabel(SPDie, DW_AT_high_pc, DW_FORM_addr, > + DWLabel("func_end", SubprogramCount)); > + > + MachineLocation Location(RI->getFrameRegister(*MF)); > + AddAddress(SPDie, DW_AT_frame_base, Location); > + return; > + } > + } > +#if 0 > + // FIXME: This is causing an abort because C++ mangled names > are compared > + // with their unmangled counterparts. See PR2885. Don't do this > assert. > + assert(0 && "Couldn't find DIE for machine function!"); > +#endif > + } > + > /// ConstructScope - Construct the components of a scope. > /// > void ConstructScope(DebugScope *ParentScope, > @@ -3282,6 +3578,7 @@ > , SectionSourceLines() > , didInitial(false) > , shouldEmit(false) > + , RootDbgScope(NULL) > { > } > virtual ~DwarfDebug() { > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From dalej at apple.com Thu Jan 8 15:45:23 2009 From: dalej at apple.com (Dale Johannesen) Date: Thu, 08 Jan 2009 21:45:23 -0000 Subject: [llvm-commits] [llvm] r61946 - in /llvm/trunk: include/llvm/Transforms/Utils/InlineCost.h lib/Transforms/Utils/InlineCost.cpp test/Transforms/Inline/2009-01-08-NoInlineDynamicAlloca.ll test/Transforms/Inline/dynamic_alloca_test.ll test/Transforms/PruneEH/2008-09-05-CGUpdate.ll Message-ID: <200901082145.n08LjNRj009377@zion.cs.uiuc.edu> Author: johannes Date: Thu Jan 8 15:45:23 2009 New Revision: 61946 URL: http://llvm.org/viewvc/llvm-project?rev=61946&view=rev Log: Do not inline functions with (dynamic) alloca into functions that don't already have a (dynamic) alloca. Dynamic allocas cause inefficient codegen and we shouldn't propagate this (behavior follows gcc). Two existing tests assumed such inlining would be done; they are hacked by adding an alloca in the caller, preserving the point of the tests. Added: llvm/trunk/test/Transforms/Inline/2009-01-08-NoInlineDynamicAlloca.ll Modified: llvm/trunk/include/llvm/Transforms/Utils/InlineCost.h llvm/trunk/lib/Transforms/Utils/InlineCost.cpp llvm/trunk/test/Transforms/Inline/dynamic_alloca_test.ll llvm/trunk/test/Transforms/PruneEH/2008-09-05-CGUpdate.ll Modified: llvm/trunk/include/llvm/Transforms/Utils/InlineCost.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/InlineCost.h?rev=61946&r1=61945&r2=61946&view=diff ============================================================================== --- llvm/trunk/include/llvm/Transforms/Utils/InlineCost.h (original) +++ llvm/trunk/include/llvm/Transforms/Utils/InlineCost.h Thu Jan 8 15:45:23 2009 @@ -78,6 +78,9 @@ /// caller. bool NeverInline; + /// usesDynamicAlloca - True if this function calls alloca (in the C sense). + bool usesDynamicAlloca; + /// NumInsts, NumBlocks - Keep track of how large each function is, which /// is used to estimate the code size cost of inlining it. unsigned NumInsts, NumBlocks; @@ -93,8 +96,8 @@ /// entry here. std::vector ArgumentWeights; - FunctionInfo() : NeverInline(false), NumInsts(0), NumBlocks(0), - NumVectorInsts(0) {} + FunctionInfo() : NeverInline(false), usesDynamicAlloca(false), NumInsts(0), + NumBlocks(0), NumVectorInsts(0) {} /// analyzeFunction - Fill in the current structure with information /// gleaned from the specified function. Modified: llvm/trunk/lib/Transforms/Utils/InlineCost.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/InlineCost.cpp?rev=61946&r1=61945&r2=61946&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Utils/InlineCost.cpp (original) +++ llvm/trunk/lib/Transforms/Utils/InlineCost.cpp Thu Jan 8 15:45:23 2009 @@ -126,6 +126,11 @@ NumInsts += 5; } + if (const AllocaInst *AI = dyn_cast(II)) { + if (!isa(AI->getArraySize())) + this->usesDynamicAlloca = true; + } + if (isa(II) || isa(II->getType())) ++NumVectorInsts; @@ -173,7 +178,7 @@ SmallPtrSet &NeverInline) { Instruction *TheCall = CS.getInstruction(); Function *Callee = CS.getCalledFunction(); - const Function *Caller = TheCall->getParent()->getParent(); + Function *Caller = TheCall->getParent()->getParent(); // Don't inline a directly recursive call. if (Caller == Callee || @@ -219,11 +224,24 @@ // If we haven't calculated this information yet, do so now. if (CalleeFI.NumBlocks == 0) CalleeFI.analyzeFunction(Callee); - + // If we should never inline this, return a huge cost. if (CalleeFI.NeverInline) return InlineCost::getNever(); + // Get infomation about the caller... + FunctionInfo &CallerFI = CachedFunctionInfo[Caller]; + + // If we haven't calculated this information yet, do so now. + if (CallerFI.NumBlocks == 0) + CallerFI.analyzeFunction(Caller); + + // Don't inline a callee with dynamic alloca into a caller without them. + // Functions containing dynamic alloca's are inefficient in various ways; + // don't create more inefficiency. + if (CalleeFI.usesDynamicAlloca && !CallerFI.usesDynamicAlloca) + return InlineCost::getNever(); + // FIXME: It would be nice to kill off CalleeFI.NeverInline. Then we // could move this up and avoid computing the FunctionInfo for // things we are going to just return always inline for. This Added: llvm/trunk/test/Transforms/Inline/2009-01-08-NoInlineDynamicAlloca.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/2009-01-08-NoInlineDynamicAlloca.ll?rev=61946&view=auto ============================================================================== --- llvm/trunk/test/Transforms/Inline/2009-01-08-NoInlineDynamicAlloca.ll (added) +++ llvm/trunk/test/Transforms/Inline/2009-01-08-NoInlineDynamicAlloca.ll Thu Jan 8 15:45:23 2009 @@ -0,0 +1,36 @@ +; RUN: llvm-as < %s | opt -inline | llvm-dis | grep call +; Do not inline calls to variable-sized alloca. + + at q = common global i8* null ; [#uses=1] + +define i8* @a(i32 %i) nounwind { +entry: + %i_addr = alloca i32 ; [#uses=2] + %retval = alloca i8* ; [#uses=1] + %p = alloca i8* ; [#uses=2] + %"alloca point" = bitcast i32 0 to i32 ; [#uses=0] + store i32 %i, i32* %i_addr + %0 = load i32* %i_addr, align 4 ; [#uses=1] + %1 = alloca i8, i32 %0 ; [#uses=1] + store i8* %1, i8** %p, align 4 + %2 = load i8** %p, align 4 ; [#uses=1] + store i8* %2, i8** @q, align 4 + br label %return + +return: ; preds = %entry + %retval1 = load i8** %retval ; [#uses=1] + ret i8* %retval1 +} + +define void @b(i32 %i) nounwind { +entry: + %i_addr = alloca i32 ; [#uses=2] + %"alloca point" = bitcast i32 0 to i32 ; [#uses=0] + store i32 %i, i32* %i_addr + %0 = load i32* %i_addr, align 4 ; [#uses=1] + %1 = call i8* @a(i32 %0) nounwind ; [#uses=0] + br label %return + +return: ; preds = %entry + ret void +} Modified: llvm/trunk/test/Transforms/Inline/dynamic_alloca_test.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/dynamic_alloca_test.ll?rev=61946&r1=61945&r2=61946&view=diff ============================================================================== --- llvm/trunk/test/Transforms/Inline/dynamic_alloca_test.ll (original) +++ llvm/trunk/test/Transforms/Inline/dynamic_alloca_test.ll Thu Jan 8 15:45:23 2009 @@ -1,5 +1,7 @@ ; Test that functions with dynamic allocas get inlined in a case where ; naively inlining it would result in a miscompilation. +; Functions with dynamic allocas can only be inlined into functions that +; already have dynamic allocas. ; RUN: llvm-as < %s | opt -inline | llvm-dis | \ ; RUN: grep llvm.stacksave @@ -16,6 +18,8 @@ define void @foo(i32 %N) { ;