ObjcRuntime.h: Add mips64, aarch64, and riscv64 to non-legacy dispatch (#76694)
This PR updates the list of architectures for which libobjc2 has fast-path objc_msgSend implementations. Related to: https://github.com/gnustep/libobjc2/pull/261
This commit is contained in:
parent
c4146121e9
commit
3f9f8efc54
@ -100,13 +100,21 @@ public:
|
||||
bool isLegacyDispatchDefaultForArch(llvm::Triple::ArchType Arch) {
|
||||
// The GNUstep runtime uses a newer dispatch method by default from
|
||||
// version 1.6 onwards
|
||||
if (getKind() == GNUstep && getVersion() >= VersionTuple(1, 6)) {
|
||||
if (Arch == llvm::Triple::arm ||
|
||||
Arch == llvm::Triple::x86 ||
|
||||
Arch == llvm::Triple::x86_64)
|
||||
return false;
|
||||
if (getKind() == GNUstep) {
|
||||
switch (Arch) {
|
||||
case llvm::Triple::arm:
|
||||
case llvm::Triple::x86:
|
||||
case llvm::Triple::x86_64:
|
||||
return !(getVersion() >= VersionTuple(1, 6));
|
||||
case llvm::Triple::aarch64:
|
||||
case llvm::Triple::mips64:
|
||||
return !(getVersion() >= VersionTuple(1, 9));
|
||||
case llvm::Triple::riscv64:
|
||||
return !(getVersion() >= VersionTuple(2, 2));
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
else if ((getKind() == MacOSX) && isNonFragile() &&
|
||||
} else if ((getKind() == MacOSX) && isNonFragile() &&
|
||||
(getVersion() >= VersionTuple(10, 0)) &&
|
||||
(getVersion() < VersionTuple(10, 6)))
|
||||
return Arch != llvm::Triple::x86_64;
|
||||
|
@ -1,7 +1,8 @@
|
||||
// RUN: %clang_cc1 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK-MAC
|
||||
// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK-MAC-NF
|
||||
// RUN: %clang_cc1 -fobjc-runtime=gcc -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK-GNU
|
||||
// RUN: %clang_cc1 -fobjc-runtime=gnustep -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK-GNU-NF
|
||||
// RUN: %clang_cc1 -fobjc-runtime=gnustep -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK-GNU-NF
|
||||
// RUN: %clang_cc1 -fobjc-runtime=gnustep-2.2 -fobjc-dispatch-method=non-legacy -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK-MAC
|
||||
|
||||
typedef struct {
|
||||
int x;
|
||||
|
38
clang/test/Driver/gnustep-dispatch-method.m
Normal file
38
clang/test/Driver/gnustep-dispatch-method.m
Normal file
@ -0,0 +1,38 @@
|
||||
// DEFINE: %{triple} =
|
||||
// DEFINE: %{ver} = 1.6
|
||||
// DEFINE: %{prefix} = CHECK-MSGSEND
|
||||
// DEFINE: %{check} = %clang --target=%{triple} -fobjc-runtime=gnustep-%{ver} -### -c %s 2>&1 | FileCheck -check-prefix=%{prefix} %s
|
||||
|
||||
// REDEFINE: %{ver} = 1.6
|
||||
// REDEFINE: %{triple} = i386-unknown-freebsd
|
||||
// RUN: %{check}
|
||||
// REDEFINE: %{triple} = x86_64-unknown-freebsd
|
||||
// RUN: %{check}
|
||||
// REDEFINE: %{triple} = arm-unknown-freebsd
|
||||
// RUN: %{check}
|
||||
// REDEFINE: %{prefix} = CHECK-MSGLOOKUP
|
||||
// REDEFINE: %{triple} = aarch64-unknown-freebsd
|
||||
// RUN: %{check}
|
||||
// REDEFINE: %{triple} = mips64-unknown-freebsd
|
||||
// RUN: %{check}
|
||||
// REDEFINE: %{triple} = riscv64-unknown-freebsd
|
||||
// RUN: %{check}
|
||||
|
||||
// REDEFINE: %{ver} = 1.9
|
||||
// REDEFINE: %{prefix} = CHECK-MSGSEND
|
||||
// REDEFINE: %{triple} = aarch64-unknown-freebsd
|
||||
// RUN: %{check}
|
||||
// REDEFINE: %{triple} = mips64-unknown-freebsd
|
||||
// RUN: %{check}
|
||||
// REDEFINE: %{prefix} = CHECK-MSGLOOKUP
|
||||
// REDEFINE: %{triple} = riscv64-unknown-freebsd
|
||||
// RUN: %{check}
|
||||
|
||||
// REDEFINE: %{ver} = 2.2
|
||||
// REDEFINE: %{prefix} = CHECK-MSGSEND
|
||||
// REDEFINE: %{triple} = riscv64-unknown-freebsd
|
||||
// RUN: %{check}
|
||||
|
||||
|
||||
// CHECK-MSGSEND: "-cc1"{{.*}} "-fobjc-dispatch-method=non-legacy"
|
||||
// CHECK-MSGLOOKUP-NOT: "-cc1"{{.*}} "-fobjc-dispatch-method=non-legacy"
|
Loading…
x
Reference in New Issue
Block a user