Fixing the non-x86 build by removing dependence on kmp_cpuid_t
The problem is that the definition of kmp_cpuinfo_t contains: char name [3*sizeof (kmp_cpuid_t)]; // CPUID(0x80000002,0x80000003,0x80000004) and kmp_cpuid_t is only defined when compiling for x86. Differential Revision: http://reviews.llvm.org/D18245 llvm-svn: 264535
This commit is contained in:
parent
cb34bd3abb
commit
01bb2406a3
|
@ -1228,6 +1228,7 @@ typedef struct kmp_sys_info {
|
|||
long nivcsw; /* the number of times a context switch was forced */
|
||||
} kmp_sys_info_t;
|
||||
|
||||
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
|
||||
typedef struct kmp_cpuinfo {
|
||||
int initialized; // If 0, other fields are not initialized.
|
||||
int signature; // CPUID(1).EAX
|
||||
|
@ -1243,7 +1244,7 @@ typedef struct kmp_cpuinfo {
|
|||
kmp_uint64 frequency; // Nominal CPU frequency in Hz.
|
||||
char name [3*sizeof (kmp_cpuid_t)]; // CPUID(0x80000002,0x80000003,0x80000004)
|
||||
} kmp_cpuinfo_t;
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef BUILD_TV
|
||||
|
||||
|
@ -2666,7 +2667,9 @@ extern int __kmp_storage_map; /* True means print storage map for t
|
|||
extern int __kmp_storage_map_verbose; /* True means storage map includes placement info */
|
||||
extern int __kmp_storage_map_verbose_specified;
|
||||
|
||||
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
|
||||
extern kmp_cpuinfo_t __kmp_cpuinfo;
|
||||
#endif
|
||||
|
||||
extern volatile int __kmp_init_serial;
|
||||
extern volatile int __kmp_init_gtid;
|
||||
|
|
|
@ -1174,13 +1174,20 @@ __kmp_map_hint_to_lock(uintptr_t hint)
|
|||
#else
|
||||
# define KMP_TSX_LOCK(seq) __kmp_user_lock_seq
|
||||
#endif
|
||||
|
||||
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
|
||||
# define KMP_CPUINFO_RTM (__kmp_cpuinfo.rtm)
|
||||
#else
|
||||
# define KMP_CPUINFO_RTM 0
|
||||
#endif
|
||||
|
||||
// Hints that do not require further logic
|
||||
if (hint & kmp_lock_hint_hle)
|
||||
return KMP_TSX_LOCK(hle);
|
||||
if (hint & kmp_lock_hint_rtm)
|
||||
return (__kmp_cpuinfo.rtm)? KMP_TSX_LOCK(rtm): __kmp_user_lock_seq;
|
||||
return KMP_CPUINFO_RTM ? KMP_TSX_LOCK(rtm): __kmp_user_lock_seq;
|
||||
if (hint & kmp_lock_hint_adaptive)
|
||||
return (__kmp_cpuinfo.rtm)? KMP_TSX_LOCK(adaptive): __kmp_user_lock_seq;
|
||||
return KMP_CPUINFO_RTM ? KMP_TSX_LOCK(adaptive): __kmp_user_lock_seq;
|
||||
|
||||
// Rule out conflicting hints first by returning the default lock
|
||||
if ((hint & omp_lock_hint_contended) && (hint & omp_lock_hint_uncontended))
|
||||
|
|
|
@ -17,7 +17,9 @@
|
|||
|
||||
kmp_key_t __kmp_gtid_threadprivate_key;
|
||||
|
||||
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
|
||||
kmp_cpuinfo_t __kmp_cpuinfo = { 0 }; // Not initialized
|
||||
#endif
|
||||
|
||||
#if KMP_STATS_ENABLED
|
||||
#include "kmp_stats.h"
|
||||
|
|
Loading…
Reference in New Issue