Remove an old workaround that was kept around for ABI-compatibility on x86-64

between different LLVM versions.
This means LLVM r67588 is required if you want to compile for x86-64, otherwise
the backend will assert when you try to return e.g. struct { int i; char c; }
from a function. (In particular, this is no longer compatible with LLVM 2.5)
It also means that any code returning small structs on x86-64 will probably
need to be recompiled in order to be linkable to code compiled with this change.
This commit is contained in:
Frits van Bommel
2009-05-12 15:50:48 +02:00
parent 77cb1c6b8e
commit ec476cc5f1

View File

@@ -43,7 +43,6 @@
#include "gen/llvmhelpers.h"
#include "gen/abi.h"
#include "gen/abi-x86-64.h"
//#include "gen/llvm-version.h" // only use is commented out.
#include "ir/irfunction.h"
#include <cassert>
@@ -401,19 +400,6 @@ namespace x86_64_D_cc {
bool retStructInRegs(TypeStruct* st) {
// 'fastcc' allows returns in up to two registers of each kind:
DRegCount state(2, 2, 2);
#if 1 //LLVM_REV < 67588
// (If uncommenting the LLVM_REV line above, also uncomment llvm-version #include
// LLVM before trunk r67588 doesn't allow a second int to be an i1 or
// i8. (See <http://llvm.org/PR3861>)
// Rather than complicating shouldPassStructInRegs(), just disallow
// second integers for now.
// FIXME: Disabling this for older LLVM only makes the abi dependent on
// LLVM revision, which seems like a bad idea. We could extend
// i8 parts to i16 to work around this issue until 2.6...
// TODO: Remove this workaround when support for LLVM 2.5 is dropped.
state.ints = 1;
#endif
return shouldPassStructInRegs(st, state);
}