comparison gen/toir.cpp @ 365:bfb9d28f045a trunk

[svn r386] Fixed broken DtoBoolean. Some code cleanup.
author lindquist
date Tue, 15 Jul 2008 00:17:03 +0200
parents 8014dbd24605
children 519adb3128b1
comparison
equal deleted inserted replaced
364:8014dbd24605 365:bfb9d28f045a
1608 { 1608 {
1609 LLValue* a = l->getRVal(); 1609 LLValue* a = l->getRVal();
1610 LLValue* b = r->getRVal(); 1610 LLValue* b = r->getRVal();
1611 Logger::cout() << "type 1: " << *a << '\n'; 1611 Logger::cout() << "type 1: " << *a << '\n';
1612 Logger::cout() << "type 2: " << *b << '\n'; 1612 Logger::cout() << "type 2: " << *b << '\n';
1613 eval = new llvm::ICmpInst(cmpop, a, b, "tmp", p->scopebb()); 1613 eval = p->ir->CreateICmp(cmpop, a, b, "tmp");
1614 } 1614 }
1615 } 1615 }
1616 else if (t->isfloating()) 1616 else if (t->isfloating())
1617 { 1617 {
1618 llvm::FCmpInst::Predicate cmpop; 1618 llvm::FCmpInst::Predicate cmpop;
1644 cmpop = llvm::FCmpInst::FCMP_ORD;break; 1644 cmpop = llvm::FCmpInst::FCMP_ORD;break;
1645 1645
1646 default: 1646 default:
1647 assert(0); 1647 assert(0);
1648 } 1648 }
1649 eval = new llvm::FCmpInst(cmpop, l->getRVal(), r->getRVal(), "tmp", p->scopebb()); 1649 eval = p->ir->CreateFCmp(cmpop, l->getRVal(), r->getRVal(), "tmp");
1650 } 1650 }
1651 else if (t->ty == Tsarray || t->ty == Tarray) 1651 else if (t->ty == Tsarray || t->ty == Tarray)
1652 { 1652 {
1653 Logger::println("static or dynamic array"); 1653 Logger::println("static or dynamic array");
1654 eval = DtoArrayCompare(op,l,r); 1654 eval = DtoArrayCompare(op,l,r);
1695 LLValue* lv = l->getRVal(); 1695 LLValue* lv = l->getRVal();
1696 LLValue* rv = r->getRVal(); 1696 LLValue* rv = r->getRVal();
1697 if (rv->getType() != lv->getType()) { 1697 if (rv->getType() != lv->getType()) {
1698 rv = DtoBitCast(rv, lv->getType()); 1698 rv = DtoBitCast(rv, lv->getType());
1699 } 1699 }
1700 eval = new llvm::ICmpInst(cmpop, lv, rv, "tmp", p->scopebb()); 1700 eval = p->ir->CreateICmp(cmpop, lv, rv, "tmp");
1701 } 1701 }
1702 else if (t->iscomplex()) 1702 else if (t->iscomplex())
1703 { 1703 {
1704 Logger::println("complex"); 1704 Logger::println("complex");
1705 eval = DtoComplexEquals(op, l, r); 1705 eval = DtoComplexEquals(op, l, r);
1717 cmpop = llvm::FCmpInst::FCMP_UNE; 1717 cmpop = llvm::FCmpInst::FCMP_UNE;
1718 break; 1718 break;
1719 default: 1719 default:
1720 assert(0); 1720 assert(0);
1721 } 1721 }
1722 eval = new llvm::FCmpInst(cmpop, l->getRVal(), r->getRVal(), "tmp", p->scopebb()); 1722 eval = p->ir->CreateFCmp(cmpop, l->getRVal(), r->getRVal(), "tmp");
1723 } 1723 }
1724 else if (t->ty == Tsarray || t->ty == Tarray) 1724 else if (t->ty == Tsarray || t->ty == Tarray)
1725 { 1725 {
1726 Logger::println("static or dynamic array"); 1726 Logger::println("static or dynamic array");
1727 eval = DtoArrayEquals(op,l,r); 1727 eval = DtoArrayEquals(op,l,r);
1994 1994
1995 DValue* u = e1->toElem(p); 1995 DValue* u = e1->toElem(p);
1996 1996
1997 LLValue* b = DtoBoolean(u); 1997 LLValue* b = DtoBoolean(u);
1998 1998
1999 LLConstant* zero = llvm::ConstantInt::get(LLType::Int1Ty, 0, true); 1999 LLConstant* zero = DtoConstBool(false);
2000 b = p->ir->CreateICmpEQ(b,zero); 2000 b = p->ir->CreateICmpEQ(b,zero);
2001 2001
2002 return new DImValue(type, b); 2002 return new DImValue(type, b);
2003 } 2003 }
2004 2004
2260 } 2260 }
2261 eval = DtoDelegateEquals(op,l,r); 2261 eval = DtoDelegateEquals(op,l,r);
2262 } 2262 }
2263 else if (t1->isfloating()) 2263 else if (t1->isfloating())
2264 { 2264 {
2265 llvm::FCmpInst::Predicate pred = (op == TOKidentity) ? llvm::FCmpInst::FCMP_OEQ : llvm::FCmpInst::FCMP_ONE; 2265 eval = (op == TOKidentity)
2266 eval = new llvm::FCmpInst(pred, l, r, "tmp", p->scopebb()); 2266 ? p->ir->CreateFCmpOEQ(l,r,"tmp")
2267 : p->ir->CreateFCmpONE(l,r,"tmp");
2267 } 2268 }
2268 else if (t1->ty == Tpointer) 2269 else if (t1->ty == Tpointer)
2269 { 2270 {
2270 if (l->getType() != r->getType()) { 2271 if (l->getType() != r->getType()) {
2271 if (v->isNull()) 2272 if (v->isNull())
2272 r = llvm::ConstantPointerNull::get(isaPointer(l->getType())); 2273 r = llvm::ConstantPointerNull::get(isaPointer(l->getType()));
2273 else 2274 else
2274 r = DtoBitCast(r, l->getType()); 2275 r = DtoBitCast(r, l->getType());
2275 } 2276 }
2276 llvm::ICmpInst::Predicate pred = (op == TOKidentity) ? llvm::ICmpInst::ICMP_EQ : llvm::ICmpInst::ICMP_NE; 2277 eval = (op == TOKidentity)
2277 eval = new llvm::ICmpInst(pred, l, r, "tmp", p->scopebb()); 2278 ? p->ir->CreateICmpEQ(l,r,"tmp")
2279 : p->ir->CreateICmpNE(l,r,"tmp");
2278 } 2280 }
2279 else { 2281 else {
2280 llvm::ICmpInst::Predicate pred = (op == TOKidentity) ? llvm::ICmpInst::ICMP_EQ : llvm::ICmpInst::ICMP_NE; 2282 eval = (op == TOKidentity)
2281 //Logger::cout() << "l = " << *l << " r = " << *r << '\n'; 2283 ? p->ir->CreateICmpEQ(l,r,"tmp")
2282 eval = new llvm::ICmpInst(pred, l, r, "tmp", p->scopebb()); 2284 : p->ir->CreateICmpNE(l,r,"tmp");
2283 } 2285 }
2284 return new DImValue(type, eval); 2286 return new DImValue(type, eval);
2285 } 2287 }
2286 2288
2287 ////////////////////////////////////////////////////////////////////////////////////////// 2289 //////////////////////////////////////////////////////////////////////////////////////////