mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-17 21:33:13 +01:00
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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user