changeset 1004:45ed9e125a00

Remove initialization of padding of reals, ireals and creals. According to the spec and C ABIs, the contents of padding is undefined. This was breaking dstress creal_01,02,03,07,08,09 and 20 on x86-64. The code was apparently added to fix creal_13,14 and 15, which explicitly compare padding and assert if it's different. I'd argue those tests are broken. (Also, on x86-64 they *also* fail) The tests this fixes, on the other hand, are basic arithmetic.
author Frits van Bommel <fvbommel wxs.nl>
date Fri, 27 Feb 2009 19:41:25 +0100
parents de97188378bc
children 5aa5d25508c6
files gen/llvmhelpers.cpp
diffstat 1 files changed, 1 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/gen/llvmhelpers.cpp	Fri Feb 27 12:35:31 2009 +0100
+++ b/gen/llvmhelpers.cpp	Fri Feb 27 19:41:25 2009 +0100
@@ -1378,30 +1378,7 @@
     {
         Logger::println("expression initializer");
         assert(ex->exp);
-        DValue* res = ex->exp->toElem(gIR);
-
-        assert(llvm::isa<llvm::PointerType>(target->getType()) && "init target must be ptr");
-        const LLType* targetty = target->getType()->getContainedType(0);
-        if(targetty == LLType::X86_FP80Ty)
-        {
-            Logger::println("setting fp80 padding to zero");
-
-            LLValue* castv = DtoBitCast(target, getPtrToType(LLType::Int16Ty));
-            LLValue* padding = DtoGEPi1(castv, 5);
-            DtoStore(llvm::Constant::getNullValue(LLType::Int16Ty), padding);
-        }
-        else if(targetty == DtoComplexType(Type::tcomplex80))
-        {
-            Logger::println("setting complex fp80 padding to zero");
-
-            LLValue* castv = DtoBitCast(target, getPtrToType(LLType::Int16Ty));
-            LLValue* padding = DtoGEPi1(castv, 5);
-            DtoStore(llvm::Constant::getNullValue(LLType::Int16Ty), padding);
-            padding = DtoGEPi1(castv, 11);
-            DtoStore(llvm::Constant::getNullValue(LLType::Int16Ty), padding);
-        }
-
-        return res;
+        return ex->exp->toElem(gIR);
     }
     else if (init->isVoidInitializer())
     {