The tests for the SIMD floating-point maximum and minimum operations require particular care because the handling of the NaN values is non-deterministic and may vary between platforms. There is no way to match several NaN values in a test, so the solution is to extract the non-deterministic test cases into a separate file that is subsequently replicated for every backend under test, with adjustments made to the expected results. Copyright (c) 2021, Arm Limited.
61 lines
1.4 KiB
Plaintext
61 lines
1.4 KiB
Plaintext
test simple_preopt
|
|
target aarch64
|
|
target x86_64 baseline
|
|
|
|
; Cases where the denominator is created by an iconst
|
|
|
|
function %indir_udiv32(i32) -> i32 {
|
|
block0(v0: i32):
|
|
v1 = iconst.i32 7
|
|
v2 = udiv v0, v1
|
|
; check: iconst.i32 7
|
|
; check: iconst.i32 0x2492_4925
|
|
; check: umulhi v0, v3
|
|
; check: isub v0, v4
|
|
; check: ushr_imm v5, 1
|
|
; check: iadd v6, v4
|
|
; check: v8 = ushr_imm v7, 2
|
|
; check: v2 -> v8
|
|
return v2
|
|
}
|
|
|
|
function %indir_sdiv32(i32) -> i32 {
|
|
block0(v0: i32):
|
|
v1 = iconst.i32 -17
|
|
v2 = sdiv v0, v1
|
|
; check: iconst.i32 -17
|
|
; check: iconst.i32 0xffff_ffff_8787_8787
|
|
; check: smulhi v0, v3
|
|
; check: sshr_imm v4, 3
|
|
; check: ushr_imm v5, 31
|
|
; check: v7 = iadd v5, v6
|
|
; check: v2 -> v7
|
|
return v2
|
|
}
|
|
|
|
function %indir_udiv64(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = iconst.i64 1337
|
|
v2 = udiv v0, v1
|
|
; check: iconst.i64 1337
|
|
; check: iconst.i64 0xc411_9d95_2866_a139
|
|
; check: umulhi v0, v3
|
|
; check: v5 = ushr_imm v4, 10
|
|
; check: v2 -> v5
|
|
return v2
|
|
}
|
|
|
|
function %indir_sdiv64(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = iconst.i64 -90210
|
|
v2 = sdiv v0, v1
|
|
; check: iconst.i64 0xffff_ffff_fffe_9f9e
|
|
; check: iconst.i64 0xd181_4ee8_939c_b8bb
|
|
; check: smulhi v0, v3
|
|
; check: sshr_imm v4, 14
|
|
; check: ushr_imm v5, 63
|
|
; check: v7 = iadd v5, v6
|
|
; check: v2 -> v7
|
|
return v2
|
|
}
|