Mercurial > projects > ldc
comparison gen/toir.cpp @ 778:4adf0f742896
Get rid of DtoBoolean - use DtoCast(... Type::tbool) instead.
Fixed some casts to bool that were using truncation.
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Sat, 22 Nov 2008 18:35:52 +0100 |
parents | 50eae902f77e |
children | 340acf1535d0 |
comparison
equal
deleted
inserted
replaced
777:961e249eb2aa | 778:4adf0f742896 |
---|---|
1647 llvm::BasicBlock* oldend = p->scopeend(); | 1647 llvm::BasicBlock* oldend = p->scopeend(); |
1648 llvm::BasicBlock* assertbb = llvm::BasicBlock::Create("assert", p->topfunc(), oldend); | 1648 llvm::BasicBlock* assertbb = llvm::BasicBlock::Create("assert", p->topfunc(), oldend); |
1649 llvm::BasicBlock* endbb = llvm::BasicBlock::Create("noassert", p->topfunc(), oldend); | 1649 llvm::BasicBlock* endbb = llvm::BasicBlock::Create("noassert", p->topfunc(), oldend); |
1650 | 1650 |
1651 // test condition | 1651 // test condition |
1652 LLValue* condval = DtoBoolean(loc, cond); | 1652 LLValue* condval = DtoCast(loc, cond, Type::tbool)->getRVal(); |
1653 | 1653 |
1654 // branch | 1654 // branch |
1655 llvm::BranchInst::Create(endbb, assertbb, condval, p->scopebb()); | 1655 llvm::BranchInst::Create(endbb, assertbb, condval, p->scopebb()); |
1656 | 1656 |
1657 // call assert runtime functions | 1657 // call assert runtime functions |
1673 Logger::print("NotExp::toElem: %s | %s\n", toChars(), type->toChars()); | 1673 Logger::print("NotExp::toElem: %s | %s\n", toChars(), type->toChars()); |
1674 LOG_SCOPE; | 1674 LOG_SCOPE; |
1675 | 1675 |
1676 DValue* u = e1->toElem(p); | 1676 DValue* u = e1->toElem(p); |
1677 | 1677 |
1678 LLValue* b = DtoBoolean(loc, u); | 1678 LLValue* b = DtoCast(loc, u, Type::tbool)->getRVal(); |
1679 | 1679 |
1680 LLConstant* zero = DtoConstBool(false); | 1680 LLConstant* zero = DtoConstBool(false); |
1681 b = p->ir->CreateICmpEQ(b,zero); | 1681 b = p->ir->CreateICmpEQ(b,zero); |
1682 | 1682 |
1683 return new DImValue(type, b); | 1683 return new DImValue(type, b); |
1699 | 1699 |
1700 llvm::BasicBlock* oldend = p->scopeend(); | 1700 llvm::BasicBlock* oldend = p->scopeend(); |
1701 llvm::BasicBlock* andand = llvm::BasicBlock::Create("andand", gIR->topfunc(), oldend); | 1701 llvm::BasicBlock* andand = llvm::BasicBlock::Create("andand", gIR->topfunc(), oldend); |
1702 llvm::BasicBlock* andandend = llvm::BasicBlock::Create("andandend", gIR->topfunc(), oldend); | 1702 llvm::BasicBlock* andandend = llvm::BasicBlock::Create("andandend", gIR->topfunc(), oldend); |
1703 | 1703 |
1704 LLValue* ubool = DtoBoolean(loc, u); | 1704 LLValue* ubool = DtoCast(loc, u, Type::tbool)->getRVal(); |
1705 DtoStore(ubool,resval); | 1705 DtoStore(ubool,resval); |
1706 llvm::BranchInst::Create(andand,andandend,ubool,p->scopebb()); | 1706 llvm::BranchInst::Create(andand,andandend,ubool,p->scopebb()); |
1707 | 1707 |
1708 p->scope() = IRScope(andand, andandend); | 1708 p->scope() = IRScope(andand, andandend); |
1709 DValue* v = e2->toElem(p); | 1709 DValue* v = e2->toElem(p); |
1710 | 1710 |
1711 LLValue* vbool = DtoBoolean(loc, v); | 1711 LLValue* vbool = DtoCast(loc, v, Type::tbool)->getRVal(); |
1712 LLValue* uandvbool = llvm::BinaryOperator::Create(llvm::BinaryOperator::And, ubool, vbool,"tmp",p->scopebb()); | 1712 LLValue* uandvbool = llvm::BinaryOperator::Create(llvm::BinaryOperator::And, ubool, vbool,"tmp",p->scopebb()); |
1713 DtoStore(uandvbool,resval); | 1713 DtoStore(uandvbool,resval); |
1714 llvm::BranchInst::Create(andandend,p->scopebb()); | 1714 llvm::BranchInst::Create(andandend,p->scopebb()); |
1715 | 1715 |
1716 p->scope() = IRScope(andandend, oldend); | 1716 p->scope() = IRScope(andandend, oldend); |
1735 | 1735 |
1736 llvm::BasicBlock* oldend = p->scopeend(); | 1736 llvm::BasicBlock* oldend = p->scopeend(); |
1737 llvm::BasicBlock* oror = llvm::BasicBlock::Create("oror", gIR->topfunc(), oldend); | 1737 llvm::BasicBlock* oror = llvm::BasicBlock::Create("oror", gIR->topfunc(), oldend); |
1738 llvm::BasicBlock* ororend = llvm::BasicBlock::Create("ororend", gIR->topfunc(), oldend); | 1738 llvm::BasicBlock* ororend = llvm::BasicBlock::Create("ororend", gIR->topfunc(), oldend); |
1739 | 1739 |
1740 LLValue* ubool = DtoBoolean(loc, u); | 1740 LLValue* ubool = DtoCast(loc, u, Type::tbool)->getRVal(); |
1741 DtoStore(ubool,resval); | 1741 DtoStore(ubool,resval); |
1742 llvm::BranchInst::Create(ororend,oror,ubool,p->scopebb()); | 1742 llvm::BranchInst::Create(ororend,oror,ubool,p->scopebb()); |
1743 | 1743 |
1744 p->scope() = IRScope(oror, ororend); | 1744 p->scope() = IRScope(oror, ororend); |
1745 DValue* v = e2->toElem(p); | 1745 DValue* v = e2->toElem(p); |
1746 | 1746 |
1747 LLValue* vbool = DtoBoolean(loc, v); | 1747 LLValue* vbool = DtoCast(loc, v, Type::tbool)->getRVal(); |
1748 DtoStore(vbool,resval); | 1748 DtoStore(vbool,resval); |
1749 llvm::BranchInst::Create(ororend,p->scopebb()); | 1749 llvm::BranchInst::Create(ororend,p->scopebb()); |
1750 | 1750 |
1751 p->scope() = IRScope(ororend, oldend); | 1751 p->scope() = IRScope(ororend, oldend); |
1752 | 1752 |
1997 llvm::BasicBlock* condtrue = llvm::BasicBlock::Create("condtrue", gIR->topfunc(), oldend); | 1997 llvm::BasicBlock* condtrue = llvm::BasicBlock::Create("condtrue", gIR->topfunc(), oldend); |
1998 llvm::BasicBlock* condfalse = llvm::BasicBlock::Create("condfalse", gIR->topfunc(), oldend); | 1998 llvm::BasicBlock* condfalse = llvm::BasicBlock::Create("condfalse", gIR->topfunc(), oldend); |
1999 llvm::BasicBlock* condend = llvm::BasicBlock::Create("condend", gIR->topfunc(), oldend); | 1999 llvm::BasicBlock* condend = llvm::BasicBlock::Create("condend", gIR->topfunc(), oldend); |
2000 | 2000 |
2001 DValue* c = econd->toElem(p); | 2001 DValue* c = econd->toElem(p); |
2002 LLValue* cond_val = DtoBoolean(loc, c); | 2002 LLValue* cond_val = DtoCast(loc, c, Type::tbool)->getRVal(); |
2003 llvm::BranchInst::Create(condtrue,condfalse,cond_val,p->scopebb()); | 2003 llvm::BranchInst::Create(condtrue,condfalse,cond_val,p->scopebb()); |
2004 | 2004 |
2005 p->scope() = IRScope(condtrue, condfalse); | 2005 p->scope() = IRScope(condtrue, condfalse); |
2006 DValue* u = e1->toElem(p); | 2006 DValue* u = e1->toElem(p); |
2007 DtoAssign(loc, dvv, u); | 2007 DtoAssign(loc, dvv, u); |
2418 | 2418 |
2419 ////////////////////////////////////////////////////////////////////////////////////////// | 2419 ////////////////////////////////////////////////////////////////////////////////////////// |
2420 | 2420 |
2421 DValue* BoolExp::toElem(IRState* p) | 2421 DValue* BoolExp::toElem(IRState* p) |
2422 { | 2422 { |
2423 return new DImValue(type, DtoBoolean(loc, e1->toElem(p))); | 2423 return new DImValue(type, DtoCast(loc, e1->toElem(p), Type::tbool)->getRVal()); |
2424 } | 2424 } |
2425 | 2425 |
2426 ////////////////////////////////////////////////////////////////////////////////////////// | 2426 ////////////////////////////////////////////////////////////////////////////////////////// |
2427 | 2427 |
2428 DValue* DotTypeExp::toElem(IRState* p) | 2428 DValue* DotTypeExp::toElem(IRState* p) |