Skip to content

Commit f994713

Browse files
committed
Remove usage of FnAbi in codegen_intrinsic_call
1 parent 0348509 commit f994713

File tree

1 file changed

+11
-21
lines changed

1 file changed

+11
-21
lines changed

src/intrinsic/mod.rs

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use rustc_middle::ty::layout::FnAbiOf;
2626
use rustc_middle::ty::layout::{HasTypingEnv, LayoutOf};
2727
use rustc_middle::ty::{self, Instance, Ty};
2828
use rustc_span::{Span, Symbol, sym};
29-
use rustc_target::callconv::{ArgAbi, FnAbi, PassMode};
29+
use rustc_target::callconv::{ArgAbi, PassMode};
3030
use rustc_target::spec::PanicStrategy;
3131

3232
#[cfg(feature = "master")]
@@ -200,7 +200,6 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
200200
fn codegen_intrinsic_call(
201201
&mut self,
202202
instance: Instance<'tcx>,
203-
fn_abi: &FnAbi<'tcx, Ty<'tcx>>,
204203
args: &[OperandRef<'tcx, RValue<'gcc>>],
205204
result: PlaceRef<'tcx, RValue<'gcc>>,
206205
span: Span,
@@ -285,17 +284,10 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
285284
}
286285

287286
sym::volatile_load | sym::unaligned_volatile_load => {
288-
let tp_ty = fn_args.type_at(0);
289287
let ptr = args[0].immediate();
290-
let layout = self.layout_of(tp_ty);
291-
let load = if let PassMode::Cast { cast: ref ty, pad_i32: _ } = fn_abi.ret.mode {
292-
let gcc_ty = ty.gcc_type(self);
293-
self.volatile_load(gcc_ty, ptr)
294-
} else {
295-
self.volatile_load(layout.gcc_type(self), ptr)
296-
};
288+
let load = self.volatile_load(result.layout.gcc_type(self), ptr);
297289
// TODO(antoyo): set alignment.
298-
if let BackendRepr::Scalar(scalar) = layout.backend_repr {
290+
if let BackendRepr::Scalar(scalar) = result.layout.backend_repr {
299291
self.to_immediate_scalar(load, scalar)
300292
} else {
301293
load
@@ -510,16 +502,14 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
510502
_ => return Err(Instance::new_raw(instance.def_id(), instance.args)),
511503
};
512504

513-
if !fn_abi.ret.is_ignore() {
514-
if let PassMode::Cast { cast: ref ty, .. } = fn_abi.ret.mode {
515-
let ptr_llty = self.type_ptr_to(ty.gcc_type(self));
516-
let ptr = self.pointercast(result.val.llval, ptr_llty);
517-
self.store(value, ptr, result.val.align);
518-
} else {
519-
OperandRef::from_immediate_or_packed_pair(self, value, result.layout)
520-
.val
521-
.store(self, result);
522-
}
505+
if result.layout.ty.is_bool() {
506+
OperandRef::from_immediate_or_packed_pair(self, value, result.layout)
507+
.val
508+
.store(self, result);
509+
} else if !result.layout.ty.is_unit() {
510+
let ptr_llty = self.type_ptr_to(result.layout.gcc_type(self));
511+
let ptr = self.pointercast(result.val.llval, ptr_llty);
512+
self.store(value, ptr, result.val.align);
523513
}
524514
Ok(())
525515
}

0 commit comments

Comments
 (0)