From 14798d69374845a8107c482470e2242fc2476734 Mon Sep 17 00:00:00 2001 From: Denis Merigoux Date: Mon, 20 Aug 2018 17:44:18 +0200 Subject: [PATCH] Generalized BasicBlocks in BuilderMethods trait --- src/librustc_codegen_llvm/base.rs | 7 ++++--- src/librustc_codegen_llvm/builder.rs | 3 ++- src/librustc_codegen_llvm/mir/operand.rs | 6 ++++-- src/librustc_codegen_llvm/traits.rs | 8 ++++++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/librustc_codegen_llvm/base.rs b/src/librustc_codegen_llvm/base.rs index f268d3dd86f..9af77aa7953 100644 --- a/src/librustc_codegen_llvm/base.rs +++ b/src/librustc_codegen_llvm/base.rs @@ -76,6 +76,7 @@ use rustc_data_structures::sync::Lrc; use rustc_data_structures::indexed_vec::Idx; use traits::BuilderMethods; +use llvm::BasicBlock; use std::any::Any; use std::cmp; @@ -391,7 +392,7 @@ pub fn call_assume(bx: &Builder<'_, 'll, '_>, val: &'ll Value) { pub fn from_immediate<'a, 'll: 'a, 'tcx: 'll, Value : ?Sized, - Builder: BuilderMethods<'a, 'll, 'tcx, Value>>( + Builder: BuilderMethods<'a, 'll, 'tcx, Value, BasicBlock>>( bx: &Builder, val: &'ll Value ) -> &'ll Value where Value : ValueTrait { @@ -426,7 +427,7 @@ pub fn to_immediate_scalar( pub fn call_memcpy<'a, 'll: 'a, 'tcx: 'll, Value : ?Sized, - Builder: BuilderMethods<'a, 'll, 'tcx, Value>>( + Builder: BuilderMethods<'a, 'll, 'tcx, Value, BasicBlock>>( bx: &Builder, dst: &'ll Value, dst_align: Align, @@ -452,7 +453,7 @@ pub fn call_memcpy<'a, 'll: 'a, 'tcx: 'll, pub fn memcpy_ty<'a, 'll: 'a, 'tcx: 'll, Value : ?Sized, - Builder: BuilderMethods<'a, 'll, 'tcx, Value>>( + Builder: BuilderMethods<'a, 'll, 'tcx, Value, BasicBlock>>( bx: &Builder, dst: &'ll Value, dst_align: Align, diff --git a/src/librustc_codegen_llvm/builder.rs b/src/librustc_codegen_llvm/builder.rs index f8074db4388..8750b67f78a 100644 --- a/src/librustc_codegen_llvm/builder.rs +++ b/src/librustc_codegen_llvm/builder.rs @@ -55,7 +55,8 @@ bitflags! { } } -impl BuilderMethods<'a, 'll, 'tcx, Value> for Builder<'a, 'll, 'tcx> { +impl BuilderMethods<'a, 'll, 'tcx, Value, BasicBlock> + for Builder<'a, 'll, 'tcx> { fn new_block<'b>( cx: &'a CodegenCx<'ll, 'tcx>, llfn: &'ll Value, diff --git a/src/librustc_codegen_llvm/mir/operand.rs b/src/librustc_codegen_llvm/mir/operand.rs index e640b72cd44..9eb1f2fbb03 100644 --- a/src/librustc_codegen_llvm/mir/operand.rs +++ b/src/librustc_codegen_llvm/mir/operand.rs @@ -22,6 +22,7 @@ use type_::Type; use glue; use traits::BuilderMethods; +use llvm::BasicBlock; use std::fmt; @@ -281,7 +282,8 @@ impl OperandValue<&'ll Value> { impl<'a, 'll: 'a, 'tcx: 'll, Value : ?Sized> OperandValue<&'ll Value> where Value : ValueTrait, - Builder<'a, 'll, 'tcx, &'ll Value>: BuilderMethods<'a, 'll, 'tcx, Value> + Builder<'a, 'll, 'tcx, &'ll Value>: + BuilderMethods<'a, 'll, 'tcx, Value, BasicBlock> { pub fn nontemporal_store( self, @@ -291,7 +293,7 @@ impl<'a, 'll: 'a, 'tcx: 'll, Value : ?Sized> OperandValue<&'ll Value> where self.store_with_flags(bx, dest, MemFlags::NONTEMPORAL); } - fn store_with_flags>( + fn store_with_flags>( self, bx: &Builder, dest: PlaceRef<'tcx, &'ll Value>, diff --git a/src/librustc_codegen_llvm/traits.rs b/src/librustc_codegen_llvm/traits.rs index 2a6dbe9944d..308677fcb73 100644 --- a/src/librustc_codegen_llvm/traits.rs +++ b/src/librustc_codegen_llvm/traits.rs @@ -10,7 +10,7 @@ use llvm::{AtomicRmwBinOp, AtomicOrdering, SynchronizationScope, AsmDialect}; use llvm::{IntPredicate, RealPredicate, OperandBundleDef}; -use llvm::{self, BasicBlock}; +use llvm; use common::*; use type_::Type; use libc::c_char; @@ -23,7 +23,11 @@ use std::borrow::Cow; use std::ops::Range; -pub trait BuilderMethods<'a, 'll :'a, 'tcx: 'll, Value : ?Sized> { +pub trait BuilderMethods<'a, 'll :'a, 'tcx: 'll, + Value : ?Sized, + BasicBlock: ?Sized + > { + fn new_block<'b>( cx: &'a CodegenCx<'ll, 'tcx, &'ll Value>, llfn: &'ll Value,