changeset 611:83ca663ecc20

Backed out changeset 1b62222581fb Do not use i8 for bool. Instead rely on the target to store i1 as i8.
author Christian Kamm <kamm incasoftware de>
date Sun, 21 Sep 2008 14:45:41 +0200
parents 1b62222581fb
children d97b017a8aef
files gen/arrays.cpp gen/llvmhelpers.cpp gen/statements.cpp gen/todebug.cpp gen/toir.cpp gen/tollvm.cpp gen/tollvm.h
diffstat 7 files changed, 26 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/gen/arrays.cpp	Sat Sep 20 10:13:15 2008 +0200
+++ b/gen/arrays.cpp	Sun Sep 21 14:45:41 2008 +0200
@@ -153,6 +153,9 @@
     switch (arrayelemty->ty)
     {
     case Tbool:
+        funcname = "_d_array_init_i1";
+        break;
+
     case Tvoid:
     case Tchar:
     case Tint8:
--- a/gen/llvmhelpers.cpp	Sat Sep 20 10:13:15 2008 +0200
+++ b/gen/llvmhelpers.cpp	Sun Sep 21 14:45:41 2008 +0200
@@ -574,8 +574,8 @@
     Type* from = val->getType()->toBasetype();
     assert(from->isintegral());
 
-    size_t fromsz = getTypeBitSize(val->getRVal()->getType());
-    size_t tosz = to->size()*8;
+    size_t fromsz = from->size();
+    size_t tosz = to->size();
 
     LLValue* rval = val->getRVal();
     if (rval->getType() == tolltype) {
@@ -774,13 +774,13 @@
     llvm::GlobalValue::LinkageTypes gflaglink = istempl ? llvm::GlobalValue::WeakLinkage : llvm::GlobalValue::InternalLinkage;
     std::string gflagname(gvar->getName());
     gflagname.append("__initflag");
-    llvm::GlobalVariable* gflag = new llvm::GlobalVariable(LLType::Int1Ty,false,gflaglink,DtoConstI1(false),gflagname,gIR->module);
+    llvm::GlobalVariable* gflag = new llvm::GlobalVariable(LLType::Int1Ty,false,gflaglink,DtoConstBool(false),gflagname,gIR->module);
 
     // check flag and do init if not already done
     llvm::BasicBlock* oldend = gIR->scopeend();
     llvm::BasicBlock* initbb = llvm::BasicBlock::Create("ifnotinit",gIR->topfunc(),oldend);
     llvm::BasicBlock* endinitbb = llvm::BasicBlock::Create("ifnotinitend",gIR->topfunc(),oldend);
-    LLValue* cond = gIR->ir->CreateICmpEQ(gIR->ir->CreateLoad(gflag,"tmp"),DtoConstI1(false));
+    LLValue* cond = gIR->ir->CreateICmpEQ(gIR->ir->CreateLoad(gflag,"tmp"),DtoConstBool(false));
     gIR->ir->CreateCondBr(cond, initbb, endinitbb);
     gIR->scope() = IRScope(initbb,endinitbb);
     DValue* ie = DtoInitializer(gvar, init);
@@ -788,7 +788,7 @@
     DVarValue dst(t, gvar);
     DtoAssign(init->loc, &dst, ie);
     
-    gIR->ir->CreateStore(DtoConstI1(true), gflag);
+    gIR->ir->CreateStore(DtoConstBool(true), gflag);
     gIR->ir->CreateBr(endinitbb);
     gIR->scope() = IRScope(endinitbb,oldend);
 }
@@ -1548,7 +1548,10 @@
     Type* T = (Type*)ti->tdtypes.data[0];
 
     char tmp[10];
-    sprintf(tmp, "%d", T->size()*8);
+    if (T->toBasetype()->ty == Tbool) // otherwise we'd get a mismatch
+        sprintf(tmp, "1");
+    else
+        sprintf(tmp, "%d", T->size()*8);
     
     // replace # in name with bitsize
     name = td->intrinsicName;
--- a/gen/statements.cpp	Sat Sep 20 10:13:15 2008 +0200
+++ b/gen/statements.cpp	Sun Sep 21 14:45:41 2008 +0200
@@ -81,15 +81,11 @@
             delete e;
             Logger::cout() << "return value is '" <<*v << "'\n";
 
+            // can happen for classes
             if (v->getType() != p->topfunc()->getReturnType())
             {
-                // can happen for classes
-                if(isaPointer(v) && isaPointer(p->topfunc()->getReturnType()))
-                    v = gIR->ir->CreateBitCast(v, p->topfunc()->getReturnType(), "tmp");
-                // or for i1 vs i8 bools
-                if(v->getType() == LLType::Int1Ty && p->topfunc()->getReturnType() == LLType::Int8Ty)
-                    v = gIR->ir->CreateZExt(v, LLType::Int8Ty);
-                Logger::cout() << "adjusted return value: " << *v << '\n';
+                v = gIR->ir->CreateBitCast(v, p->topfunc()->getReturnType(), "tmp");
+                Logger::cout() << "return value after cast: " << *v << '\n';
             }
 
             DtoEnclosingHandlers(enclosinghandler, NULL);
--- a/gen/todebug.cpp	Sat Sep 20 10:13:15 2008 +0200
+++ b/gen/todebug.cpp	Sun Sep 21 14:45:41 2008 +0200
@@ -162,8 +162,8 @@
     vals[6] = DBG_CAST( DtoDwarfCompileUnit(fd->getModule()) );
     vals[7] = DtoConstUint(fd->loc.linnum);
     vals[8] = DBG_NULL;
-    vals[9] = DtoConstI1(fd->protection == PROTprivate);
-    vals[10] = DtoConstI1(fd->getModule() == gIR->dmodule);
+    vals[9] = DtoConstBool(fd->protection == PROTprivate);
+    vals[10] = DtoConstBool(fd->getModule() == gIR->dmodule);
 
     Logger::println("emitting subprogram global");
 
@@ -519,8 +519,8 @@
 
     LLGlobalVariable* TY = dwarfTypeDescription_impl(vd->type, compileUnit, NULL);
     vals[8] = TY ? DBG_CAST(TY) : DBG_NULL;
-    vals[9] = DtoConstI1(vd->protection == PROTprivate);
-    vals[10] = DtoConstI1(vd->getModule() == gIR->dmodule);
+    vals[9] = DtoConstBool(vd->protection == PROTprivate);
+    vals[10] = DtoConstBool(vd->getModule() == gIR->dmodule);
 
     vals[11] = DBG_CAST(ll);
 
--- a/gen/toir.cpp	Sat Sep 20 10:13:15 2008 +0200
+++ b/gen/toir.cpp	Sun Sep 21 14:45:41 2008 +0200
@@ -1649,7 +1649,7 @@
 
     LLValue* b = DtoBoolean(loc, u);
 
-    LLConstant* zero = llvm::ConstantInt::get(b->getType(), 0);
+    LLConstant* zero = DtoConstBool(false);
     b = p->ir->CreateICmpEQ(b,zero);
 
     return new DImValue(type, b);
--- a/gen/tollvm.cpp	Sat Sep 20 10:13:15 2008 +0200
+++ b/gen/tollvm.cpp	Sun Sep 21 14:45:41 2008 +0200
@@ -77,7 +77,7 @@
         return (const LLType*)LLType::Int64Ty;
 
     case Tbool:
-        return (const LLType*)LLType::Int8Ty;
+        return (const LLType*)llvm::ConstantInt::getTrue()->getType();
 
     // floats
     case Tfloat32:
@@ -462,11 +462,11 @@
     assert(fn != NULL);
 
     LLSmallVector<LLValue*, 5> llargs;
-    llargs.push_back(DtoConstI1(ll));
-    llargs.push_back(DtoConstI1(ls));
-    llargs.push_back(DtoConstI1(sl));
-    llargs.push_back(DtoConstI1(ss));
-    llargs.push_back(DtoConstI1(device));
+    llargs.push_back(DtoConstBool(ll));
+    llargs.push_back(DtoConstBool(ls));
+    llargs.push_back(DtoConstBool(sl));
+    llargs.push_back(DtoConstBool(ss));
+    llargs.push_back(DtoConstBool(device));
 
     llvm::CallInst::Create(fn, llargs.begin(), llargs.end(), "", gIR->scopebb());
 }
@@ -487,10 +487,6 @@
 }
 LLConstant* DtoConstBool(bool b)
 {
-    return llvm::ConstantInt::get(LLType::Int8Ty, b, false);
-}
-LLConstant* DtoConstI1(bool b)
-{
     return llvm::ConstantInt::get(LLType::Int1Ty, b, false);
 }
 llvm::ConstantInt* DtoConstUbyte(unsigned char i)
--- a/gen/tollvm.h	Sat Sep 20 10:13:15 2008 +0200
+++ b/gen/tollvm.h	Sun Sep 21 14:45:41 2008 +0200
@@ -58,7 +58,6 @@
 LLConstant* DtoConstString(const char*);
 LLConstant* DtoConstStringPtr(const char* str, const char* section = 0);
 LLConstant* DtoConstBool(bool);
-LLConstant* DtoConstI1(bool);
 
 // llvm wrappers
 LLValue* DtoLoad(LLValue* src, const char* name=0);