Now that the parser doesn't renumber indices, there's no need for entity variables like $v0.
98 lines
1.9 KiB
Plaintext
98 lines
1.9 KiB
Plaintext
; Test the custom legalizations.
|
|
test legalizer
|
|
isa intel
|
|
set is_64bit
|
|
isa intel
|
|
|
|
; regex: V=v\d+
|
|
; regex: EBB=ebb\d+
|
|
|
|
function %cond_trap(i32) {
|
|
ebb0(v1: i32):
|
|
trapz v1, user67
|
|
return
|
|
; check: ebb0(v1: i32
|
|
; nextln: $(f=$V) = ifcmp_imm v1, 0
|
|
; nextln: trapif eq $f, user67
|
|
; nextln: return
|
|
}
|
|
|
|
function %cond_trap2(i32) {
|
|
ebb0(v1: i32):
|
|
trapnz v1, int_ovf
|
|
return
|
|
; check: ebb0(v1: i32
|
|
; nextln: $(f=$V) = ifcmp_imm v1, 0
|
|
; nextln: trapif ne $f, int_ovf
|
|
; nextln: return
|
|
}
|
|
|
|
function %cond_trap_b1(i32) {
|
|
ebb0(v1: i32):
|
|
v2 = icmp_imm eq v1, 6
|
|
trapz v2, user7
|
|
return
|
|
; check: ebb0(v1: i32
|
|
; check: brnz v2, $(new=$EBB)
|
|
; nextln: trap user7
|
|
; check: $new:
|
|
; nextln: return
|
|
}
|
|
|
|
function %cond_trap2_b1(i32) {
|
|
ebb0(v1: i32):
|
|
v2 = icmp_imm eq v1, 6
|
|
trapnz v2, user9
|
|
return
|
|
; check: ebb0(v1: i32
|
|
; check: brz v2, $(new=$EBB)
|
|
; nextln: trap user9
|
|
; check: $new:
|
|
; nextln: return
|
|
}
|
|
|
|
function %f32const() -> f32 {
|
|
ebb0:
|
|
v1 = f32const 0x1.0p1
|
|
; check: $(tmp=$V) = iconst.i32
|
|
; check: v1 = bitcast.f32 $tmp
|
|
return v1
|
|
}
|
|
|
|
function %f64const() -> f64 {
|
|
ebb0:
|
|
v1 = f64const 0x1.0p1
|
|
; check: $(tmp=$V) = iconst.i64
|
|
; check: v1 = bitcast.f64 $tmp
|
|
return v1
|
|
}
|
|
|
|
function %select_f64(f64, f64, i32) -> f64 {
|
|
ebb0(v0: f64, v1: f64, v2: i32):
|
|
v3 = select v2, v0, v1
|
|
; check: brnz v2, $(new=$EBB)(v0)
|
|
; nextln: jump $new(v1)
|
|
; check: $new(v3: f64):
|
|
; nextln: return v3
|
|
return v3
|
|
}
|
|
|
|
function %f32_min(f32, f32) -> f32 {
|
|
ebb0(v0: f32, v1: f32):
|
|
v2 = fmin v0, v1
|
|
return v2
|
|
; check: $(vnat=$V) = x86_fmin v0, v1
|
|
; nextln: jump $(done=$EBB)($vnat)
|
|
|
|
; check: $(uno=$EBB):
|
|
; nextln: $(vuno=$V) = fadd.f32 v0, v1
|
|
; nextln: jump $(done=$EBB)($vuno)
|
|
|
|
; check: $(ueq=$EBB):
|
|
; check: $(veq=$V) = bor.f32 v0, v1
|
|
; nextln: jump $(done=$EBB)($veq)
|
|
|
|
; check: $done(v2: f32):
|
|
; nextln: return v2
|
|
}
|