Insert conversion code that reconstructs the original function argument types from the legalized ABI signature. Add abi::legalize_abi_value(). This function is used when adapting code to a legalized function signature.
66 lines
1.7 KiB
Plaintext
66 lines
1.7 KiB
Plaintext
; Test the legalization of i64 arithmetic instructions.
|
|
test legalizer
|
|
isa riscv supports_m=1
|
|
|
|
; regex: V=v\d+
|
|
; regex: VX=vx\d+
|
|
|
|
function bitwise_and(i64, i64) -> i64 {
|
|
ebb0(v1: i64, v2: i64):
|
|
v3 = band v1, v2
|
|
return v3
|
|
}
|
|
; check: $(v1l=$V), $(v1h=$VX) = isplit_lohi
|
|
; check: $(v2l=$V), $(v2h=$VX) = isplit_lohi
|
|
; check: [R#ec
|
|
; sameln: $(v3l=$V) = band $v1l, $v2l
|
|
; check: [R#ec
|
|
; sameln: $(v3h=$V) = band $v1h, $v2h
|
|
; check: $v3 = iconcat_lohi $v3l, $v3h
|
|
|
|
function bitwise_or(i64, i64) -> i64 {
|
|
ebb0(v1: i64, v2: i64):
|
|
v3 = bor v1, v2
|
|
return v3
|
|
}
|
|
; check: $(v1l=$V), $(v1h=$VX) = isplit_lohi
|
|
; check: $(v2l=$V), $(v2h=$VX) = isplit_lohi
|
|
; check: [R#cc
|
|
; sameln: $(v3l=$V) = bor $v1l, $v2l
|
|
; check: [R#cc
|
|
; sameln: $(v3h=$V) = bor $v1h, $v2h
|
|
; check: $v3 = iconcat_lohi $v3l, $v3h
|
|
|
|
function bitwise_xor(i64, i64) -> i64 {
|
|
ebb0(v1: i64, v2: i64):
|
|
v3 = bxor v1, v2
|
|
return v3
|
|
}
|
|
; check: $(v1l=$V), $(v1h=$VX) = isplit_lohi
|
|
; check: $(v2l=$V), $(v2h=$VX) = isplit_lohi
|
|
; check: [R#8c
|
|
; sameln: $(v3l=$V) = bxor $v1l, $v2l
|
|
; check: [R#8c
|
|
; sameln: $(v3h=$V) = bxor $v1h, $v2h
|
|
; check: $v3 = iconcat_lohi $v3l, $v3h
|
|
|
|
function arith_add(i64, i64) -> i64 {
|
|
; Legalizing iadd.i64 requires two steps:
|
|
; 1. Narrow to iadd_cout.i32, then
|
|
; 2. Expand iadd_cout.i32 since RISC-V has no carry flag.
|
|
ebb0(v1: i64, v2: i64):
|
|
v3 = iadd v1, v2
|
|
return v3
|
|
}
|
|
; check: $(v1l=$V), $(v1h=$VX) = isplit_lohi
|
|
; check: $(v2l=$V), $(v2h=$VX) = isplit_lohi
|
|
; check: [R#0c
|
|
; sameln: $(v3l=$V) = iadd $v1l, $v2l
|
|
; check: $(c=$V) = icmp ult, $v3l, $v1l
|
|
; check: [R#0c
|
|
; sameln: $(v3h1=$V) = iadd $v1h, $v2h
|
|
; TODO: This doesn't typecheck. We need to convert the b1 result to i32.
|
|
; check: [R#0c
|
|
; sameln: $(v3h=$V) = iadd $v3h1, $c
|
|
; check: $v3 = iconcat_lohi $v3l, $v3h
|