blob: 90ed710b0fd12682d9f331c31e65af98fb719828 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
; RUN: llc -mtriple=s390x-linux-gnu < %s | FileCheck -check-prefixes=CHECK,BASE %s
; RUN: llc -mtriple=s390x-linux-gnu -mcpu=z13 < %s | FileCheck -check-prefixes=CHECK,Z13 %s
define <2 x i64> @bitcast_fp128_to_v2i64(fp128 %arg) {
; BASE-LABEL: bitcast_fp128_to_v2i64:
; BASE: # %bb.0:
; BASE-NEXT: ld %f0, 0(%r2)
; BASE-NEXT: ld %f2, 8(%r2)
; BASE-NEXT: axbr %f0, %f0
; BASE-NEXT: lgdr %r3, %f2
; BASE-NEXT: lgdr %r2, %f0
; BASE-NEXT: br %r14
;
; Z13-LABEL: bitcast_fp128_to_v2i64:
; Z13: # %bb.0:
; Z13-NEXT: ld %f0, 0(%r2)
; Z13-NEXT: ld %f2, 8(%r2)
; Z13-NEXT: axbr %f0, %f0
; Z13-NEXT: vmrhg %v24, %v0, %v2
; Z13-NEXT: br %r14
%val = fadd fp128 %arg, %arg
%cast = bitcast fp128 %val to <2 x i64>
ret <2 x i64> %cast
}
define <4 x i32> @bitcast_fp128_to_v4i32(fp128 %arg) {
; BASE-LABEL: bitcast_fp128_to_v4i32:
; BASE: # %bb.0:
; BASE-NEXT: ld %f0, 0(%r2)
; BASE-NEXT: ld %f2, 8(%r2)
; BASE-NEXT: axbr %f0, %f0
; BASE-NEXT: lgdr %r3, %f0
; BASE-NEXT: lgdr %r5, %f2
; BASE-NEXT: srlg %r2, %r3, 32
; BASE-NEXT: srlg %r4, %r5, 32
; BASE-NEXT: # kill: def $r2l killed $r2l killed $r2d
; BASE-NEXT: # kill: def $r3l killed $r3l killed $r3d
; BASE-NEXT: # kill: def $r4l killed $r4l killed $r4d
; BASE-NEXT: # kill: def $r5l killed $r5l killed $r5d
; BASE-NEXT: br %r14
;
; Z13-LABEL: bitcast_fp128_to_v4i32:
; Z13: # %bb.0:
; Z13-NEXT: ld %f0, 0(%r2)
; Z13-NEXT: ld %f2, 8(%r2)
; Z13-NEXT: axbr %f0, %f0
; Z13-NEXT: vmrhg %v24, %v0, %v2
; Z13-NEXT: br %r14
%val = fadd fp128 %arg, %arg
%cast = bitcast fp128 %val to <4 x i32>
ret <4 x i32> %cast
}
define fp128 @bitcast_v2i64_to_fp128(ptr %ptr) {
; BASE-LABEL: bitcast_v2i64_to_fp128:
; BASE: # %bb.0:
; BASE-NEXT: lg %r1, 0(%r3)
; BASE-NEXT: lg %r3, 8(%r3)
; BASE-NEXT: la %r0, 0(%r1,%r1)
; BASE-NEXT: la %r1, 0(%r3,%r3)
; BASE-NEXT: stg %r1, 8(%r2)
; BASE-NEXT: stg %r0, 0(%r2)
; BASE-NEXT: br %r14
;
; Z13-LABEL: bitcast_v2i64_to_fp128:
; Z13: # %bb.0:
; Z13-NEXT: vl %v0, 0(%r3), 3
; Z13-NEXT: vag %v0, %v0, %v0
; Z13-NEXT: vst %v0, 0(%r2), 3
; Z13-NEXT: br %r14
%load = load <2 x i64>, ptr %ptr
%vec = add <2 x i64> %load, %load
%cast = bitcast <2 x i64> %vec to fp128
ret fp128 %cast
}
define fp128 @bitcast_v4i32_to_fp128(ptr %ptr) {
; BASE-LABEL: bitcast_v4i32_to_fp128:
; BASE: # %bb.0:
; BASE-NEXT: l %r0, 0(%r3)
; BASE-NEXT: l %r1, 4(%r3)
; BASE-NEXT: l %r4, 8(%r3)
; BASE-NEXT: l %r3, 12(%r3)
; BASE-NEXT: ar %r0, %r0
; BASE-NEXT: ar %r1, %r1
; BASE-NEXT: ar %r4, %r4
; BASE-NEXT: ar %r3, %r3
; BASE-NEXT: st %r3, 12(%r2)
; BASE-NEXT: st %r4, 8(%r2)
; BASE-NEXT: st %r1, 4(%r2)
; BASE-NEXT: st %r0, 0(%r2)
; BASE-NEXT: br %r14
;
; Z13-LABEL: bitcast_v4i32_to_fp128:
; Z13: # %bb.0:
; Z13-NEXT: vl %v0, 0(%r3), 3
; Z13-NEXT: vaf %v0, %v0, %v0
; Z13-NEXT: vst %v0, 0(%r2), 3
; Z13-NEXT: br %r14
%load = load <4 x i32>, ptr %ptr
%vec = add <4 x i32> %load, %load
%cast = bitcast <4 x i32> %vec to fp128
ret fp128 %cast
}
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
; CHECK: {{.*}}