Auto-upgrade data layouts for X86 address spaces
This is similar to the autoupdate LLVM performs internally.
This commit is contained in:
parent
c3ab84bb4f
commit
31aecccbcd
1 changed files with 23 additions and 0 deletions
|
@ -143,6 +143,22 @@ fn strip_function_ptr_alignment(data_layout: String) -> String {
|
|||
data_layout.replace("-Fi8-", "-")
|
||||
}
|
||||
|
||||
fn strip_x86_address_spaces(data_layout: String) -> String {
|
||||
data_layout.replace("-p270:32:32-p271:32:32-p272:64:64-", "-")
|
||||
}
|
||||
|
||||
fn add_x86_address_spaces(mut data_layout: String) -> String {
|
||||
let address_spaces = "-p270:32:32-p271:32:32-p272:64:64";
|
||||
if !data_layout.contains(address_spaces) && data_layout.starts_with("e-m:") {
|
||||
let mut insert_pos = "e-m:?".len();
|
||||
if data_layout[insert_pos..].starts_with("-p:32:32") {
|
||||
insert_pos += "-p:32:32".len();
|
||||
}
|
||||
data_layout.insert_str(insert_pos, address_spaces);
|
||||
}
|
||||
data_layout
|
||||
}
|
||||
|
||||
pub unsafe fn create_module(
|
||||
tcx: TyCtxt<'_>,
|
||||
llcx: &'ll llvm::Context,
|
||||
|
@ -156,6 +172,13 @@ pub unsafe fn create_module(
|
|||
if llvm_util::get_major_version() < 9 {
|
||||
target_data_layout = strip_function_ptr_alignment(target_data_layout);
|
||||
}
|
||||
if sess.target.target.arch == "x86" || sess.target.target.arch == "x86_64" {
|
||||
if llvm_util::get_major_version() < 10 {
|
||||
target_data_layout = strip_x86_address_spaces(target_data_layout);
|
||||
} else {
|
||||
target_data_layout = add_x86_address_spaces(target_data_layout);
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure the data-layout values hardcoded remain the defaults.
|
||||
if sess.target.target.options.is_builtin {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue