comparison gen/toir.c @ 78:2332006e1fa4 trunk

[svn r82] Fixed: Fall-through switch cases were broken.
author lindquist
date Wed, 31 Oct 2007 20:50:21 +0100
parents 714057ff2dbb
children 3587401b6eeb
comparison
equal deleted inserted replaced
77:714057ff2dbb 78:2332006e1fa4
1443 Type* vdtype = LLVM_DtoDType(vd->type); 1443 Type* vdtype = LLVM_DtoDType(vd->type);
1444 1444
1445 llvm::Value* llvalue = vd->nestedref ? LLVM_DtoNestedVariable(vd) : vd->llvmValue; 1445 llvm::Value* llvalue = vd->nestedref ? LLVM_DtoNestedVariable(vd) : vd->llvmValue;
1446 1446
1447 if (vdtype->ty == Tstruct && !(t->ty == Tpointer && t->next == vdtype)) { 1447 if (vdtype->ty == Tstruct && !(t->ty == Tpointer && t->next == vdtype)) {
1448 Logger::println("struct");
1448 TypeStruct* vdt = (TypeStruct*)vdtype; 1449 TypeStruct* vdt = (TypeStruct*)vdtype;
1449 assert(vdt->sym); 1450 assert(vdt->sym);
1450 e = new elem; 1451 e = new elem;
1451 const llvm::Type* llt = LLVM_DtoType(t); 1452 const llvm::Type* llt = LLVM_DtoType(t);
1452 if (offset == 0) { 1453 if (offset == 0) {
1453 e->mem = p->ir->CreateBitCast(llvalue, llt, "tmp"); 1454 e->mem = p->ir->CreateBitCast(llvalue, llt, "tmp");
1454 } 1455 }
1455 else { 1456 else {
1456 std::vector<unsigned> dst; 1457 std::vector<unsigned> dst;
1457 e->mem = LLVM_DtoIndexStruct(llvalue,vdt->sym, tnext, offset, dst); 1458 e->mem = LLVM_DtoIndexStruct(llvalue,vdt->sym, tnext, offset, dst);
1458 /*size_t fo = vdt->sym->offsetToIndex(tnext, offset, dst);
1459 llvm::Value* ptr = llvalue;
1460 assert(ptr);
1461 e->mem = LLVM_DtoGEP(ptr,dst,"tmp");
1462 if (e->mem->getType() != llt) {
1463 e->mem = p->ir->CreateBitCast(e->mem, llt, "tmp");
1464 }
1465 if (fo == (size_t)-1) {
1466 size_t llt_sz = gTargetData->getTypeSize(llt->getContainedType(0));
1467 assert(offset % llt_sz == 0);
1468 e->mem = new llvm::GetElementPtrInst(e->mem, LLVM_DtoConstUint(offset / llt_sz), "tmp", p->scopebb());
1469 }
1470 else if (fo) {
1471 e->mem = new llvm::GetElementPtrInst(e->mem, LLVM_DtoConstUint(fo), "tmp", p->scopebb());
1472 }*/
1473 } 1459 }
1474 e->type = elem::VAL; 1460 e->type = elem::VAL;
1475 e->field = true; 1461 e->field = true;
1476 } 1462 }
1477 else if (vdtype->ty == Tsarray) { 1463 else if (vdtype->ty == Tsarray) {
1464 Logger::println("sarray");
1478 e = new elem; 1465 e = new elem;
1479 assert(llvalue); 1466 assert(llvalue);
1480 e->arg = llvalue; 1467 e->arg = llvalue;
1481 e->type = elem::VAL; 1468 e->type = elem::VAL;
1482 1469
1494 assert(offset == 0); 1481 assert(offset == 0);
1495 e->mem = LLVM_DtoGEPi(llvalue,0,0,"tmp"); 1482 e->mem = LLVM_DtoGEPi(llvalue,0,0,"tmp");
1496 } 1483 }
1497 } 1484 }
1498 else if (offset == 0) { 1485 else if (offset == 0) {
1486 Logger::println("normal symoff");
1499 e = new elem; 1487 e = new elem;
1500 e->type = elem::VAL; 1488 e->type = elem::VAL;
1501 assert(llvalue); 1489 assert(llvalue);
1502 e->mem = llvalue; 1490 e->mem = llvalue;
1503 1491