|
1 | 1 | use std::borrow::{Borrow, Cow}; |
| 2 | +use std::iter; |
2 | 3 | use std::ops::Deref; |
3 | | -use std::{iter, ptr}; |
4 | 4 |
|
5 | 5 | use rustc_ast::expand::typetree::FncTree; |
6 | 6 | pub(crate) mod autodiff; |
7 | 7 | pub(crate) mod gpu_offload; |
8 | 8 |
|
9 | | -use libc::{c_char, c_uint, size_t}; |
| 9 | +use libc::{c_char, c_uint}; |
10 | 10 | use rustc_abi as abi; |
11 | 11 | use rustc_abi::{Align, Size, WrappingRange}; |
12 | 12 | use rustc_codegen_ssa::MemFlags; |
@@ -396,10 +396,7 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> { |
396 | 396 | md.push(weight(is_cold)); |
397 | 397 | } |
398 | 398 |
|
399 | | - unsafe { |
400 | | - let md_node = llvm::LLVMMDNodeInContext2(self.cx.llcx, md.as_ptr(), md.len() as size_t); |
401 | | - self.cx.set_metadata(switch, llvm::MD_prof, md_node); |
402 | | - } |
| 399 | + self.cx.set_metadata_node(switch, llvm::MD_prof, &md); |
403 | 400 | } |
404 | 401 |
|
405 | 402 | fn invoke( |
@@ -801,22 +798,16 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> { |
801 | 798 | return; |
802 | 799 | } |
803 | 800 |
|
804 | | - unsafe { |
805 | | - let llty = self.cx.val_ty(load); |
806 | | - let md = [ |
807 | | - llvm::LLVMValueAsMetadata(self.cx.const_uint_big(llty, range.start)), |
808 | | - llvm::LLVMValueAsMetadata(self.cx.const_uint_big(llty, range.end.wrapping_add(1))), |
809 | | - ]; |
810 | | - let md = llvm::LLVMMDNodeInContext2(self.cx.llcx, md.as_ptr(), md.len()); |
811 | | - self.set_metadata(load, llvm::MD_range, md); |
812 | | - } |
| 801 | + let llty = self.cx.val_ty(load); |
| 802 | + let md = [ |
| 803 | + llvm::LLVMValueAsMetadata(self.cx.const_uint_big(llty, range.start)), |
| 804 | + llvm::LLVMValueAsMetadata(self.cx.const_uint_big(llty, range.end.wrapping_add(1))), |
| 805 | + ]; |
| 806 | + self.set_metadata_node(load, llvm::MD_range, &md); |
813 | 807 | } |
814 | 808 |
|
815 | 809 | fn nonnull_metadata(&mut self, load: &'ll Value) { |
816 | | - unsafe { |
817 | | - let md = llvm::LLVMMDNodeInContext2(self.cx.llcx, ptr::null(), 0); |
818 | | - self.set_metadata(load, llvm::MD_nonnull, md); |
819 | | - } |
| 810 | + self.set_metadata_node(load, llvm::MD_nonnull, &[]); |
820 | 811 | } |
821 | 812 |
|
822 | 813 | fn store(&mut self, val: &'ll Value, ptr: &'ll Value, align: Align) -> &'ll Value { |
@@ -865,8 +856,7 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> { |
865 | 856 | // |
866 | 857 | // [1]: https://llvm.org/docs/LangRef.html#store-instruction |
867 | 858 | let one = llvm::LLVMValueAsMetadata(self.cx.const_i32(1)); |
868 | | - let md = llvm::LLVMMDNodeInContext2(self.cx.llcx, &one, 1); |
869 | | - self.set_metadata(store, llvm::MD_nontemporal, md); |
| 859 | + self.set_metadata_node(store, llvm::MD_nontemporal, &[one]); |
870 | 860 | } |
871 | 861 | } |
872 | 862 | store |
@@ -1381,10 +1371,7 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> { |
1381 | 1371 | } |
1382 | 1372 |
|
1383 | 1373 | fn set_invariant_load(&mut self, load: &'ll Value) { |
1384 | | - unsafe { |
1385 | | - let md = llvm::LLVMMDNodeInContext2(self.cx.llcx, ptr::null(), 0); |
1386 | | - self.set_metadata(load, llvm::MD_invariant_load, md); |
1387 | | - } |
| 1374 | + self.set_metadata_node(load, llvm::MD_invariant_load, &[]); |
1388 | 1375 | } |
1389 | 1376 |
|
1390 | 1377 | fn lifetime_start(&mut self, ptr: &'ll Value, size: Size) { |
@@ -1528,25 +1515,16 @@ impl<'a, 'll, CX: Borrow<SCx<'ll>>> GenericBuilder<'a, 'll, CX> { |
1528 | 1515 | } |
1529 | 1516 | impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> { |
1530 | 1517 | fn align_metadata(&mut self, load: &'ll Value, align: Align) { |
1531 | | - unsafe { |
1532 | | - let md = [llvm::LLVMValueAsMetadata(self.cx.const_u64(align.bytes()))]; |
1533 | | - let md = llvm::LLVMMDNodeInContext2(self.cx.llcx, md.as_ptr(), md.len()); |
1534 | | - self.set_metadata(load, llvm::MD_align, md); |
1535 | | - } |
| 1518 | + let md = [llvm::LLVMValueAsMetadata(self.cx.const_u64(align.bytes()))]; |
| 1519 | + self.set_metadata_node(load, llvm::MD_align, &md); |
1536 | 1520 | } |
1537 | 1521 |
|
1538 | 1522 | fn noundef_metadata(&mut self, load: &'ll Value) { |
1539 | | - unsafe { |
1540 | | - let md = llvm::LLVMMDNodeInContext2(self.cx.llcx, ptr::null(), 0); |
1541 | | - self.set_metadata(load, llvm::MD_noundef, md); |
1542 | | - } |
| 1523 | + self.set_metadata_node(load, llvm::MD_noundef, &[]); |
1543 | 1524 | } |
1544 | 1525 |
|
1545 | 1526 | pub(crate) fn set_unpredictable(&mut self, inst: &'ll Value) { |
1546 | | - unsafe { |
1547 | | - let md = llvm::LLVMMDNodeInContext2(self.cx.llcx, ptr::null(), 0); |
1548 | | - self.set_metadata(inst, llvm::MD_unpredictable, md); |
1549 | | - } |
| 1527 | + self.set_metadata_node(inst, llvm::MD_unpredictable, &[]); |
1550 | 1528 | } |
1551 | 1529 | } |
1552 | 1530 | impl<'a, 'll, CX: Borrow<SCx<'ll>>> GenericBuilder<'a, 'll, CX> { |
|
0 commit comments