From 5451f28d03752ee5f93fb50197158a8166c98a04 Mon Sep 17 00:00:00 2001 From: Edgar Luque Date: Fri, 11 Oct 2024 16:47:03 +0200 Subject: [PATCH] maybe with opt level 3 now it works --- src/ffi.rs | 6 +- src/metadata/drop_overrides.rs | 13 +- src/metadata/dup_overrides.rs | 13 +- src/metadata/runtime_bindings.rs | 226 ++++++++++++++++++++++--------- 4 files changed, 186 insertions(+), 72 deletions(-) diff --git a/src/ffi.rs b/src/ffi.rs index 0e6b563ce..12cf3cc7a 100644 --- a/src/ffi.rs +++ b/src/ffi.rs @@ -143,7 +143,7 @@ pub fn module_to_object(module: &Module<'_>, opt_level: OptLevel) -> Result LLVMCodeGenOptLevel::LLVMCodeGenLevelDefault, OptLevel::Aggressive => LLVMCodeGenOptLevel::LLVMCodeGenLevelAggressive, }, - LLVMRelocMode::LLVMRelocDynamicNoPic, + LLVMRelocMode::LLVMRelocPIC, LLVMCodeModel::LLVMCodeModelDefault, ); @@ -152,8 +152,8 @@ pub fn module_to_object(module: &Module<'_>, opt_level: OptLevel) -> Result 0, OptLevel::Less => 1, - OptLevel::Default => 1, // todo: change once slp-vectorizer pass is fixed on llvm - OptLevel::Aggressive => 1, // https://github.com/llvm/llvm-project/issues/107198 + OptLevel::Default => 2, // todo: change once slp-vectorizer pass is fixed on llvm + OptLevel::Aggressive => 3, // https://github.com/llvm/llvm-project/issues/107198 }; let passes = CString::new(format!("default")).unwrap(); let error = LLVMRunPasses(llvm_module, passes.as_ptr(), machine, opts); diff --git a/src/metadata/drop_overrides.rs b/src/metadata/drop_overrides.rs index 85d21ab1d..7a9e3fe18 100644 --- a/src/metadata/drop_overrides.rs +++ b/src/metadata/drop_overrides.rs @@ -32,7 +32,7 @@ use melior::{ ir::{ attribute::{FlatSymbolRefAttribute, StringAttribute, TypeAttribute}, r#type::FunctionType, - Block, Location, Module, Region, Value, + Attribute, Block, Identifier, Location, Module, Region, Value, }, Context, }; @@ -85,7 +85,16 @@ impl DropOverridesMeta { StringAttribute::new(context, &format!("drop${}", id.id)), TypeAttribute::new(FunctionType::new(context, &[ty], &[]).into()), region, - &[], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], Location::unknown(context), )); } diff --git a/src/metadata/dup_overrides.rs b/src/metadata/dup_overrides.rs index 164330963..7dad169bd 100644 --- a/src/metadata/dup_overrides.rs +++ b/src/metadata/dup_overrides.rs @@ -32,7 +32,7 @@ use melior::{ ir::{ attribute::{FlatSymbolRefAttribute, StringAttribute, TypeAttribute}, r#type::FunctionType, - Block, Location, Module, Region, Value, ValueLike, + Attribute, Block, Identifier, Location, Module, Region, Value, ValueLike, }, Context, }; @@ -85,7 +85,16 @@ impl DupOverridesMeta { StringAttribute::new(context, &format!("dup${}", id.id)), TypeAttribute::new(FunctionType::new(context, &[ty], &[ty, ty]).into()), region, - &[], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], Location::unknown(context), )); } diff --git a/src/metadata/runtime_bindings.rs b/src/metadata/runtime_bindings.rs index 78bf2eca0..3ddbf0441 100644 --- a/src/metadata/runtime_bindings.rs +++ b/src/metadata/runtime_bindings.rs @@ -9,7 +9,7 @@ use melior::{ ir::{ attribute::{FlatSymbolRefAttribute, StringAttribute, TypeAttribute}, r#type::{FunctionType, IntegerType}, - Block, Identifier, Location, Module, OperationRef, Region, Value, + Attribute, Block, Identifier, Location, Module, OperationRef, Region, Value, }, Context, }; @@ -76,10 +76,16 @@ impl RuntimeBindingsMeta { .into(), ), Region::new(), - &[( - Identifier::new(context, "sym_visibility"), - StringAttribute::new(context, "private").into(), - )], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], Location::unknown(context), )); } @@ -128,10 +134,16 @@ impl RuntimeBindingsMeta { .into(), ), Region::new(), - &[( - Identifier::new(context, "sym_visibility"), - StringAttribute::new(context, "private").into(), - )], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], Location::unknown(context), )); } @@ -178,10 +190,16 @@ impl RuntimeBindingsMeta { .into(), ), Region::new(), - &[( - Identifier::new(context, "sym_visibility"), - StringAttribute::new(context, "private").into(), - )], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], Location::unknown(context), )); } @@ -220,10 +238,16 @@ impl RuntimeBindingsMeta { .into(), ), Region::new(), - &[( - Identifier::new(context, "sym_visibility"), - StringAttribute::new(context, "private").into(), - )], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], Location::unknown(context), )); } @@ -262,10 +286,16 @@ impl RuntimeBindingsMeta { .into(), ), Region::new(), - &[( - Identifier::new(context, "sym_visibility"), - StringAttribute::new(context, "private").into(), - )], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], Location::unknown(context), )); } @@ -299,10 +329,16 @@ impl RuntimeBindingsMeta { FunctionType::new(context, &[llvm::r#type::pointer(context, 0)], &[]).into(), ), Region::new(), - &[( - Identifier::new(context, "sym_visibility"), - StringAttribute::new(context, "private").into(), - )], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], Location::unknown(context), )); } @@ -345,10 +381,16 @@ impl RuntimeBindingsMeta { .into(), ), Region::new(), - &[( - Identifier::new(context, "sym_visibility"), - StringAttribute::new(context, "private").into(), - )], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], Location::unknown(context), )); } @@ -394,10 +436,16 @@ impl RuntimeBindingsMeta { .into(), ), Region::new(), - &[( - Identifier::new(context, "sym_visibility"), - StringAttribute::new(context, "private").into(), - )], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], Location::unknown(context), )); } @@ -442,10 +490,16 @@ impl RuntimeBindingsMeta { .into(), ), Region::new(), - &[( - Identifier::new(context, "sym_visibility"), - StringAttribute::new(context, "private").into(), - )], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], location, )); } @@ -489,10 +543,16 @@ impl RuntimeBindingsMeta { .into(), ), Region::new(), - &[( - Identifier::new(context, "sym_visibility"), - StringAttribute::new(context, "private").into(), - )], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], Location::unknown(context), )); } @@ -548,10 +608,16 @@ impl RuntimeBindingsMeta { .into(), ), Region::new(), - &[( - Identifier::new(context, "sym_visibility"), - StringAttribute::new(context, "private").into(), - )], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], Location::unknown(context), )); } @@ -604,10 +670,16 @@ impl RuntimeBindingsMeta { .into(), ), Region::new(), - &[( - Identifier::new(context, "sym_visibility"), - StringAttribute::new(context, "private").into(), - )], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], Location::unknown(context), )); } @@ -655,10 +727,16 @@ impl RuntimeBindingsMeta { .into(), ), Region::new(), - &[( - Identifier::new(context, "sym_visibility"), - StringAttribute::new(context, "private").into(), - )], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], Location::unknown(context), )); } @@ -708,10 +786,16 @@ impl RuntimeBindingsMeta { .into(), ), Region::new(), - &[( - Identifier::new(context, "sym_visibility"), - StringAttribute::new(context, "private").into(), - )], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], Location::unknown(context), )); } @@ -755,10 +839,16 @@ impl RuntimeBindingsMeta { .into(), ), Region::new(), - &[( - Identifier::new(context, "sym_visibility"), - StringAttribute::new(context, "private").into(), - )], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], Location::unknown(context), )); } @@ -809,10 +899,16 @@ impl RuntimeBindingsMeta { .into(), ), Region::new(), - &[( - Identifier::new(context, "sym_visibility"), - StringAttribute::new(context, "private").into(), - )], + &[ + ( + Identifier::new(context, "sym_visibility"), + StringAttribute::new(context, "private").into(), + ), + ( + Identifier::new(context, "llvm.linkage"), + Attribute::parse(context, "#llvm.linkage").unwrap(), + ), + ], Location::unknown(context), )); }