diff gen/abi-x86-64.cpp @ 1359:34f2fd925de3

Intrinsics shouldn't see struct padding, so use a special TargetABI for them that removes it. This unbreaks the `llvm_*_with_overflow` intrinsics.
author Frits van Bommel <fvbommel wxs.nl>
date Sat, 16 May 2009 13:06:49 +0200
parents 701d11a1e7b1
children d1fd46bbbff7
line wrap: on
line diff
--- a/gen/abi-x86-64.cpp	Fri May 15 17:17:20 2009 +0200
+++ b/gen/abi-x86-64.cpp	Sat May 16 13:06:49 2009 +0200
@@ -43,7 +43,7 @@
 #include "gen/llvmhelpers.h"
 #include "gen/abi.h"
 #include "gen/abi-x86-64.h"
-#include "gen/structs.h"
+#include "gen/abi-generic.h"
 #include "ir/irfunction.h"
 
 #include <cassert>
@@ -485,38 +485,6 @@
 };
 
 
-/// Removes padding fields for (non-union-containing!) structs
-struct RemoveStructPadding : ABIRewrite {
-    /// get a rewritten value back to its original form
-    virtual LLValue* get(Type* dty, DValue* v) {
-        LLValue* lval = DtoAlloca(dty, ".rewritetmp");
-        
-        // Make sure the padding is zero, so struct comparisons work.
-        // TODO: Only do this if there's padding, and/or only initialize padding.
-        DtoMemSetZero(lval, DtoConstSize_t(getTypePaddedSize(DtoType(dty))));
-        
-        DtoPaddedStruct(dty, v->getRVal(), lval);
-        return lval;
-    }
-
-    /// get a rewritten value back to its original form and store result in provided lvalue
-    /// this one is optional and defaults to calling the one above
-    virtual void getL(Type* dty, DValue* v, llvm::Value* lval) {
-        DtoPaddedStruct(dty, v->getRVal(), lval);
-    }
-
-    /// put out rewritten value
-    virtual LLValue* put(Type* dty, DValue* v) {
-        return DtoUnpaddedStruct(dty, v->getRVal());
-    }
-
-    /// return the transformed type for this rewrite
-    virtual const LLType* type(Type* dty, const LLType* t) {
-        return DtoUnpaddedStructType(dty);
-    }
-};
-
-
 struct RegCount {
     unsigned char int_regs, sse_regs;
 };