[machinst x64]: implement load*_zero for x64
This commit is contained in:
@@ -91,3 +91,34 @@ block0(v0: f64):
|
||||
; check: uninit %xmm1
|
||||
; nextln: movsd %xmm0, %xmm1
|
||||
; nextln: movlhps %xmm0, %xmm1
|
||||
|
||||
|
||||
|
||||
;; load*_zero
|
||||
|
||||
; Verify that a `load` followed by a `scalar_to_vector` (the CLIF translation of `load32_zero`) is
|
||||
; lowered to a single MOVSS instruction.
|
||||
function %load32_zero_coalesced(i64) -> i32x4 {
|
||||
block0(v0: i64):
|
||||
v1 = load.i32 v0
|
||||
v2 = scalar_to_vector.i32x4 v1
|
||||
; check: movss 0(%rdi), %xmm0
|
||||
return v2
|
||||
}
|
||||
|
||||
;; Verify that `scalar_to_vector` (used by `load32_zero`), lowers as expected.
|
||||
function %load32_zero_int(i32) -> i32x4 {
|
||||
block0(v0: i32):
|
||||
v1 = scalar_to_vector.i32x4 v0
|
||||
; check: movd %edi, %xmm0
|
||||
return v1
|
||||
}
|
||||
function %load32_zero_float(f32) -> f32x4 {
|
||||
block0(v0: f32):
|
||||
v1 = scalar_to_vector.f32x4 v0
|
||||
; regex: MOV=movap*
|
||||
; check: pushq
|
||||
; not: $MOV
|
||||
; check: ret
|
||||
return v1
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user