Remove references for sig (#5414)

This commit is contained in:
Timothy Chen
2022-12-13 00:46:23 +08:00
committed by GitHub
parent 8f23e5a66f
commit 122872fb0c
4 changed files with 39 additions and 45 deletions

View File

@@ -123,13 +123,13 @@ impl generated_code::Context for IsleContext<'_, '_, MInst, Flags, IsaFlags, 6>
builder.take()
}
fn defs_init(&mut self, abi: &Sig) -> CallRetList {
fn defs_init(&mut self, abi: Sig) -> CallRetList {
// Allocate writable registers for all retval regs, except for StructRet args.
let mut defs = smallvec![];
for i in 0..self.lower_ctx.sigs().num_rets(*abi) {
for i in 0..self.lower_ctx.sigs().num_rets(abi) {
if let &ABIArg::Slots {
ref slots, purpose, ..
} = &self.lower_ctx.sigs().get_ret(*abi, i)
} = &self.lower_ctx.sigs().get_ret(abi, i)
{
if purpose == ArgumentPurpose::StructReturn {
continue;
@@ -165,20 +165,20 @@ impl generated_code::Context for IsleContext<'_, '_, MInst, Flags, IsaFlags, 6>
self.lower_ctx.sigs().abi_sig_for_sig_ref(sig_ref)
}
fn abi_first_ret(&mut self, sig_ref: SigRef, abi: &Sig) -> usize {
fn abi_first_ret(&mut self, sig_ref: SigRef, abi: Sig) -> usize {
// Return the index of the first actual return value, excluding
// any StructReturn that might have been added to Sig.
let sig = &self.lower_ctx.dfg().signatures[sig_ref];
self.lower_ctx.sigs().num_rets(*abi) - sig.returns.len()
self.lower_ctx.sigs().num_rets(abi) - sig.returns.len()
}
fn abi_lane_order(&mut self, abi: &Sig) -> LaneOrder {
lane_order_for_call_conv(self.lower_ctx.sigs()[*abi].call_conv())
fn abi_lane_order(&mut self, abi: Sig) -> LaneOrder {
lane_order_for_call_conv(self.lower_ctx.sigs()[abi].call_conv())
}
fn abi_accumulate_outgoing_args_size(&mut self, abi: &Sig) -> Unit {
let off = self.lower_ctx.sigs()[*abi].sized_stack_arg_space()
+ self.lower_ctx.sigs()[*abi].sized_stack_ret_space();
fn abi_accumulate_outgoing_args_size(&mut self, abi: Sig) -> Unit {
let off = self.lower_ctx.sigs()[abi].sized_stack_arg_space()
+ self.lower_ctx.sigs()[abi].sized_stack_ret_space();
self.lower_ctx
.abi_mut()
.accumulate_outgoing_args_size(off as u32);
@@ -186,16 +186,13 @@ impl generated_code::Context for IsleContext<'_, '_, MInst, Flags, IsaFlags, 6>
fn abi_call_info(
&mut self,
abi: &Sig,
abi: Sig,
name: ExternalName,
uses: &CallArgList,
defs: &CallRetList,
opcode: &Opcode,
) -> BoxCallInfo {
let clobbers = self
.lower_ctx
.sigs()
.call_clobbers::<S390xMachineDeps>(*abi);
let clobbers = self.lower_ctx.sigs().call_clobbers::<S390xMachineDeps>(abi);
Box::new(CallInfo {
dest: name.clone(),
uses: uses.clone(),
@@ -203,23 +200,20 @@ impl generated_code::Context for IsleContext<'_, '_, MInst, Flags, IsaFlags, 6>
clobbers,
opcode: *opcode,
caller_callconv: self.lower_ctx.abi().call_conv(self.lower_ctx.sigs()),
callee_callconv: self.lower_ctx.sigs()[*abi].call_conv(),
callee_callconv: self.lower_ctx.sigs()[abi].call_conv(),
tls_symbol: None,
})
}
fn abi_call_ind_info(
&mut self,
abi: &Sig,
abi: Sig,
target: Reg,
uses: &CallArgList,
defs: &CallRetList,
opcode: &Opcode,
) -> BoxCallIndInfo {
let clobbers = self
.lower_ctx
.sigs()
.call_clobbers::<S390xMachineDeps>(*abi);
let clobbers = self.lower_ctx.sigs().call_clobbers::<S390xMachineDeps>(abi);
Box::new(CallIndInfo {
rn: target,
uses: uses.clone(),
@@ -227,7 +221,7 @@ impl generated_code::Context for IsleContext<'_, '_, MInst, Flags, IsaFlags, 6>
clobbers,
opcode: *opcode,
caller_callconv: self.lower_ctx.abi().call_conv(self.lower_ctx.sigs()),
callee_callconv: self.lower_ctx.sigs()[*abi].call_conv(),
callee_callconv: self.lower_ctx.sigs()[abi].call_conv(),
})
}

View File

@@ -1018,11 +1018,11 @@ pub struct Callee<M: ABIMachineSpec> {
fn get_special_purpose_param_register(
f: &ir::Function,
sigs: &SigSet,
sig: &Sig,
sig: Sig,
purpose: ir::ArgumentPurpose,
) -> Option<Reg> {
let idx = f.signature.special_param_index(purpose)?;
match &sigs.args(*sig)[idx] {
match &sigs.args(sig)[idx] {
&ABIArg::Slots { ref slots, .. } => match &slots[0] {
&ABIArgSlot::Reg { reg, .. } => Some(reg.into()),
_ => None,
@@ -1100,11 +1100,11 @@ impl<M: ABIMachineSpec> Callee<M> {
// argument or as a global value which often calculates the stack limit
// from the arguments.
let stack_limit =
get_special_purpose_param_register(f, sigs, &sig, ir::ArgumentPurpose::StackLimit)
get_special_purpose_param_register(f, sigs, sig, ir::ArgumentPurpose::StackLimit)
.map(|reg| (reg, smallvec![]))
.or_else(|| {
f.stack_limit
.map(|gv| gen_stack_limit::<M>(f, sigs, &sig, gv))
.map(|gv| gen_stack_limit::<M>(f, sigs, sig, gv))
});
// Determine whether a probestack call is required for large enough
@@ -1225,7 +1225,7 @@ impl<M: ABIMachineSpec> Callee<M> {
fn gen_stack_limit<M: ABIMachineSpec>(
f: &ir::Function,
sigs: &SigSet,
sig: &Sig,
sig: Sig,
gv: ir::GlobalValue,
) -> (Reg, SmallInstVec<M::I>) {
let mut insts = smallvec![];
@@ -1236,7 +1236,7 @@ fn gen_stack_limit<M: ABIMachineSpec>(
fn generate_gv<M: ABIMachineSpec>(
f: &ir::Function,
sigs: &SigSet,
sig: &Sig,
sig: Sig,
gv: ir::GlobalValue,
insts: &mut SmallInstVec<M::I>,
) -> Reg {

View File

@@ -400,40 +400,40 @@ macro_rules! isle_lower_prelude_methods {
regs.regs()[idx]
}
fn abi_num_args(&mut self, abi: &Sig) -> usize {
self.lower_ctx.sigs().num_args(*abi)
fn abi_num_args(&mut self, abi: Sig) -> usize {
self.lower_ctx.sigs().num_args(abi)
}
fn abi_get_arg(&mut self, abi: &Sig, idx: usize) -> ABIArg {
self.lower_ctx.sigs().get_arg(*abi, idx)
fn abi_get_arg(&mut self, abi: Sig, idx: usize) -> ABIArg {
self.lower_ctx.sigs().get_arg(abi, idx)
}
fn abi_num_rets(&mut self, abi: &Sig) -> usize {
self.lower_ctx.sigs().num_rets(*abi)
fn abi_num_rets(&mut self, abi: Sig) -> usize {
self.lower_ctx.sigs().num_rets(abi)
}
fn abi_get_ret(&mut self, abi: &Sig, idx: usize) -> ABIArg {
self.lower_ctx.sigs().get_ret(*abi, idx)
fn abi_get_ret(&mut self, abi: Sig, idx: usize) -> ABIArg {
self.lower_ctx.sigs().get_ret(abi, idx)
}
fn abi_ret_arg(&mut self, abi: &Sig) -> Option<ABIArg> {
self.lower_ctx.sigs().get_ret_arg(*abi)
fn abi_ret_arg(&mut self, abi: Sig) -> Option<ABIArg> {
self.lower_ctx.sigs().get_ret_arg(abi)
}
fn abi_no_ret_arg(&mut self, abi: &Sig) -> Option<()> {
if let Some(_) = self.lower_ctx.sigs().get_ret_arg(*abi) {
fn abi_no_ret_arg(&mut self, abi: Sig) -> Option<()> {
if let Some(_) = self.lower_ctx.sigs().get_ret_arg(abi) {
None
} else {
Some(())
}
}
fn abi_sized_stack_arg_space(&mut self, abi: &Sig) -> i64 {
self.lower_ctx.sigs()[*abi].sized_stack_arg_space()
fn abi_sized_stack_arg_space(&mut self, abi: Sig) -> i64 {
self.lower_ctx.sigs()[abi].sized_stack_arg_space()
}
fn abi_sized_stack_ret_space(&mut self, abi: &Sig) -> i64 {
self.lower_ctx.sigs()[*abi].sized_stack_ret_space()
fn abi_sized_stack_ret_space(&mut self, abi: Sig) -> i64 {
self.lower_ctx.sigs()[abi].sized_stack_ret_space()
}
fn abi_arg_only_slot(&mut self, arg: &ABIArg) -> Option<ABIArgSlot> {

View File

@@ -597,7 +597,7 @@
;;;; Helpers for generating calls ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Type to hold information about a function call signature.
(type Sig extern (enum))
(type Sig (primitive Sig))
;; Information how to pass one argument or return value.
(type ABIArg extern (enum))