Mercurial > projects > ldc
comparison gen/statements.cpp @ 1571:8d086d552909
IntegerType is now contextifed.
Requires llvm >= 78969. resistor says this will be the last context API change :)
author | Benjamin Kramer <benny.kra@gmail.com> |
---|---|
date | Fri, 14 Aug 2009 00:39:18 +0200 |
parents | 755abafbf25d |
children | 332925de1881 |
comparison
equal
deleted
inserted
replaced
1570:ab03cfb3a212 | 1571:8d086d552909 |
---|---|
59 // is there a return value expression? | 59 // is there a return value expression? |
60 if (exp) | 60 if (exp) |
61 { | 61 { |
62 // if the functions return type is void this means that | 62 // if the functions return type is void this means that |
63 // we are returning through a pointer argument | 63 // we are returning through a pointer argument |
64 if (p->topfunc()->getReturnType() == LLType::VoidTy) | 64 if (p->topfunc()->getReturnType() == LLType::getVoidTy(gIR->context())) |
65 { | 65 { |
66 // sanity check | 66 // sanity check |
67 IrFunction* f = p->func(); | 67 IrFunction* f = p->func(); |
68 assert(f->decl->ir.irFunc->retArg); | 68 assert(f->decl->ir.irFunc->retArg); |
69 | 69 |
80 | 80 |
81 // emit dbg end function | 81 // emit dbg end function |
82 if (global.params.symdebug) DtoDwarfFuncEnd(f->decl); | 82 if (global.params.symdebug) DtoDwarfFuncEnd(f->decl); |
83 | 83 |
84 // emit ret | 84 // emit ret |
85 llvm::ReturnInst::Create(p->scopebb()); | 85 llvm::ReturnInst::Create(gIR->context(), p->scopebb()); |
86 | 86 |
87 } | 87 } |
88 // the return type is not void, so this is a normal "register" return | 88 // the return type is not void, so this is a normal "register" return |
89 else | 89 else |
90 { | 90 { |
121 } | 121 } |
122 | 122 |
123 DtoEnclosingHandlers(loc, NULL); | 123 DtoEnclosingHandlers(loc, NULL); |
124 | 124 |
125 if (global.params.symdebug) DtoDwarfFuncEnd(p->func()->decl); | 125 if (global.params.symdebug) DtoDwarfFuncEnd(p->func()->decl); |
126 llvm::ReturnInst::Create(v, p->scopebb()); | 126 llvm::ReturnInst::Create(gIR->context(), v, p->scopebb()); |
127 } | 127 } |
128 } | 128 } |
129 // no return value expression means it's a void function | 129 // no return value expression means it's a void function |
130 else | 130 else |
131 { | 131 { |
132 assert(p->topfunc()->getReturnType() == LLType::VoidTy); | 132 assert(p->topfunc()->getReturnType() == LLType::getVoidTy(gIR->context())); |
133 DtoEnclosingHandlers(loc, NULL); | 133 DtoEnclosingHandlers(loc, NULL); |
134 | 134 |
135 if (global.params.symdebug) DtoDwarfFuncEnd(p->func()->decl); | 135 if (global.params.symdebug) DtoDwarfFuncEnd(p->func()->decl); |
136 llvm::ReturnInst::Create(p->scopebb()); | 136 llvm::ReturnInst::Create(gIR->context(), p->scopebb()); |
137 } | 137 } |
138 | 138 |
139 // the return terminated this basicblock, start a new one | 139 // the return terminated this basicblock, start a new one |
140 llvm::BasicBlock* oldend = gIR->scopeend(); | 140 llvm::BasicBlock* oldend = gIR->scopeend(); |
141 llvm::BasicBlock* bb = llvm::BasicBlock::Create("afterreturn", p->topfunc(), oldend); | 141 llvm::BasicBlock* bb = llvm::BasicBlock::Create(gIR->context(), "afterreturn", p->topfunc(), oldend); |
142 p->scope() = IRScope(bb,oldend); | 142 p->scope() = IRScope(bb,oldend); |
143 } | 143 } |
144 | 144 |
145 ////////////////////////////////////////////////////////////////////////////// | 145 ////////////////////////////////////////////////////////////////////////////// |
146 | 146 |
187 DValue* cond_e = condition->toElem(p); | 187 DValue* cond_e = condition->toElem(p); |
188 LLValue* cond_val = cond_e->getRVal(); | 188 LLValue* cond_val = cond_e->getRVal(); |
189 | 189 |
190 llvm::BasicBlock* oldend = gIR->scopeend(); | 190 llvm::BasicBlock* oldend = gIR->scopeend(); |
191 | 191 |
192 llvm::BasicBlock* ifbb = llvm::BasicBlock::Create("if", gIR->topfunc(), oldend); | 192 llvm::BasicBlock* ifbb = llvm::BasicBlock::Create(gIR->context(), "if", gIR->topfunc(), oldend); |
193 llvm::BasicBlock* endbb = llvm::BasicBlock::Create("endif", gIR->topfunc(), oldend); | 193 llvm::BasicBlock* endbb = llvm::BasicBlock::Create(gIR->context(), "endif", gIR->topfunc(), oldend); |
194 llvm::BasicBlock* elsebb = elsebody ? llvm::BasicBlock::Create("else", gIR->topfunc(), endbb) : endbb; | 194 llvm::BasicBlock* elsebb = elsebody ? llvm::BasicBlock::Create(gIR->context(), "else", gIR->topfunc(), endbb) : endbb; |
195 | 195 |
196 if (cond_val->getType() != LLType::Int1Ty) { | 196 if (cond_val->getType() != LLType::getInt1Ty(gIR->context())) { |
197 if (Logger::enabled()) | 197 if (Logger::enabled()) |
198 Logger::cout() << "if conditional: " << *cond_val << '\n'; | 198 Logger::cout() << "if conditional: " << *cond_val << '\n'; |
199 cond_val = DtoCast(loc, cond_e, Type::tbool)->getRVal(); | 199 cond_val = DtoCast(loc, cond_e, Type::tbool)->getRVal(); |
200 } | 200 } |
201 LLValue* ifgoback = llvm::BranchInst::Create(ifbb, elsebb, cond_val, gIR->scopebb()); | 201 LLValue* ifgoback = llvm::BranchInst::Create(ifbb, elsebb, cond_val, gIR->scopebb()); |
238 llvm::BasicBlock* bb = p->scopebb(); | 238 llvm::BasicBlock* bb = p->scopebb(); |
239 if (bb->empty()) { | 239 if (bb->empty()) { |
240 beginbb = bb; | 240 beginbb = bb; |
241 } | 241 } |
242 else { | 242 else { |
243 beginbb = llvm::BasicBlock::Create("scope", p->topfunc(), oldend); | 243 beginbb = llvm::BasicBlock::Create(gIR->context(), "scope", p->topfunc(), oldend); |
244 if (!p->scopereturned()) | 244 if (!p->scopereturned()) |
245 llvm::BranchInst::Create(beginbb, bb); | 245 llvm::BranchInst::Create(beginbb, bb); |
246 } | 246 } |
247 | 247 |
248 llvm::BasicBlock* endbb = llvm::BasicBlock::Create("endscope", p->topfunc(), oldend); | 248 llvm::BasicBlock* endbb = llvm::BasicBlock::Create(gIR->context(), "endscope", p->topfunc(), oldend); |
249 if (beginbb != bb) | 249 if (beginbb != bb) |
250 p->scope() = IRScope(beginbb, endbb); | 250 p->scope() = IRScope(beginbb, endbb); |
251 else | 251 else |
252 p->scope().end = endbb;*/ | 252 p->scope().end = endbb;*/ |
253 | 253 |
269 if (global.params.symdebug) | 269 if (global.params.symdebug) |
270 DtoDwarfStopPoint(loc.linnum); | 270 DtoDwarfStopPoint(loc.linnum); |
271 | 271 |
272 // create while blocks | 272 // create while blocks |
273 llvm::BasicBlock* oldend = gIR->scopeend(); | 273 llvm::BasicBlock* oldend = gIR->scopeend(); |
274 llvm::BasicBlock* whilebb = llvm::BasicBlock::Create("whilecond", gIR->topfunc(), oldend); | 274 llvm::BasicBlock* whilebb = llvm::BasicBlock::Create(gIR->context(), "whilecond", gIR->topfunc(), oldend); |
275 llvm::BasicBlock* whilebodybb = llvm::BasicBlock::Create("whilebody", gIR->topfunc(), oldend); | 275 llvm::BasicBlock* whilebodybb = llvm::BasicBlock::Create(gIR->context(), "whilebody", gIR->topfunc(), oldend); |
276 llvm::BasicBlock* endbb = llvm::BasicBlock::Create("endwhile", gIR->topfunc(), oldend); | 276 llvm::BasicBlock* endbb = llvm::BasicBlock::Create(gIR->context(), "endwhile", gIR->topfunc(), oldend); |
277 | 277 |
278 // move into the while block | 278 // move into the while block |
279 p->ir->CreateBr(whilebb); | 279 p->ir->CreateBr(whilebb); |
280 //llvm::BranchInst::Create(whilebb, gIR->scopebb()); | 280 //llvm::BranchInst::Create(whilebb, gIR->scopebb()); |
281 | 281 |
316 if (global.params.symdebug) | 316 if (global.params.symdebug) |
317 DtoDwarfStopPoint(loc.linnum); | 317 DtoDwarfStopPoint(loc.linnum); |
318 | 318 |
319 // create while blocks | 319 // create while blocks |
320 llvm::BasicBlock* oldend = gIR->scopeend(); | 320 llvm::BasicBlock* oldend = gIR->scopeend(); |
321 llvm::BasicBlock* dowhilebb = llvm::BasicBlock::Create("dowhile", gIR->topfunc(), oldend); | 321 llvm::BasicBlock* dowhilebb = llvm::BasicBlock::Create(gIR->context(), "dowhile", gIR->topfunc(), oldend); |
322 llvm::BasicBlock* condbb = llvm::BasicBlock::Create("dowhilecond", gIR->topfunc(), oldend); | 322 llvm::BasicBlock* condbb = llvm::BasicBlock::Create(gIR->context(), "dowhilecond", gIR->topfunc(), oldend); |
323 llvm::BasicBlock* endbb = llvm::BasicBlock::Create("enddowhile", gIR->topfunc(), oldend); | 323 llvm::BasicBlock* endbb = llvm::BasicBlock::Create(gIR->context(), "enddowhile", gIR->topfunc(), oldend); |
324 | 324 |
325 // move into the while block | 325 // move into the while block |
326 assert(!gIR->scopereturned()); | 326 assert(!gIR->scopereturned()); |
327 llvm::BranchInst::Create(dowhilebb, gIR->scopebb()); | 327 llvm::BranchInst::Create(dowhilebb, gIR->scopebb()); |
328 | 328 |
360 if (global.params.symdebug) | 360 if (global.params.symdebug) |
361 DtoDwarfStopPoint(loc.linnum); | 361 DtoDwarfStopPoint(loc.linnum); |
362 | 362 |
363 // create for blocks | 363 // create for blocks |
364 llvm::BasicBlock* oldend = gIR->scopeend(); | 364 llvm::BasicBlock* oldend = gIR->scopeend(); |
365 llvm::BasicBlock* forbb = llvm::BasicBlock::Create("forcond", gIR->topfunc(), oldend); | 365 llvm::BasicBlock* forbb = llvm::BasicBlock::Create(gIR->context(), "forcond", gIR->topfunc(), oldend); |
366 llvm::BasicBlock* forbodybb = llvm::BasicBlock::Create("forbody", gIR->topfunc(), oldend); | 366 llvm::BasicBlock* forbodybb = llvm::BasicBlock::Create(gIR->context(), "forbody", gIR->topfunc(), oldend); |
367 llvm::BasicBlock* forincbb = llvm::BasicBlock::Create("forinc", gIR->topfunc(), oldend); | 367 llvm::BasicBlock* forincbb = llvm::BasicBlock::Create(gIR->context(), "forinc", gIR->topfunc(), oldend); |
368 llvm::BasicBlock* endbb = llvm::BasicBlock::Create("endfor", gIR->topfunc(), oldend); | 368 llvm::BasicBlock* endbb = llvm::BasicBlock::Create(gIR->context(), "endfor", gIR->topfunc(), oldend); |
369 | 369 |
370 // init | 370 // init |
371 if (init != 0) | 371 if (init != 0) |
372 init->toIR(p); | 372 init->toIR(p); |
373 | 373 |
478 llvm::BranchInst::Create(it->breakTarget, gIR->scopebb()); | 478 llvm::BranchInst::Create(it->breakTarget, gIR->scopebb()); |
479 } | 479 } |
480 | 480 |
481 // the break terminated this basicblock, start a new one | 481 // the break terminated this basicblock, start a new one |
482 llvm::BasicBlock* oldend = gIR->scopeend(); | 482 llvm::BasicBlock* oldend = gIR->scopeend(); |
483 llvm::BasicBlock* bb = llvm::BasicBlock::Create("afterbreak", p->topfunc(), oldend); | 483 llvm::BasicBlock* bb = llvm::BasicBlock::Create(gIR->context(), "afterbreak", p->topfunc(), oldend); |
484 p->scope() = IRScope(bb,oldend); | 484 p->scope() = IRScope(bb,oldend); |
485 } | 485 } |
486 | 486 |
487 ////////////////////////////////////////////////////////////////////////////// | 487 ////////////////////////////////////////////////////////////////////////////// |
488 | 488 |
533 llvm::BranchInst::Create(it->continueTarget, gIR->scopebb()); | 533 llvm::BranchInst::Create(it->continueTarget, gIR->scopebb()); |
534 } | 534 } |
535 | 535 |
536 // the continue terminated this basicblock, start a new one | 536 // the continue terminated this basicblock, start a new one |
537 llvm::BasicBlock* oldend = gIR->scopeend(); | 537 llvm::BasicBlock* oldend = gIR->scopeend(); |
538 llvm::BasicBlock* bb = llvm::BasicBlock::Create("aftercontinue", p->topfunc(), oldend); | 538 llvm::BasicBlock* bb = llvm::BasicBlock::Create(gIR->context(), "aftercontinue", p->topfunc(), oldend); |
539 p->scope() = IRScope(bb,oldend); | 539 p->scope() = IRScope(bb,oldend); |
540 } | 540 } |
541 | 541 |
542 ////////////////////////////////////////////////////////////////////////////// | 542 ////////////////////////////////////////////////////////////////////////////// |
543 | 543 |
572 } | 572 } |
573 | 573 |
574 // create basic blocks | 574 // create basic blocks |
575 llvm::BasicBlock* oldend = p->scopeend(); | 575 llvm::BasicBlock* oldend = p->scopeend(); |
576 | 576 |
577 llvm::BasicBlock* trybb = llvm::BasicBlock::Create("try", p->topfunc(), oldend); | 577 llvm::BasicBlock* trybb = llvm::BasicBlock::Create(gIR->context(), "try", p->topfunc(), oldend); |
578 llvm::BasicBlock* finallybb = llvm::BasicBlock::Create("finally", p->topfunc(), oldend); | 578 llvm::BasicBlock* finallybb = llvm::BasicBlock::Create(gIR->context(), "finally", p->topfunc(), oldend); |
579 // the landing pad for statements in the try block | 579 // the landing pad for statements in the try block |
580 llvm::BasicBlock* landingpadbb = llvm::BasicBlock::Create("landingpad", p->topfunc(), oldend); | 580 llvm::BasicBlock* landingpadbb = llvm::BasicBlock::Create(gIR->context(), "landingpad", p->topfunc(), oldend); |
581 llvm::BasicBlock* endbb = llvm::BasicBlock::Create("endtryfinally", p->topfunc(), oldend); | 581 llvm::BasicBlock* endbb = llvm::BasicBlock::Create(gIR->context(), "endtryfinally", p->topfunc(), oldend); |
582 | 582 |
583 // pass the previous BB into this | 583 // pass the previous BB into this |
584 assert(!gIR->scopereturned()); | 584 assert(!gIR->scopereturned()); |
585 llvm::BranchInst::Create(trybb, p->scopebb()); | 585 llvm::BranchInst::Create(trybb, p->scopebb()); |
586 | 586 |
639 DtoDwarfStopPoint(loc.linnum); | 639 DtoDwarfStopPoint(loc.linnum); |
640 | 640 |
641 // create basic blocks | 641 // create basic blocks |
642 llvm::BasicBlock* oldend = p->scopeend(); | 642 llvm::BasicBlock* oldend = p->scopeend(); |
643 | 643 |
644 llvm::BasicBlock* trybb = llvm::BasicBlock::Create("try", p->topfunc(), oldend); | 644 llvm::BasicBlock* trybb = llvm::BasicBlock::Create(gIR->context(), "try", p->topfunc(), oldend); |
645 // the landing pad will be responsible for branching to the correct catch block | 645 // the landing pad will be responsible for branching to the correct catch block |
646 llvm::BasicBlock* landingpadbb = llvm::BasicBlock::Create("landingpad", p->topfunc(), oldend); | 646 llvm::BasicBlock* landingpadbb = llvm::BasicBlock::Create(gIR->context(), "landingpad", p->topfunc(), oldend); |
647 llvm::BasicBlock* endbb = llvm::BasicBlock::Create("endtrycatch", p->topfunc(), oldend); | 647 llvm::BasicBlock* endbb = llvm::BasicBlock::Create(gIR->context(), "endtrycatch", p->topfunc(), oldend); |
648 | 648 |
649 // pass the previous BB into this | 649 // pass the previous BB into this |
650 assert(!gIR->scopereturned()); | 650 assert(!gIR->scopereturned()); |
651 llvm::BranchInst::Create(trybb, p->scopebb()); | 651 llvm::BranchInst::Create(trybb, p->scopebb()); |
652 | 652 |
706 gIR->CreateCallOrInvoke(fn, arg); | 706 gIR->CreateCallOrInvoke(fn, arg); |
707 gIR->ir->CreateUnreachable(); | 707 gIR->ir->CreateUnreachable(); |
708 | 708 |
709 // need a block after the throw for now | 709 // need a block after the throw for now |
710 llvm::BasicBlock* oldend = gIR->scopeend(); | 710 llvm::BasicBlock* oldend = gIR->scopeend(); |
711 llvm::BasicBlock* bb = llvm::BasicBlock::Create("afterthrow", p->topfunc(), oldend); | 711 llvm::BasicBlock* bb = llvm::BasicBlock::Create(gIR->context(), "afterthrow", p->topfunc(), oldend); |
712 p->scope() = IRScope(bb,oldend); | 712 p->scope() = IRScope(bb,oldend); |
713 } | 713 } |
714 | 714 |
715 ////////////////////////////////////////////////////////////////////////////// | 715 ////////////////////////////////////////////////////////////////////////////// |
716 | 716 |
831 sinits.push_back(arrPtr); | 831 sinits.push_back(arrPtr); |
832 switchTable = llvm::ConstantStruct::get(sTy, sinits); | 832 switchTable = llvm::ConstantStruct::get(sTy, sinits); |
833 } | 833 } |
834 | 834 |
835 // body block | 835 // body block |
836 llvm::BasicBlock* bodybb = llvm::BasicBlock::Create("switchbody", p->topfunc(), oldend); | 836 llvm::BasicBlock* bodybb = llvm::BasicBlock::Create(gIR->context(), "switchbody", p->topfunc(), oldend); |
837 | 837 |
838 // default | 838 // default |
839 llvm::BasicBlock* defbb = 0; | 839 llvm::BasicBlock* defbb = 0; |
840 if (sdefault) { | 840 if (sdefault) { |
841 Logger::println("has default"); | 841 Logger::println("has default"); |
842 defbb = llvm::BasicBlock::Create("default", p->topfunc(), oldend); | 842 defbb = llvm::BasicBlock::Create(gIR->context(), "default", p->topfunc(), oldend); |
843 sdefault->bodyBB = defbb; | 843 sdefault->bodyBB = defbb; |
844 } | 844 } |
845 | 845 |
846 // end (break point) | 846 // end (break point) |
847 llvm::BasicBlock* endbb = llvm::BasicBlock::Create("switchend", p->topfunc(), oldend); | 847 llvm::BasicBlock* endbb = llvm::BasicBlock::Create(gIR->context(), "switchend", p->topfunc(), oldend); |
848 | 848 |
849 // condition var | 849 // condition var |
850 LLValue* condVal; | 850 LLValue* condVal; |
851 // integral switch | 851 // integral switch |
852 if (condition->type->isintegral()) { | 852 if (condition->type->isintegral()) { |
884 void CaseStatement::toIR(IRState* p) | 884 void CaseStatement::toIR(IRState* p) |
885 { | 885 { |
886 Logger::println("CaseStatement::toIR(): %s", loc.toChars()); | 886 Logger::println("CaseStatement::toIR(): %s", loc.toChars()); |
887 LOG_SCOPE; | 887 LOG_SCOPE; |
888 | 888 |
889 llvm::BasicBlock* nbb = llvm::BasicBlock::Create("case", p->topfunc(), p->scopeend()); | 889 llvm::BasicBlock* nbb = llvm::BasicBlock::Create(gIR->context(), "case", p->topfunc(), p->scopeend()); |
890 | 890 |
891 if (bodyBB && !bodyBB->getTerminator()) | 891 if (bodyBB && !bodyBB->getTerminator()) |
892 { | 892 { |
893 llvm::BranchInst::Create(nbb, bodyBB); | 893 llvm::BranchInst::Create(nbb, bodyBB); |
894 } | 894 } |
914 Logger::println("DefaultStatement::toIR(): %s", loc.toChars()); | 914 Logger::println("DefaultStatement::toIR(): %s", loc.toChars()); |
915 LOG_SCOPE; | 915 LOG_SCOPE; |
916 | 916 |
917 assert(bodyBB); | 917 assert(bodyBB); |
918 | 918 |
919 llvm::BasicBlock* nbb = llvm::BasicBlock::Create("default", p->topfunc(), p->scopeend()); | 919 llvm::BasicBlock* nbb = llvm::BasicBlock::Create(gIR->context(), "default", p->topfunc(), p->scopeend()); |
920 | 920 |
921 if (!bodyBB->getTerminator()) | 921 if (!bodyBB->getTerminator()) |
922 { | 922 { |
923 llvm::BranchInst::Create(nbb, bodyBB); | 923 llvm::BranchInst::Create(nbb, bodyBB); |
924 } | 924 } |
956 size_t nstmt = statements->dim; | 956 size_t nstmt = statements->dim; |
957 LLSmallVector<llvm::BasicBlock*, 4> blocks(nstmt, NULL); | 957 LLSmallVector<llvm::BasicBlock*, 4> blocks(nstmt, NULL); |
958 | 958 |
959 for (size_t i=0; i<nstmt; i++) | 959 for (size_t i=0; i<nstmt; i++) |
960 { | 960 { |
961 blocks[i] = llvm::BasicBlock::Create("unrolledstmt", p->topfunc(), oldend); | 961 blocks[i] = llvm::BasicBlock::Create(gIR->context(), "unrolledstmt", p->topfunc(), oldend); |
962 } | 962 } |
963 | 963 |
964 // create end block | 964 // create end block |
965 llvm::BasicBlock* endbb = llvm::BasicBlock::Create("unrolledend", p->topfunc(), oldend); | 965 llvm::BasicBlock* endbb = llvm::BasicBlock::Create(gIR->context(), "unrolledend", p->topfunc(), oldend); |
966 | 966 |
967 // enter first stmt | 967 // enter first stmt |
968 if (!p->scopereturned()) | 968 if (!p->scopereturned()) |
969 p->ir->CreateBr(blocks[0]); | 969 p->ir->CreateBr(blocks[0]); |
970 | 970 |
1068 else { | 1068 else { |
1069 new llvm::StoreInst(niters, keyvar, p->scopebb()); | 1069 new llvm::StoreInst(niters, keyvar, p->scopebb()); |
1070 } | 1070 } |
1071 | 1071 |
1072 llvm::BasicBlock* oldend = gIR->scopeend(); | 1072 llvm::BasicBlock* oldend = gIR->scopeend(); |
1073 llvm::BasicBlock* condbb = llvm::BasicBlock::Create("foreachcond", p->topfunc(), oldend); | 1073 llvm::BasicBlock* condbb = llvm::BasicBlock::Create(gIR->context(), "foreachcond", p->topfunc(), oldend); |
1074 llvm::BasicBlock* bodybb = llvm::BasicBlock::Create("foreachbody", p->topfunc(), oldend); | 1074 llvm::BasicBlock* bodybb = llvm::BasicBlock::Create(gIR->context(), "foreachbody", p->topfunc(), oldend); |
1075 llvm::BasicBlock* nextbb = llvm::BasicBlock::Create("foreachnext", p->topfunc(), oldend); | 1075 llvm::BasicBlock* nextbb = llvm::BasicBlock::Create(gIR->context(), "foreachnext", p->topfunc(), oldend); |
1076 llvm::BasicBlock* endbb = llvm::BasicBlock::Create("foreachend", p->topfunc(), oldend); | 1076 llvm::BasicBlock* endbb = llvm::BasicBlock::Create(gIR->context(), "foreachend", p->topfunc(), oldend); |
1077 | 1077 |
1078 llvm::BranchInst::Create(condbb, p->scopebb()); | 1078 llvm::BranchInst::Create(condbb, p->scopebb()); |
1079 | 1079 |
1080 // condition | 1080 // condition |
1081 p->scope() = IRScope(condbb,bodybb); | 1081 p->scope() = IRScope(condbb,bodybb); |
1161 else | 1161 else |
1162 DtoStore(upper, keyval); | 1162 DtoStore(upper, keyval); |
1163 | 1163 |
1164 // set up the block we'll need | 1164 // set up the block we'll need |
1165 llvm::BasicBlock* oldend = gIR->scopeend(); | 1165 llvm::BasicBlock* oldend = gIR->scopeend(); |
1166 llvm::BasicBlock* condbb = llvm::BasicBlock::Create("foreachrange_cond", p->topfunc(), oldend); | 1166 llvm::BasicBlock* condbb = llvm::BasicBlock::Create(gIR->context(), "foreachrange_cond", p->topfunc(), oldend); |
1167 llvm::BasicBlock* bodybb = llvm::BasicBlock::Create("foreachrange_body", p->topfunc(), oldend); | 1167 llvm::BasicBlock* bodybb = llvm::BasicBlock::Create(gIR->context(), "foreachrange_body", p->topfunc(), oldend); |
1168 llvm::BasicBlock* nextbb = llvm::BasicBlock::Create("foreachrange_next", p->topfunc(), oldend); | 1168 llvm::BasicBlock* nextbb = llvm::BasicBlock::Create(gIR->context(), "foreachrange_next", p->topfunc(), oldend); |
1169 llvm::BasicBlock* endbb = llvm::BasicBlock::Create("foreachrange_end", p->topfunc(), oldend); | 1169 llvm::BasicBlock* endbb = llvm::BasicBlock::Create(gIR->context(), "foreachrange_end", p->topfunc(), oldend); |
1170 | 1170 |
1171 // jump to condition | 1171 // jump to condition |
1172 llvm::BranchInst::Create(condbb, p->scopebb()); | 1172 llvm::BranchInst::Create(condbb, p->scopebb()); |
1173 | 1173 |
1174 // CONDITION | 1174 // CONDITION |
1266 | 1266 |
1267 llvm::BasicBlock* oldend = gIR->scopeend(); | 1267 llvm::BasicBlock* oldend = gIR->scopeend(); |
1268 if (labelBB != NULL) { | 1268 if (labelBB != NULL) { |
1269 labelBB->moveBefore(oldend); | 1269 labelBB->moveBefore(oldend); |
1270 } else { | 1270 } else { |
1271 labelBB = llvm::BasicBlock::Create("label_" + labelname, p->topfunc(), oldend); | 1271 labelBB = llvm::BasicBlock::Create(gIR->context(), "label_" + labelname, p->topfunc(), oldend); |
1272 } | 1272 } |
1273 | 1273 |
1274 if (!p->scopereturned()) | 1274 if (!p->scopereturned()) |
1275 llvm::BranchInst::Create(labelBB, p->scopebb()); | 1275 llvm::BranchInst::Create(labelBB, p->scopebb()); |
1276 | 1276 |
1293 | 1293 |
1294 if (global.params.symdebug) | 1294 if (global.params.symdebug) |
1295 DtoDwarfStopPoint(loc.linnum); | 1295 DtoDwarfStopPoint(loc.linnum); |
1296 | 1296 |
1297 llvm::BasicBlock* oldend = gIR->scopeend(); | 1297 llvm::BasicBlock* oldend = gIR->scopeend(); |
1298 llvm::BasicBlock* bb = llvm::BasicBlock::Create("aftergoto", p->topfunc(), oldend); | 1298 llvm::BasicBlock* bb = llvm::BasicBlock::Create(gIR->context(), "aftergoto", p->topfunc(), oldend); |
1299 | 1299 |
1300 DtoGoto(loc, label->ident, enclosingFinally); | 1300 DtoGoto(loc, label->ident, enclosingFinally); |
1301 | 1301 |
1302 p->scope() = IRScope(bb,oldend); | 1302 p->scope() = IRScope(bb,oldend); |
1303 } | 1303 } |
1311 | 1311 |
1312 if (global.params.symdebug) | 1312 if (global.params.symdebug) |
1313 DtoDwarfStopPoint(loc.linnum); | 1313 DtoDwarfStopPoint(loc.linnum); |
1314 | 1314 |
1315 llvm::BasicBlock* oldend = gIR->scopeend(); | 1315 llvm::BasicBlock* oldend = gIR->scopeend(); |
1316 llvm::BasicBlock* bb = llvm::BasicBlock::Create("aftergotodefault", p->topfunc(), oldend); | 1316 llvm::BasicBlock* bb = llvm::BasicBlock::Create(gIR->context(), "aftergotodefault", p->topfunc(), oldend); |
1317 | 1317 |
1318 assert(!p->scopereturned()); | 1318 assert(!p->scopereturned()); |
1319 assert(sw->sdefault->bodyBB); | 1319 assert(sw->sdefault->bodyBB); |
1320 | 1320 |
1321 DtoEnclosingHandlers(loc, sw); | 1321 DtoEnclosingHandlers(loc, sw); |
1333 | 1333 |
1334 if (global.params.symdebug) | 1334 if (global.params.symdebug) |
1335 DtoDwarfStopPoint(loc.linnum); | 1335 DtoDwarfStopPoint(loc.linnum); |
1336 | 1336 |
1337 llvm::BasicBlock* oldend = gIR->scopeend(); | 1337 llvm::BasicBlock* oldend = gIR->scopeend(); |
1338 llvm::BasicBlock* bb = llvm::BasicBlock::Create("aftergotocase", p->topfunc(), oldend); | 1338 llvm::BasicBlock* bb = llvm::BasicBlock::Create(gIR->context(), "aftergotocase", p->topfunc(), oldend); |
1339 | 1339 |
1340 assert(!p->scopereturned()); | 1340 assert(!p->scopereturned()); |
1341 if (!cs->bodyBB) | 1341 if (!cs->bodyBB) |
1342 { | 1342 { |
1343 cs->bodyBB = llvm::BasicBlock::Create("goto_case", p->topfunc(), p->scopeend()); | 1343 cs->bodyBB = llvm::BasicBlock::Create(gIR->context(), "goto_case", p->topfunc(), p->scopeend()); |
1344 } | 1344 } |
1345 | 1345 |
1346 DtoEnclosingHandlers(loc, sw); | 1346 DtoEnclosingHandlers(loc, sw); |
1347 | 1347 |
1348 llvm::BranchInst::Create(cs->bodyBB, p->scopebb()); | 1348 llvm::BranchInst::Create(cs->bodyBB, p->scopebb()); |