To keep cross-compiling straightforward, Cretonne shouldn't have any behavior that depends on the host. This renames the "Native" calling convention to "SystemV", which has a defined meaning for each target, so that it's clear that the calling convention doesn't change depending on what host Cretonne is running on.
177 lines
3.0 KiB
Plaintext
177 lines
3.0 KiB
Plaintext
test regalloc
|
|
set is_64bit
|
|
isa intel
|
|
|
|
; Test case found by the Binaryen fuzzer.
|
|
;
|
|
; The spiller panics with a
|
|
; 'Ran out of GPR registers when inserting copy before v68 = icmp.i32 eq v66, v67',
|
|
; lib/cretonne/src/regalloc/spilling.rs:425:28 message.
|
|
;
|
|
; The process_reg_uses() function is trying to insert a copy before the icmp instruction in ebb4
|
|
; and runs out of registers to spill. Note that ebb7 has a lot of dead parameter values.
|
|
;
|
|
; The spiller was not releasing register pressure for dead EBB parameters.
|
|
|
|
function %pr223(i32 [%rdi], i64 vmctx [%rsi]) -> i64 [%rax] system_v {
|
|
ebb0(v0: i32, v1: i64):
|
|
v2 = iconst.i32 0
|
|
v3 = iconst.i64 0
|
|
v4 = iconst.i32 0xffff_ffff_bb3f_4a2c
|
|
brz v4, ebb5
|
|
jump ebb1
|
|
|
|
ebb1:
|
|
v5 = iconst.i32 0
|
|
v6 = copy.i64 v3
|
|
v7 = copy.i64 v3
|
|
v8 = copy.i64 v3
|
|
v9 = copy.i64 v3
|
|
v10 = copy.i64 v3
|
|
v11 = copy.i64 v3
|
|
v12 = copy.i64 v3
|
|
v13 = copy.i64 v3
|
|
v14 = copy.i64 v3
|
|
v15 = copy.i64 v3
|
|
v16 = copy.i64 v3
|
|
brnz v5, ebb4(v2, v3, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16)
|
|
jump ebb2
|
|
|
|
ebb2:
|
|
v17 = iconst.i32 0
|
|
v18 = copy.i64 v3
|
|
v19 = copy.i64 v3
|
|
v20 = copy.i64 v3
|
|
v21 = copy.i64 v3
|
|
v22 = copy.i64 v3
|
|
v23 = copy.i64 v3
|
|
v24 = copy.i64 v3
|
|
v25 = copy.i64 v3
|
|
v26 = copy.i64 v3
|
|
v27 = copy.i64 v3
|
|
v28 = copy.i64 v3
|
|
brnz v17, ebb4(v2, v3, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28)
|
|
jump ebb3
|
|
|
|
ebb3:
|
|
jump ebb1
|
|
|
|
ebb4(v29: i32, v30: i64, v31: i64, v32: i64, v33: i64, v34: i64, v35: i64, v36: i64, v37: i64, v38: i64, v39: i64, v40: i64, v41: i64):
|
|
jump ebb7(v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41)
|
|
|
|
ebb5:
|
|
jump ebb6
|
|
|
|
ebb6:
|
|
v42 = copy.i64 v3
|
|
v43 = copy.i64 v3
|
|
v44 = copy.i64 v3
|
|
v45 = copy.i64 v3
|
|
v46 = copy.i64 v3
|
|
v47 = copy.i64 v3
|
|
v48 = copy.i64 v3
|
|
v49 = copy.i64 v3
|
|
v50 = copy.i64 v3
|
|
v51 = copy.i64 v3
|
|
v52 = copy.i64 v3
|
|
jump ebb7(v2, v3, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52)
|
|
|
|
ebb7(v53: i32, v54: i64, v55: i64, v56: i64, v57: i64, v58: i64, v59: i64, v60: i64, v61: i64, v62: i64, v63: i64, v64: i64, v65: i64):
|
|
v66 = iconst.i32 0
|
|
v67 = iconst.i32 0
|
|
v68 = icmp eq v66, v67
|
|
v69 = bint.i32 v68
|
|
jump ebb8
|
|
|
|
ebb8:
|
|
jump ebb9
|
|
|
|
ebb9:
|
|
v70 = iconst.i32 0xffff_ffff_ffff_912f
|
|
brz v70, ebb10
|
|
jump ebb35
|
|
|
|
ebb10:
|
|
v71 = iconst.i32 0
|
|
brz v71, ebb11
|
|
jump ebb27
|
|
|
|
ebb11:
|
|
jump ebb12
|
|
|
|
ebb12:
|
|
jump ebb13
|
|
|
|
ebb13:
|
|
jump ebb14
|
|
|
|
ebb14:
|
|
jump ebb15
|
|
|
|
ebb15:
|
|
jump ebb16
|
|
|
|
ebb16:
|
|
jump ebb17
|
|
|
|
ebb17:
|
|
jump ebb18
|
|
|
|
ebb18:
|
|
jump ebb19
|
|
|
|
ebb19:
|
|
jump ebb20
|
|
|
|
ebb20:
|
|
jump ebb21
|
|
|
|
ebb21:
|
|
jump ebb22
|
|
|
|
ebb22:
|
|
jump ebb23
|
|
|
|
ebb23:
|
|
jump ebb24
|
|
|
|
ebb24:
|
|
jump ebb25
|
|
|
|
ebb25:
|
|
jump ebb26
|
|
|
|
ebb26:
|
|
jump ebb27
|
|
|
|
ebb27:
|
|
jump ebb28
|
|
|
|
ebb28:
|
|
jump ebb29
|
|
|
|
ebb29:
|
|
jump ebb30
|
|
|
|
ebb30:
|
|
jump ebb31
|
|
|
|
ebb31:
|
|
jump ebb32
|
|
|
|
ebb32:
|
|
jump ebb33
|
|
|
|
ebb33:
|
|
jump ebb34
|
|
|
|
ebb34:
|
|
jump ebb35
|
|
|
|
ebb35:
|
|
jump ebb36
|
|
|
|
ebb36:
|
|
trap user0
|
|
}
|