Skip to content

Commit ffeed2b

Browse files
committed
Extract helper method module_add_named_metadata_node
1 parent ecb831d commit ffeed2b

File tree

2 files changed

+18
-19
lines changed

2 files changed

+18
-19
lines changed

compiler/rustc_codegen_llvm/src/consts.rs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -494,16 +494,7 @@ impl<'ll> CodegenCx<'ll, '_> {
494494
let bytes = alloc.inspect_with_uninit_and_ptr_outside_interpreter(0..alloc.len());
495495
let alloc = self.create_metadata(bytes);
496496
let data = [section, alloc];
497-
let meta =
498-
unsafe { llvm::LLVMMDNodeInContext2(self.llcx, data.as_ptr(), data.len()) };
499-
let val = self.get_metadata_value(meta);
500-
unsafe {
501-
llvm::LLVMAddNamedMetadataOperand(
502-
self.llmod,
503-
c"wasm.custom_sections".as_ptr(),
504-
val,
505-
)
506-
};
497+
self.module_add_named_metadata_node(self.llmod(), c"wasm.custom_sections", &data);
507498
}
508499
} else {
509500
base::set_link_section(g, attrs);

compiler/rustc_codegen_llvm/src/context.rs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ use smallvec::SmallVec;
3434
use crate::back::write::to_llvm_code_model;
3535
use crate::callee::get_fn;
3636
use crate::debuginfo::metadata::apply_vcall_visibility_metadata;
37-
use crate::llvm::{Metadata, MetadataKindId};
37+
use crate::llvm::{Metadata, MetadataKindId, Module};
3838
use crate::type_::Type;
3939
use crate::value::Value;
4040
use crate::{attributes, common, coverageinfo, debuginfo, llvm, llvm_util};
@@ -495,14 +495,7 @@ pub(crate) unsafe fn create_module<'ll>(
495495
format!("rustc version {}", option_env!("CFG_VERSION").expect("CFG_VERSION"));
496496

497497
let name_metadata = cx.create_metadata(rustc_producer.as_bytes());
498-
499-
unsafe {
500-
llvm::LLVMAddNamedMetadataOperand(
501-
llmod,
502-
c"llvm.ident".as_ptr(),
503-
&cx.get_metadata_value(llvm::LLVMMDNodeInContext2(llcx, &name_metadata, 1)),
504-
);
505-
}
498+
cx.module_add_named_metadata_node(llmod, c"llvm.ident", &[name_metadata]);
506499

507500
// Emit RISC-V specific target-abi metadata
508501
// to workaround lld as the LTO plugin not
@@ -1031,6 +1024,21 @@ impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX> {
10311024
let md = self.md_node_in_context(md_list);
10321025
self.set_metadata(instruction, kind_id, md);
10331026
}
1027+
1028+
/// Helper method for the sequence of calls:
1029+
/// - `LLVMMDNodeInContext2` (to create an `llvm::MDNode` from a list of metadata)
1030+
/// - `LLVMMetadataAsValue` (to adapt that node to an `llvm::Value`)
1031+
/// - `LLVMAddNamedMetadataOperand` (to set that node as metadata of `kind_name` for `module`)
1032+
pub(crate) fn module_add_named_metadata_node(
1033+
&self,
1034+
module: &'ll Module,
1035+
kind_name: &CStr,
1036+
md_list: &[&'ll Metadata],
1037+
) {
1038+
let md = self.md_node_in_context(md_list);
1039+
let md_as_val = self.get_metadata_value(md);
1040+
unsafe { llvm::LLVMAddNamedMetadataOperand(module, kind_name.as_ptr(), md_as_val) };
1041+
}
10341042
}
10351043

10361044
impl HasDataLayout for CodegenCx<'_, '_> {

0 commit comments

Comments
 (0)