When the legalizer splits a value into halves, it would previously stop if the value was an EBB argument. With this change, we also split EBB arguments and iteratively split arguments on branches to the EBB. The iterative splitting stops when we hit the entry block arguments or an instruction that isn't one of the concatenation instructions.
41 lines
1.0 KiB
Plaintext
41 lines
1.0 KiB
Plaintext
; Test the legalization of EBB arguments that are split.
|
|
test legalizer
|
|
isa riscv
|
|
|
|
; regex: V=vx?\d+
|
|
|
|
function simple(i64, i64) -> i64 {
|
|
ebb0(v1: i64, v2: i64):
|
|
; check: $ebb0($(v1l=$V): i32, $(v1h=$V): i32, $(v2l=$V): i32, $(v2h=$V): i32):
|
|
jump ebb1(v1)
|
|
; check: jump $ebb1($v1l, $v1h)
|
|
|
|
ebb1(v3: i64):
|
|
; check: $ebb1($(v3l=$V): i32, $(v3h=$V): i32):
|
|
v4 = band v3, v2
|
|
; check: $(v4l=$V) = band $v3l, $v2l
|
|
; check: $(v4h=$V) = band $v3h, $v2h
|
|
return v4
|
|
; check: return $v4l, $v4h
|
|
}
|
|
|
|
function multi(i64) -> i64 {
|
|
ebb1(v1: i64):
|
|
; check: $ebb1($(v1l=$V): i32, $(v1h=$V): i32):
|
|
jump ebb2(v1, v1)
|
|
; check: jump $ebb2($v1l, $v1l, $v1h, $v1h)
|
|
|
|
ebb2(v2: i64, v3: i64):
|
|
; check: $ebb2($(v2l=$V): i32, $(v3l=$V): i32, $(v2h=$V): i32, $(v3h=$V): i32):
|
|
jump ebb3(v2)
|
|
; check: jump $ebb3($v2l, $v2h)
|
|
|
|
ebb3(v4: i64):
|
|
; check: $ebb3($(v4l=$V): i32, $(v4h=$V): i32):
|
|
v5 = band v4, v3
|
|
; check: $(v5l=$V) = band $v4l, $v3l
|
|
; check: $(v5h=$V) = band $v4h, $v3h
|
|
return v5
|
|
; check: return $v5l, $v5h
|
|
}
|