Files
wasmtime/cranelift/filetests/filetests/isa/s390x/bitwise.clif
Alex Crichton a0a97f5e8f Add (bnot (bxor x y)) lowerings for s390x/aarch64 (#5763)
* Add (bnot (bxor x y)) lowerings for s390x/aarch64

I originally thought that s390x's original lowering in #5709, but as was
rightfully pointed out `(bnot (bxor x y))` is equivalent to
`(bxor x (bnot y))` so the special lowering for one should apply as a
special lowering for the other. For the s390x and aarch64 backend that
have already have a fused lowering of the bxor/bnot add a lowering
additionally for the bnot/bxor combination.

* Add bnot(bxor(..)) tests for s390x 128-bit sizes
2023-02-13 15:41:18 +00:00

672 lines
10 KiB
Plaintext

test compile precise-output
target s390x
; FIXME: add immediate operand versions
function %band_i128(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = band.i128 v0, v1
return v2
}
; block0:
; vl %v1, 0(%r3)
; vl %v3, 0(%r4)
; vn %v6, %v1, %v3
; vst %v6, 0(%r2)
; br %r14
function %band_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = band.i64 v0, v1
return v2
}
; block0:
; ngr %r2, %r3
; br %r14
function %band_i64_mem(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = load.i64 v1
v3 = band.i64 v0, v2
return v3
}
; block0:
; ng %r2, 0(%r3)
; br %r14
function %band_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = band.i32 v0, v1
return v2
}
; block0:
; nr %r2, %r3
; br %r14
function %band_i32_mem(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = load.i32 v1
v3 = band.i32 v0, v2
return v3
}
; block0:
; n %r2, 0(%r3)
; br %r14
function %band_i32_memoff(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = load.i32 v1+4096
v3 = band.i32 v0, v2
return v3
}
; block0:
; ny %r2, 4096(%r3)
; br %r14
function %band_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = band.i16 v0, v1
return v2
}
; block0:
; nr %r2, %r3
; br %r14
function %band_i16_mem(i16, i64) -> i16 {
block0(v0: i16, v1: i64):
v2 = load.i16 v1
v3 = band.i16 v0, v2
return v3
}
; block0:
; llh %r3, 0(%r3)
; nr %r2, %r3
; br %r14
function %band_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = band.i8 v0, v1
return v2
}
; block0:
; nr %r2, %r3
; br %r14
function %band_i8_mem(i8, i64) -> i8 {
block0(v0: i8, v1: i64):
v2 = load.i8 v1
v3 = band.i8 v0, v2
return v3
}
; block0:
; llc %r3, 0(%r3)
; nr %r2, %r3
; br %r14
function %bor_i128(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = bor.i128 v0, v1
return v2
}
; block0:
; vl %v1, 0(%r3)
; vl %v3, 0(%r4)
; vo %v6, %v1, %v3
; vst %v6, 0(%r2)
; br %r14
function %bor_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = bor.i64 v0, v1
return v2
}
; block0:
; ogr %r2, %r3
; br %r14
function %bor_i64_mem(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = load.i64 v1
v3 = bor.i64 v0, v2
return v3
}
; block0:
; og %r2, 0(%r3)
; br %r14
function %bor_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = bor.i32 v0, v1
return v2
}
; block0:
; or %r2, %r3
; br %r14
function %bor_i32_mem(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = load.i32 v1
v3 = bor.i32 v0, v2
return v3
}
; block0:
; o %r2, 0(%r3)
; br %r14
function %bor_i32_memoff(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = load.i32 v1+4096
v3 = bor.i32 v0, v2
return v3
}
; block0:
; oy %r2, 4096(%r3)
; br %r14
function %bor_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = bor.i16 v0, v1
return v2
}
; block0:
; or %r2, %r3
; br %r14
function %bor_i16_mem(i16, i64) -> i16 {
block0(v0: i16, v1: i64):
v2 = load.i16 v1
v3 = bor.i16 v0, v2
return v3
}
; block0:
; llh %r3, 0(%r3)
; or %r2, %r3
; br %r14
function %bor_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = bor.i8 v0, v1
return v2
}
; block0:
; or %r2, %r3
; br %r14
function %bor_i8_mem(i8, i64) -> i8 {
block0(v0: i8, v1: i64):
v2 = load.i8 v1
v3 = bor.i8 v0, v2
return v3
}
; block0:
; llc %r3, 0(%r3)
; or %r2, %r3
; br %r14
function %bxor_i128(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = bxor.i128 v0, v1
return v2
}
; block0:
; vl %v1, 0(%r3)
; vl %v3, 0(%r4)
; vx %v6, %v1, %v3
; vst %v6, 0(%r2)
; br %r14
function %bxor_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = bxor.i64 v0, v1
return v2
}
; block0:
; xgr %r2, %r3
; br %r14
function %bxor_i64_mem(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = load.i64 v1
v3 = bxor.i64 v0, v2
return v3
}
; block0:
; xg %r2, 0(%r3)
; br %r14
function %bxor_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = bxor.i32 v0, v1
return v2
}
; block0:
; xr %r2, %r3
; br %r14
function %bxor_i32_mem(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = load.i32 v1
v3 = bxor.i32 v0, v2
return v3
}
; block0:
; x %r2, 0(%r3)
; br %r14
function %bxor_i32_memoff(i32, i64) -> i32 {
block0(v0: i32, v1: i64):
v2 = load.i32 v1+4096
v3 = bxor.i32 v0, v2
return v3
}
; block0:
; xy %r2, 4096(%r3)
; br %r14
function %bxor_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = bxor.i16 v0, v1
return v2
}
; block0:
; xr %r2, %r3
; br %r14
function %bxor_i16_mem(i16, i64) -> i16 {
block0(v0: i16, v1: i64):
v2 = load.i16 v1
v3 = bxor.i16 v0, v2
return v3
}
; block0:
; llh %r3, 0(%r3)
; xr %r2, %r3
; br %r14
function %bxor_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = bxor.i8 v0, v1
return v2
}
; block0:
; xr %r2, %r3
; br %r14
function %bxor_i8_mem(i8, i64) -> i8 {
block0(v0: i8, v1: i64):
v2 = load.i8 v1
v3 = bxor.i8 v0, v2
return v3
}
; block0:
; llc %r3, 0(%r3)
; xr %r2, %r3
; br %r14
function %band_not_i128(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = band_not.i128 v0, v1
return v2
}
; block0:
; vl %v1, 0(%r3)
; vl %v3, 0(%r4)
; vnc %v6, %v1, %v3
; vst %v6, 0(%r2)
; br %r14
function %band_not_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = band_not.i64 v0, v1
return v2
}
; block0:
; xilf %r3, 4294967295
; xihf %r3, 4294967295
; ngr %r2, %r3
; br %r14
function %band_not_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = band_not.i32 v0, v1
return v2
}
; block0:
; xilf %r3, 4294967295
; nr %r2, %r3
; br %r14
function %band_not_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = band_not.i16 v0, v1
return v2
}
; block0:
; xilf %r3, 4294967295
; nr %r2, %r3
; br %r14
function %band_not_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = band_not.i8 v0, v1
return v2
}
; block0:
; xilf %r3, 4294967295
; nr %r2, %r3
; br %r14
function %bor_not_i128(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = bor_not.i128 v0, v1
return v2
}
; block0:
; vl %v1, 0(%r3)
; vl %v3, 0(%r4)
; voc %v6, %v1, %v3
; vst %v6, 0(%r2)
; br %r14
function %bor_not_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = bor_not.i64 v0, v1
return v2
}
; block0:
; xilf %r3, 4294967295
; xihf %r3, 4294967295
; ogr %r2, %r3
; br %r14
function %bor_not_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = bor_not.i32 v0, v1
return v2
}
; block0:
; xilf %r3, 4294967295
; or %r2, %r3
; br %r14
function %bor_not_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = bor_not.i16 v0, v1
return v2
}
; block0:
; xilf %r3, 4294967295
; or %r2, %r3
; br %r14
function %bor_not_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = bor_not.i8 v0, v1
return v2
}
; block0:
; xilf %r3, 4294967295
; or %r2, %r3
; br %r14
function %bxor_not_i128(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = bxor_not.i128 v0, v1
return v2
}
; block0:
; vl %v1, 0(%r3)
; vl %v3, 0(%r4)
; vnx %v6, %v1, %v3
; vst %v6, 0(%r2)
; br %r14
function %bxor_not_i64(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = bxor_not.i64 v0, v1
return v2
}
; block0:
; xilf %r3, 4294967295
; xihf %r3, 4294967295
; xgr %r2, %r3
; br %r14
function %bxor_not_i32(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = bxor_not.i32 v0, v1
return v2
}
; block0:
; xilf %r3, 4294967295
; xr %r2, %r3
; br %r14
function %bxor_not_i16(i16, i16) -> i16 {
block0(v0: i16, v1: i16):
v2 = bxor_not.i16 v0, v1
return v2
}
; block0:
; xilf %r3, 4294967295
; xr %r2, %r3
; br %r14
function %bxor_not_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = bxor_not.i8 v0, v1
return v2
}
; block0:
; xilf %r3, 4294967295
; xr %r2, %r3
; br %r14
function %bnot_i128(i128) -> i128 {
block0(v0: i128):
v1 = bnot.i128 v0
return v1
}
; block0:
; vl %v1, 0(%r3)
; vno %v4, %v1, %v1
; vst %v4, 0(%r2)
; br %r14
function %bnot_i64(i64) -> i64 {
block0(v0: i64):
v1 = bnot.i64 v0
return v1
}
; block0:
; xilf %r2, 4294967295
; xihf %r2, 4294967295
; br %r14
function %bnot_i32(i32) -> i32 {
block0(v0: i32):
v1 = bnot.i32 v0
return v1
}
; block0:
; xilf %r2, 4294967295
; br %r14
function %bnot_i16(i16) -> i16 {
block0(v0: i16):
v1 = bnot.i16 v0
return v1
}
; block0:
; xilf %r2, 4294967295
; br %r14
function %bnot_i8(i8) -> i8 {
block0(v0: i8):
v1 = bnot.i8 v0
return v1
}
; block0:
; xilf %r2, 4294967295
; br %r14
function %bitselect_i128(i128, i128, i128) -> i128 {
block0(v0: i128, v1: i128, v2: i128):
v3 = bitselect.i128 v0, v1, v2
return v3
}
; block0:
; vl %v1, 0(%r3)
; vl %v3, 0(%r4)
; vl %v5, 0(%r5)
; vsel %v16, %v3, %v5, %v1
; vst %v16, 0(%r2)
; br %r14
function %bitselect_i64(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
v3 = bitselect.i64 v0, v1, v2
return v3
}
; block0:
; ngr %r3, %r2
; lgr %r5, %r2
; xilf %r5, 4294967295
; xihf %r5, 4294967295
; ngr %r4, %r5
; ogrk %r2, %r4, %r3
; br %r14
function %bitselect_i32(i32, i32, i32) -> i32 {
block0(v0: i32, v1: i32, v2: i32):
v3 = bitselect.i32 v0, v1, v2
return v3
}
; block0:
; nr %r3, %r2
; lgr %r5, %r2
; xilf %r5, 4294967295
; nrk %r2, %r4, %r5
; or %r2, %r3
; br %r14
function %bitselect_i16(i16, i16, i16) -> i16 {
block0(v0: i16, v1: i16, v2: i16):
v3 = bitselect.i16 v0, v1, v2
return v3
}
; block0:
; nr %r3, %r2
; lgr %r5, %r2
; xilf %r5, 4294967295
; nrk %r2, %r4, %r5
; or %r2, %r3
; br %r14
function %bitselect_i8(i8, i8, i8) -> i8 {
block0(v0: i8, v1: i8, v2: i8):
v3 = bitselect.i8 v0, v1, v2
return v3
}
; block0:
; nr %r3, %r2
; lgr %r5, %r2
; xilf %r5, 4294967295
; nrk %r2, %r4, %r5
; or %r2, %r3
; br %r14
function %bnot_of_bxor(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = bxor v0, v1
v3 = bnot v2
return v3
}
; block0:
; xr %r2, %r3
; xilf %r2, 4294967295
; br %r14
function %bnot_of_bxor(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = bxor v0, v1
v3 = bnot v2
return v3
}
; block0:
; vl %v1, 0(%r3)
; vl %v3, 0(%r4)
; vnx %v6, %v1, %v3
; vst %v6, 0(%r2)
; br %r14
function %bnot_of_bxor(i32x4, i32x4) -> i32x4 {
block0(v0: i32x4, v1: i32x4):
v2 = bxor v0, v1
v3 = bnot v2
return v3
}
; block0:
; vnx %v24, %v24, %v25
; br %r14