Mercurial > projects > ldc
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 ////////////////////////////////////////////////////////////////////////////////////////// |