From a85d1ef33352bf84af7e431a4a7dd5625d35d2fc Mon Sep 17 00:00:00 2001 From: xermicus Date: Fri, 26 Apr 2024 10:36:28 +0200 Subject: [PATCH] prevent confusing AlwaysInline and NoInline on O0 Signed-off-by: xermicus --- .../src/eravm/context/function/mod.rs | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/crates/llvm-context/src/eravm/context/function/mod.rs b/crates/llvm-context/src/eravm/context/function/mod.rs index 82013fc..01f33a7 100644 --- a/crates/llvm-context/src/eravm/context/function/mod.rs +++ b/crates/llvm-context/src/eravm/context/function/mod.rs @@ -183,6 +183,24 @@ impl<'ctx> Function<'ctx> { } } + /// Remove specified attributes existing on the given declaration. + pub fn remove_attributes(declaration: Declaration, attributes: &[Attribute]) { + for attribute in attributes.iter().filter(|attribute| { + declaration + .value + .get_enum_attribute( + inkwell::attributes::AttributeLoc::Function, + **attribute as u32, + ) + .is_some() + }) { + declaration.value.remove_enum_attribute( + inkwell::attributes::AttributeLoc::Function, + *attribute as u32, + ); + } + } + /// /// Sets the default attributes. /// @@ -194,6 +212,10 @@ impl<'ctx> Function<'ctx> { optimizer: &Optimizer, ) { if optimizer.settings().level_middle_end == inkwell::OptimizationLevel::None { + Self::remove_attributes( + declaration, + &[Attribute::OptimizeForSize, Attribute::AlwaysInline], + ); Self::set_attributes( llvm, declaration,