* Cranelift: use regalloc2 constraints on caller side of ABI code. This PR updates the shared ABI code and backends to use register-operand constraints rather than explicit pinned-vreg moves for register arguments and return values. The s390x backend was not updated, because it has its own implementation of ABI code. Ideally we could converge back to the code shared by x64 and aarch64 (which didn't exist when s390x ported calls to ISLE, so the current situation is underestandable, to be clear!). I'll leave this for future work. This PR exposed several places where regalloc2 needed to be a bit more flexible with constraints; it requires regalloc2#74 to be merged and pulled in. * Update to regalloc2 0.3.3. In addition to version bump, this required removing two asserts as `SpillSlot`s no longer carry their class (so we can't assert that they have the correct class). * Review comments. * Filetest updates. * Add cargo-vet audit for regalloc2 0.3.2 -> 0.3.3 upgrade. * Update to regalloc2 0.4.0.
462 lines
7.6 KiB
Plaintext
462 lines
7.6 KiB
Plaintext
test compile precise-output
|
|
target s390x
|
|
|
|
function %bitrev_i128(i128) -> i128 {
|
|
block0(v0: i128):
|
|
v1 = bitrev v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; vl %v0, 0(%r3)
|
|
; vrepib %v5, 170
|
|
; vrepib %v7, 1
|
|
; vsl %v17, %v0, %v7
|
|
; vsrl %v19, %v0, %v7
|
|
; vsel %v21, %v17, %v19, %v5
|
|
; vrepib %v23, 204
|
|
; vrepib %v25, 2
|
|
; vsl %v27, %v21, %v25
|
|
; vsrl %v29, %v21, %v25
|
|
; vsel %v31, %v27, %v29, %v23
|
|
; vrepib %v1, 240
|
|
; vrepib %v3, 4
|
|
; vsl %v5, %v31, %v3
|
|
; vsrl %v7, %v31, %v3
|
|
; vsel %v17, %v5, %v7, %v1
|
|
; bras %r1, 20 ; data.u128 0x0f0e0d0c0b0a09080706050403020100 ; vl %v19, 0(%r1)
|
|
; vperm %v21, %v17, %v17, %v19
|
|
; vst %v21, 0(%r2)
|
|
; br %r14
|
|
|
|
function %bitrev_i64(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = bitrev v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; lgr %r3, %r2
|
|
; llihf %r2, 2863311530
|
|
; iilf %r2, 2863311530
|
|
; lgr %r5, %r3
|
|
; sllg %r4, %r5, 1
|
|
; srlg %r3, %r5, 1
|
|
; ngr %r4, %r2
|
|
; xilf %r2, 4294967295
|
|
; xihf %r2, 4294967295
|
|
; ngrk %r2, %r3, %r2
|
|
; ogr %r4, %r2
|
|
; llihf %r3, 3435973836
|
|
; iilf %r3, 3435973836
|
|
; sllg %r5, %r4, 2
|
|
; srlg %r4, %r4, 2
|
|
; ngr %r5, %r3
|
|
; xilf %r3, 4294967295
|
|
; xihf %r3, 4294967295
|
|
; ngrk %r3, %r4, %r3
|
|
; ogr %r5, %r3
|
|
; llihf %r4, 4042322160
|
|
; iilf %r4, 4042322160
|
|
; sllg %r2, %r5, 4
|
|
; srlg %r5, %r5, 4
|
|
; ngr %r2, %r4
|
|
; xilf %r4, 4294967295
|
|
; xihf %r4, 4294967295
|
|
; ngrk %r4, %r5, %r4
|
|
; ogr %r2, %r4
|
|
; lrvgr %r2, %r2
|
|
; br %r14
|
|
|
|
function %bitrev_i32(i32) -> i32 {
|
|
block0(v0: i32):
|
|
v1 = bitrev v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; iilf %r5, 2863311530
|
|
; sllk %r3, %r2, 1
|
|
; srlk %r2, %r2, 1
|
|
; nr %r3, %r5
|
|
; xilf %r5, 4294967295
|
|
; nrk %r4, %r2, %r5
|
|
; ork %r5, %r3, %r4
|
|
; iilf %r3, 3435973836
|
|
; sllk %r2, %r5, 2
|
|
; srlk %r4, %r5, 2
|
|
; nrk %r5, %r2, %r3
|
|
; xilf %r3, 4294967295
|
|
; nrk %r2, %r4, %r3
|
|
; ork %r3, %r5, %r2
|
|
; iilf %r5, 4042322160
|
|
; sllk %r4, %r3, 4
|
|
; srlk %r2, %r3, 4
|
|
; nrk %r3, %r4, %r5
|
|
; xilf %r5, 4294967295
|
|
; nrk %r4, %r2, %r5
|
|
; ork %r5, %r3, %r4
|
|
; lrvr %r2, %r5
|
|
; br %r14
|
|
|
|
function %bitrev_i16(i16) -> i16 {
|
|
block0(v0: i16):
|
|
v1 = bitrev v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; lhi %r5, -21846
|
|
; sllk %r3, %r2, 1
|
|
; srlk %r2, %r2, 1
|
|
; nr %r3, %r5
|
|
; xilf %r5, 4294967295
|
|
; nrk %r4, %r2, %r5
|
|
; ork %r5, %r3, %r4
|
|
; lhi %r3, -13108
|
|
; sllk %r2, %r5, 2
|
|
; srlk %r4, %r5, 2
|
|
; nrk %r5, %r2, %r3
|
|
; xilf %r3, 4294967295
|
|
; nrk %r2, %r4, %r3
|
|
; ork %r3, %r5, %r2
|
|
; lhi %r5, -3856
|
|
; sllk %r4, %r3, 4
|
|
; srlk %r2, %r3, 4
|
|
; nrk %r3, %r4, %r5
|
|
; xilf %r5, 4294967295
|
|
; nrk %r4, %r2, %r5
|
|
; ork %r5, %r3, %r4
|
|
; lrvr %r3, %r5
|
|
; srlk %r2, %r3, 16
|
|
; br %r14
|
|
|
|
function %bitrev_i8(i8) -> i8 {
|
|
block0(v0: i8):
|
|
v1 = bitrev v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; lhi %r5, -21846
|
|
; sllk %r3, %r2, 1
|
|
; srlk %r2, %r2, 1
|
|
; nr %r3, %r5
|
|
; xilf %r5, 4294967295
|
|
; nrk %r4, %r2, %r5
|
|
; ork %r5, %r3, %r4
|
|
; lhi %r3, -13108
|
|
; sllk %r2, %r5, 2
|
|
; srlk %r4, %r5, 2
|
|
; nrk %r5, %r2, %r3
|
|
; xilf %r3, 4294967295
|
|
; nrk %r2, %r4, %r3
|
|
; ork %r3, %r5, %r2
|
|
; lhi %r5, -3856
|
|
; sllk %r4, %r3, 4
|
|
; srlk %r2, %r3, 4
|
|
; nrk %r3, %r4, %r5
|
|
; xilf %r5, 4294967295
|
|
; nrk %r4, %r2, %r5
|
|
; ork %r2, %r3, %r4
|
|
; br %r14
|
|
|
|
function %clz_i128(i128) -> i128 {
|
|
block0(v0: i128):
|
|
v1 = clz v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; vl %v0, 0(%r3)
|
|
; vclzg %v5, %v0
|
|
; vgbm %v7, 0
|
|
; vpdi %v17, %v7, %v5, 0
|
|
; vpdi %v19, %v7, %v5, 1
|
|
; vag %v21, %v17, %v19
|
|
; vrepig %v23, 64
|
|
; vceqg %v25, %v17, %v23
|
|
; vsel %v27, %v21, %v17, %v25
|
|
; vst %v27, 0(%r2)
|
|
; br %r14
|
|
|
|
function %clz_i64(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = clz v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; flogr %r0, %r2
|
|
; lgr %r2, %r0
|
|
; br %r14
|
|
|
|
function %clz_i32(i32) -> i32 {
|
|
block0(v0: i32):
|
|
v1 = clz v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; llgfr %r5, %r2
|
|
; flogr %r0, %r5
|
|
; ahik %r2, %r0, -32
|
|
; br %r14
|
|
|
|
function %clz_i16(i16) -> i16 {
|
|
block0(v0: i16):
|
|
v1 = clz v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; llghr %r5, %r2
|
|
; flogr %r0, %r5
|
|
; ahik %r2, %r0, -48
|
|
; br %r14
|
|
|
|
function %clz_i8(i8) -> i8 {
|
|
block0(v0: i8):
|
|
v1 = clz v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; llgcr %r5, %r2
|
|
; flogr %r0, %r5
|
|
; ahik %r2, %r0, -56
|
|
; br %r14
|
|
|
|
function %cls_i128(i128) -> i128 {
|
|
block0(v0: i128):
|
|
v1 = cls v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; vl %v0, 0(%r3)
|
|
; vrepib %v5, 255
|
|
; vsrab %v7, %v0, %v5
|
|
; vsra %v17, %v7, %v5
|
|
; vx %v19, %v0, %v17
|
|
; vclzg %v21, %v19
|
|
; vgbm %v23, 0
|
|
; vpdi %v25, %v23, %v21, 0
|
|
; vpdi %v27, %v23, %v21, 1
|
|
; vag %v29, %v25, %v27
|
|
; vrepig %v31, 64
|
|
; vceqg %v1, %v25, %v31
|
|
; vsel %v3, %v29, %v25, %v1
|
|
; vaq %v5, %v3, %v5
|
|
; vst %v5, 0(%r2)
|
|
; br %r14
|
|
|
|
function %cls_i64(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = cls v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; srag %r5, %r2, 63
|
|
; xgrk %r3, %r2, %r5
|
|
; flogr %r0, %r3
|
|
; aghik %r2, %r0, -1
|
|
; br %r14
|
|
|
|
function %cls_i32(i32) -> i32 {
|
|
block0(v0: i32):
|
|
v1 = cls v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; lgfr %r5, %r2
|
|
; srag %r3, %r5, 63
|
|
; xgr %r5, %r3
|
|
; flogr %r0, %r5
|
|
; ahik %r2, %r0, -33
|
|
; br %r14
|
|
|
|
function %cls_i16(i16) -> i16 {
|
|
block0(v0: i16):
|
|
v1 = cls v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; lghr %r5, %r2
|
|
; srag %r3, %r5, 63
|
|
; xgr %r5, %r3
|
|
; flogr %r0, %r5
|
|
; ahik %r2, %r0, -49
|
|
; br %r14
|
|
|
|
function %cls_i8(i8) -> i8 {
|
|
block0(v0: i8):
|
|
v1 = cls v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; lgbr %r5, %r2
|
|
; srag %r3, %r5, 63
|
|
; xgr %r5, %r3
|
|
; flogr %r0, %r5
|
|
; ahik %r2, %r0, -57
|
|
; br %r14
|
|
|
|
function %ctz_i128(i128) -> i128 {
|
|
block0(v0: i128):
|
|
v1 = ctz v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; vl %v0, 0(%r3)
|
|
; vctzg %v5, %v0
|
|
; vgbm %v7, 0
|
|
; vpdi %v17, %v7, %v5, 0
|
|
; vpdi %v19, %v7, %v5, 1
|
|
; vag %v21, %v17, %v19
|
|
; vrepig %v23, 64
|
|
; vceqg %v25, %v19, %v23
|
|
; vsel %v27, %v21, %v19, %v25
|
|
; vst %v27, 0(%r2)
|
|
; br %r14
|
|
|
|
function %ctz_i64(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = ctz v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; lcgr %r5, %r2
|
|
; ngrk %r3, %r2, %r5
|
|
; flogr %r0, %r3
|
|
; locghie %r0, -1
|
|
; lghi %r3, 63
|
|
; sgrk %r2, %r3, %r0
|
|
; br %r14
|
|
|
|
function %ctz_i32(i32) -> i32 {
|
|
block0(v0: i32):
|
|
v1 = ctz v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; lgr %r5, %r2
|
|
; oihl %r5, 1
|
|
; lcgr %r3, %r5
|
|
; ngr %r5, %r3
|
|
; flogr %r0, %r5
|
|
; lhi %r4, 63
|
|
; srk %r2, %r4, %r0
|
|
; br %r14
|
|
|
|
function %ctz_i16(i16) -> i16 {
|
|
block0(v0: i16):
|
|
v1 = ctz v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; lgr %r5, %r2
|
|
; oilh %r5, 1
|
|
; lcgr %r3, %r5
|
|
; ngr %r5, %r3
|
|
; flogr %r0, %r5
|
|
; lhi %r4, 63
|
|
; srk %r2, %r4, %r0
|
|
; br %r14
|
|
|
|
function %ctz_i8(i8) -> i8 {
|
|
block0(v0: i8):
|
|
v1 = ctz v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; lgr %r5, %r2
|
|
; oill %r5, 256
|
|
; lcgr %r3, %r5
|
|
; ngr %r5, %r3
|
|
; flogr %r0, %r5
|
|
; lhi %r4, 63
|
|
; srk %r2, %r4, %r0
|
|
; br %r14
|
|
|
|
function %popcnt_i128(i128) -> i128 {
|
|
block0(v0: i128):
|
|
v1 = popcnt v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; vl %v0, 0(%r3)
|
|
; vpopctg %v5, %v0
|
|
; vgbm %v7, 0
|
|
; vpdi %v17, %v7, %v5, 0
|
|
; vpdi %v19, %v7, %v5, 1
|
|
; vag %v21, %v17, %v19
|
|
; vst %v21, 0(%r2)
|
|
; br %r14
|
|
|
|
function %popcnt_i64(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = popcnt v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; popcnt %r5, %r2
|
|
; sllg %r3, %r5, 32
|
|
; agr %r5, %r3
|
|
; sllg %r3, %r5, 16
|
|
; agr %r5, %r3
|
|
; sllg %r3, %r5, 8
|
|
; agr %r5, %r3
|
|
; srlg %r2, %r5, 56
|
|
; br %r14
|
|
|
|
function %popcnt_i32(i32) -> i32 {
|
|
block0(v0: i32):
|
|
v1 = popcnt v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; popcnt %r5, %r2
|
|
; sllk %r3, %r5, 16
|
|
; ar %r5, %r3
|
|
; sllk %r3, %r5, 8
|
|
; ar %r5, %r3
|
|
; srlk %r2, %r5, 24
|
|
; br %r14
|
|
|
|
function %popcnt_i16(i16) -> i16 {
|
|
block0(v0: i16):
|
|
v1 = popcnt v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; popcnt %r5, %r2
|
|
; srlk %r3, %r5, 8
|
|
; ark %r2, %r5, %r3
|
|
; nill %r2, 255
|
|
; br %r14
|
|
|
|
function %popcnt_i8(i8) -> i8 {
|
|
block0(v0: i8):
|
|
v1 = popcnt v0
|
|
return v1
|
|
}
|
|
|
|
; block0:
|
|
; popcnt %r2, %r2
|
|
; br %r14
|
|
|