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)