diff --git a/gcc/config/i386/i386-jit.cc b/gcc/config/i386/i386-jit.cc index 33c80c2de05c9..49e54aa799075 100644 --- a/gcc/config/i386/i386-jit.cc +++ b/gcc/config/i386/i386-jit.cc @@ -57,28 +57,19 @@ void ix86_jit_register_target_info (void) { const char *params[] = {"arch", x86_bits}; - const char *arch = host_detect_local_cpu (2, params); - - fprintf (stderr, "***************************** Arch: %s\n**********************************", arch); + const char* local_cpu = host_detect_local_cpu (2, params); + std::string arch = local_cpu; + free (const_cast (local_cpu)); const char* arg = "-march="; - const char* arg_pos = strstr(arch, arg); - fprintf (stderr, "***************************** arg_pos: %s\n**********************************", arg_pos); - const char* arg_value = arg_pos + strlen(arg); - fprintf (stderr, "***************************** arg_value: %s\n**********************************", arg_value); - const char* arg_value_end = strchr(arg_value, ' '); - - size_t len = arg_value_end - arg_value; - char *cpu = new char[len]; - strncpy(cpu, arg_value, len); - cpu[len] = '\0'; - fprintf (stderr, "***************************** cpu: %s\n**********************************", cpu); + size_t arg_pos = arch.find (arg) + strlen (arg); + size_t end_pos = arch.find (" ", arg_pos); + + std::string cpu = arch.substr (arg_pos, end_pos - arg_pos); jit_target_set_arch (cpu); jit_target_set_128bit_int_support (targetm.scalar_mode_supported_p (TImode)); - free (const_cast (arch)); - if (TARGET_MMX) jit_add_target_info ("target_feature", "mmx"); if (TARGET_SSE) diff --git a/gcc/jit/jit-target.cc b/gcc/jit/jit-target.cc index ad41376fa7fc8..671ed24b20f94 100644 --- a/gcc/jit/jit-target.cc +++ b/gcc/jit/jit-target.cc @@ -59,7 +59,7 @@ jit_add_target_info (const char *key, const char *value) } void -jit_target_set_arch (const char* arch) +jit_target_set_arch (std::string const& arch) { jit_target_info.m_arch = arch; } @@ -70,15 +70,10 @@ jit_target_set_128bit_int_support (bool support) jit_target_info.m_supports_128bit_int = support; } -target_info::~target_info() -{ - free (const_cast ((const void *) m_arch)); -} - target_info * jit_get_target_info () { - target_info *info = new target_info {std::move(jit_target_info)}; + target_info *info = new target_info {jit_target_info}; jit_target_info = target_info{}; return info; } diff --git a/gcc/jit/jit-target.h b/gcc/jit/jit-target.h index 09fd7941c2ef1..b313faf9cbd52 100644 --- a/gcc/jit/jit-target.h +++ b/gcc/jit/jit-target.h @@ -25,6 +25,7 @@ #include "jit-target.def" +#include #include #include @@ -49,12 +50,10 @@ struct CStringEqual { struct target_info { public: - ~target_info(); - bool has_target_value (const char *key, const char *value); std::unordered_map, CStringHash, CStringEqual> m_info; - const char *m_arch = nullptr; + std::string m_arch; bool m_supports_128bit_int = false; }; @@ -62,7 +61,7 @@ struct target_info { extern struct gcc_targetjitm targetjitm; extern void jit_target_init (); -extern void jit_target_set_arch (const char* arch); +extern void jit_target_set_arch (std::string const& arch); extern void jit_target_set_128bit_int_support (bool support); extern void jit_add_target_info (const char *key, const char *value); extern target_info * jit_get_target_info (); diff --git a/gcc/jit/libgccjit.cc b/gcc/jit/libgccjit.cc index 2088fe824a66b..00f4dce1d33f9 100644 --- a/gcc/jit/libgccjit.cc +++ b/gcc/jit/libgccjit.cc @@ -3899,7 +3899,7 @@ gcc_jit_target_info_cpu_supports (gcc_jit_target_info *info, const char * gcc_jit_target_info_arch (gcc_jit_target_info *info) { - return info->m_arch; + return info->m_arch.c_str (); } int