Mercurial > projects > ldc
comparison gen/arrays.cpp @ 174:16e676ae5ab4 trunk
[svn r190] Fixed array concatenation for some broken cases.
Added a sanity check for the Dsymbol state set.
author | lindquist |
---|---|
date | Tue, 06 May 2008 18:36:46 +0200 |
parents | db9890b3fb64 |
children | a074a5ff709c |
comparison
equal
deleted
inserted
replaced
173:db9890b3fb64 | 174:16e676ae5ab4 |
---|---|
576 | 576 |
577 assert(t1->ty == Tarray); | 577 assert(t1->ty == Tarray); |
578 assert(t1->ty == t2->ty); | 578 assert(t1->ty == t2->ty); |
579 | 579 |
580 DValue* e1 = exp1->toElem(gIR); | 580 DValue* e1 = exp1->toElem(gIR); |
581 llvm::Value* a = e1->getRVal(); | |
582 | |
583 DValue* e2 = exp2->toElem(gIR); | 581 DValue* e2 = exp2->toElem(gIR); |
584 llvm::Value* b = e2->getRVal(); | |
585 | 582 |
586 llvm::Value *len1, *len2, *src1, *src2, *res; | 583 llvm::Value *len1, *len2, *src1, *src2, *res; |
587 len1 = gIR->ir->CreateLoad(DtoGEPi(a,0,0,"tmp"),"tmp"); | 584 |
588 len2 = gIR->ir->CreateLoad(DtoGEPi(b,0,0,"tmp"),"tmp"); | 585 len1 = DtoArrayLen(e1); |
586 len2 = DtoArrayLen(e2); | |
589 res = gIR->ir->CreateAdd(len1,len2,"tmp"); | 587 res = gIR->ir->CreateAdd(len1,len2,"tmp"); |
590 | 588 |
591 llvm::Value* mem = DtoNewDynArray(arr, res, DtoDType(t1->next), false); | 589 llvm::Value* mem = DtoNewDynArray(arr, res, DtoDType(t1->next), false); |
592 | 590 |
593 src1 = gIR->ir->CreateLoad(DtoGEPi(a,0,1,"tmp"),"tmp"); | 591 src1 = DtoArrayPtr(e1); |
594 src2 = gIR->ir->CreateLoad(DtoGEPi(b,0,1,"tmp"),"tmp"); | 592 src2 = DtoArrayPtr(e2); |
595 | 593 |
596 DtoMemCpy(mem,src1,len1); | 594 DtoMemCpy(mem,src1,len1); |
597 mem = gIR->ir->CreateGEP(mem,len1,"tmp"); | 595 mem = gIR->ir->CreateGEP(mem,len1,"tmp"); |
598 DtoMemCpy(mem,src2,len2); | 596 DtoMemCpy(mem,src2,len2); |
599 } | 597 } |