CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
465 lines
13 KiB
LLVM
465 lines
13 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
|
|
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
|
|
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z16 | FileCheck %s --check-prefix=VECTOR
|
|
;
|
|
; Test passing IR vector arguments.
|
|
|
|
@Fnptr = external global ptr
|
|
@Src = external global ptr
|
|
@Dst = external global ptr
|
|
|
|
%Ty0 = type <1 x i128>
|
|
define void @arg0(%Ty0 %A) {
|
|
; CHECK-LABEL: arg0:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: lg %r0, 8(%r2)
|
|
; CHECK-NEXT: lgrl %r1, Dst@GOT
|
|
; CHECK-NEXT: lg %r2, 0(%r2)
|
|
; CHECK-NEXT: stg %r0, 8(%r1)
|
|
; CHECK-NEXT: stg %r2, 0(%r1)
|
|
; CHECK-NEXT: br %r14
|
|
;
|
|
; VECTOR-LABEL: arg0:
|
|
; VECTOR: # %bb.0:
|
|
; VECTOR-NEXT: lgrl %r1, Dst@GOT
|
|
; VECTOR-NEXT: vst %v24, 0(%r1), 3
|
|
; VECTOR-NEXT: br %r14
|
|
store %Ty0 %A, ptr @Dst
|
|
ret void
|
|
}
|
|
|
|
define void @call0() {
|
|
; CHECK-LABEL: call0:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; CHECK-NEXT: .cfi_offset %r14, -48
|
|
; CHECK-NEXT: .cfi_offset %r15, -40
|
|
; CHECK-NEXT: aghi %r15, -176
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 336
|
|
; CHECK-NEXT: lgrl %r1, Src@GOT
|
|
; CHECK-NEXT: lg %r0, 8(%r1)
|
|
; CHECK-NEXT: lg %r1, 0(%r1)
|
|
; CHECK-NEXT: stg %r0, 168(%r15)
|
|
; CHECK-NEXT: la %r2, 160(%r15)
|
|
; CHECK-NEXT: stg %r1, 160(%r15)
|
|
; CHECK-NEXT: brasl %r14, Fnptr@PLT
|
|
; CHECK-NEXT: lmg %r14, %r15, 288(%r15)
|
|
; CHECK-NEXT: br %r14
|
|
;
|
|
; VECTOR-LABEL: call0:
|
|
; VECTOR: # %bb.0:
|
|
; VECTOR-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; VECTOR-NEXT: .cfi_offset %r14, -48
|
|
; VECTOR-NEXT: .cfi_offset %r15, -40
|
|
; VECTOR-NEXT: aghi %r15, -160
|
|
; VECTOR-NEXT: .cfi_def_cfa_offset 320
|
|
; VECTOR-NEXT: lgrl %r1, Src@GOT
|
|
; VECTOR-NEXT: vl %v24, 0(%r1), 3
|
|
; VECTOR-NEXT: brasl %r14, Fnptr@PLT
|
|
; VECTOR-NEXT: lmg %r14, %r15, 272(%r15)
|
|
; VECTOR-NEXT: br %r14
|
|
%L = load %Ty0, ptr @Src
|
|
call void @Fnptr(%Ty0 %L)
|
|
ret void
|
|
}
|
|
|
|
define void @ret0() {
|
|
; CHECK-LABEL: ret0:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; CHECK-NEXT: .cfi_offset %r14, -48
|
|
; CHECK-NEXT: .cfi_offset %r15, -40
|
|
; CHECK-NEXT: aghi %r15, -160
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 320
|
|
; CHECK-NEXT: brasl %r14, Fnptr@PLT
|
|
; CHECK-NEXT: lgrl %r1, Dst@GOT
|
|
; CHECK-NEXT: stg %r3, 8(%r1)
|
|
; CHECK-NEXT: stg %r2, 0(%r1)
|
|
; CHECK-NEXT: lmg %r14, %r15, 272(%r15)
|
|
; CHECK-NEXT: br %r14
|
|
;
|
|
; VECTOR-LABEL: ret0:
|
|
; VECTOR: # %bb.0:
|
|
; VECTOR-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; VECTOR-NEXT: .cfi_offset %r14, -48
|
|
; VECTOR-NEXT: .cfi_offset %r15, -40
|
|
; VECTOR-NEXT: aghi %r15, -160
|
|
; VECTOR-NEXT: .cfi_def_cfa_offset 320
|
|
; VECTOR-NEXT: brasl %r14, Fnptr@PLT
|
|
; VECTOR-NEXT: lgrl %r1, Dst@GOT
|
|
; VECTOR-NEXT: vst %v24, 0(%r1), 3
|
|
; VECTOR-NEXT: lmg %r14, %r15, 272(%r15)
|
|
; VECTOR-NEXT: br %r14
|
|
%C = call %Ty0 @Fnptr()
|
|
store %Ty0 %C, ptr @Dst
|
|
ret void
|
|
}
|
|
|
|
%Ty1 = type <1 x fp128>
|
|
define void @arg1(%Ty1 %A) {
|
|
; CHECK-LABEL: arg1:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: ld %f0, 0(%r2)
|
|
; CHECK-NEXT: ld %f2, 8(%r2)
|
|
; CHECK-NEXT: lgrl %r1, Dst@GOT
|
|
; CHECK-NEXT: std %f0, 0(%r1)
|
|
; CHECK-NEXT: std %f2, 8(%r1)
|
|
; CHECK-NEXT: br %r14
|
|
;
|
|
; VECTOR-LABEL: arg1:
|
|
; VECTOR: # %bb.0:
|
|
; VECTOR-NEXT: lgrl %r1, Dst@GOT
|
|
; VECTOR-NEXT: vst %v24, 0(%r1), 3
|
|
; VECTOR-NEXT: br %r14
|
|
store %Ty1 %A, ptr @Dst
|
|
ret void
|
|
}
|
|
|
|
define void @call1() {
|
|
; CHECK-LABEL: call1:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; CHECK-NEXT: .cfi_offset %r14, -48
|
|
; CHECK-NEXT: .cfi_offset %r15, -40
|
|
; CHECK-NEXT: aghi %r15, -176
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 336
|
|
; CHECK-NEXT: lgrl %r1, Src@GOT
|
|
; CHECK-NEXT: ld %f0, 0(%r1)
|
|
; CHECK-NEXT: ld %f2, 8(%r1)
|
|
; CHECK-NEXT: la %r2, 160(%r15)
|
|
; CHECK-NEXT: std %f0, 160(%r15)
|
|
; CHECK-NEXT: std %f2, 168(%r15)
|
|
; CHECK-NEXT: brasl %r14, Fnptr@PLT
|
|
; CHECK-NEXT: lmg %r14, %r15, 288(%r15)
|
|
; CHECK-NEXT: br %r14
|
|
;
|
|
; VECTOR-LABEL: call1:
|
|
; VECTOR: # %bb.0:
|
|
; VECTOR-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; VECTOR-NEXT: .cfi_offset %r14, -48
|
|
; VECTOR-NEXT: .cfi_offset %r15, -40
|
|
; VECTOR-NEXT: aghi %r15, -160
|
|
; VECTOR-NEXT: .cfi_def_cfa_offset 320
|
|
; VECTOR-NEXT: lgrl %r1, Src@GOT
|
|
; VECTOR-NEXT: vl %v24, 0(%r1), 3
|
|
; VECTOR-NEXT: brasl %r14, Fnptr@PLT
|
|
; VECTOR-NEXT: lmg %r14, %r15, 272(%r15)
|
|
; VECTOR-NEXT: br %r14
|
|
%L = load %Ty1, ptr @Src
|
|
call void @Fnptr(%Ty1 %L)
|
|
ret void
|
|
}
|
|
|
|
define void @ret1() {
|
|
; CHECK-LABEL: ret1:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; CHECK-NEXT: .cfi_offset %r14, -48
|
|
; CHECK-NEXT: .cfi_offset %r15, -40
|
|
; CHECK-NEXT: aghi %r15, -176
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 336
|
|
; CHECK-NEXT: la %r2, 160(%r15)
|
|
; CHECK-NEXT: brasl %r14, Fnptr@PLT
|
|
; CHECK-NEXT: ld %f0, 160(%r15)
|
|
; CHECK-NEXT: ld %f2, 168(%r15)
|
|
; CHECK-NEXT: lgrl %r1, Dst@GOT
|
|
; CHECK-NEXT: std %f0, 0(%r1)
|
|
; CHECK-NEXT: std %f2, 8(%r1)
|
|
; CHECK-NEXT: lmg %r14, %r15, 288(%r15)
|
|
; CHECK-NEXT: br %r14
|
|
;
|
|
; VECTOR-LABEL: ret1:
|
|
; VECTOR: # %bb.0:
|
|
; VECTOR-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; VECTOR-NEXT: .cfi_offset %r14, -48
|
|
; VECTOR-NEXT: .cfi_offset %r15, -40
|
|
; VECTOR-NEXT: aghi %r15, -160
|
|
; VECTOR-NEXT: .cfi_def_cfa_offset 320
|
|
; VECTOR-NEXT: brasl %r14, Fnptr@PLT
|
|
; VECTOR-NEXT: lgrl %r1, Dst@GOT
|
|
; VECTOR-NEXT: vst %v24, 0(%r1), 3
|
|
; VECTOR-NEXT: lmg %r14, %r15, 272(%r15)
|
|
; VECTOR-NEXT: br %r14
|
|
%C = call %Ty1 @Fnptr()
|
|
store %Ty1 %C, ptr @Dst
|
|
ret void
|
|
}
|
|
|
|
%Ty2 = type <2 x i64>
|
|
define void @arg2(%Ty2 %A) {
|
|
; CHECK-LABEL: arg2:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: lg %r0, 8(%r2)
|
|
; CHECK-NEXT: lgrl %r1, Dst@GOT
|
|
; CHECK-NEXT: lg %r2, 0(%r2)
|
|
; CHECK-NEXT: stg %r0, 8(%r1)
|
|
; CHECK-NEXT: stg %r2, 0(%r1)
|
|
; CHECK-NEXT: br %r14
|
|
;
|
|
; VECTOR-LABEL: arg2:
|
|
; VECTOR: # %bb.0:
|
|
; VECTOR-NEXT: lgrl %r1, Dst@GOT
|
|
; VECTOR-NEXT: vst %v24, 0(%r1), 3
|
|
; VECTOR-NEXT: br %r14
|
|
store %Ty2 %A, ptr @Dst
|
|
ret void
|
|
}
|
|
|
|
define void @call2() {
|
|
; CHECK-LABEL: call2:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; CHECK-NEXT: .cfi_offset %r14, -48
|
|
; CHECK-NEXT: .cfi_offset %r15, -40
|
|
; CHECK-NEXT: aghi %r15, -176
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 336
|
|
; CHECK-NEXT: lgrl %r1, Src@GOT
|
|
; CHECK-NEXT: lg %r0, 8(%r1)
|
|
; CHECK-NEXT: lg %r1, 0(%r1)
|
|
; CHECK-NEXT: stg %r0, 168(%r15)
|
|
; CHECK-NEXT: la %r2, 160(%r15)
|
|
; CHECK-NEXT: stg %r1, 160(%r15)
|
|
; CHECK-NEXT: brasl %r14, Fnptr@PLT
|
|
; CHECK-NEXT: lmg %r14, %r15, 288(%r15)
|
|
; CHECK-NEXT: br %r14
|
|
;
|
|
; VECTOR-LABEL: call2:
|
|
; VECTOR: # %bb.0:
|
|
; VECTOR-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; VECTOR-NEXT: .cfi_offset %r14, -48
|
|
; VECTOR-NEXT: .cfi_offset %r15, -40
|
|
; VECTOR-NEXT: aghi %r15, -160
|
|
; VECTOR-NEXT: .cfi_def_cfa_offset 320
|
|
; VECTOR-NEXT: lgrl %r1, Src@GOT
|
|
; VECTOR-NEXT: vl %v24, 0(%r1), 3
|
|
; VECTOR-NEXT: brasl %r14, Fnptr@PLT
|
|
; VECTOR-NEXT: lmg %r14, %r15, 272(%r15)
|
|
; VECTOR-NEXT: br %r14
|
|
%L = load %Ty2, ptr @Src
|
|
call void @Fnptr(%Ty2 %L)
|
|
ret void
|
|
}
|
|
|
|
define void @ret2() {
|
|
; CHECK-LABEL: ret2:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; CHECK-NEXT: .cfi_offset %r14, -48
|
|
; CHECK-NEXT: .cfi_offset %r15, -40
|
|
; CHECK-NEXT: aghi %r15, -160
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 320
|
|
; CHECK-NEXT: brasl %r14, Fnptr@PLT
|
|
; CHECK-NEXT: lgrl %r1, Dst@GOT
|
|
; CHECK-NEXT: stg %r3, 8(%r1)
|
|
; CHECK-NEXT: stg %r2, 0(%r1)
|
|
; CHECK-NEXT: lmg %r14, %r15, 272(%r15)
|
|
; CHECK-NEXT: br %r14
|
|
;
|
|
; VECTOR-LABEL: ret2:
|
|
; VECTOR: # %bb.0:
|
|
; VECTOR-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; VECTOR-NEXT: .cfi_offset %r14, -48
|
|
; VECTOR-NEXT: .cfi_offset %r15, -40
|
|
; VECTOR-NEXT: aghi %r15, -160
|
|
; VECTOR-NEXT: .cfi_def_cfa_offset 320
|
|
; VECTOR-NEXT: brasl %r14, Fnptr@PLT
|
|
; VECTOR-NEXT: lgrl %r1, Dst@GOT
|
|
; VECTOR-NEXT: vst %v24, 0(%r1), 3
|
|
; VECTOR-NEXT: lmg %r14, %r15, 272(%r15)
|
|
; VECTOR-NEXT: br %r14
|
|
%C = call %Ty2 @Fnptr()
|
|
store %Ty2 %C, ptr @Dst
|
|
ret void
|
|
}
|
|
|
|
%Ty3 = type <2 x double>
|
|
define void @arg3(%Ty3 %A) {
|
|
; CHECK-LABEL: arg3:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: lgrl %r1, Dst@GOT
|
|
; CHECK-NEXT: std %f2, 8(%r1)
|
|
; CHECK-NEXT: std %f0, 0(%r1)
|
|
; CHECK-NEXT: br %r14
|
|
;
|
|
; VECTOR-LABEL: arg3:
|
|
; VECTOR: # %bb.0:
|
|
; VECTOR-NEXT: lgrl %r1, Dst@GOT
|
|
; VECTOR-NEXT: vst %v24, 0(%r1), 3
|
|
; VECTOR-NEXT: br %r14
|
|
store %Ty3 %A, ptr @Dst
|
|
ret void
|
|
}
|
|
|
|
define void @call3() {
|
|
; CHECK-LABEL: call3:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; CHECK-NEXT: .cfi_offset %r14, -48
|
|
; CHECK-NEXT: .cfi_offset %r15, -40
|
|
; CHECK-NEXT: aghi %r15, -160
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 320
|
|
; CHECK-NEXT: lgrl %r1, Src@GOT
|
|
; CHECK-NEXT: ld %f2, 8(%r1)
|
|
; CHECK-NEXT: ld %f0, 0(%r1)
|
|
; CHECK-NEXT: brasl %r14, Fnptr@PLT
|
|
; CHECK-NEXT: lmg %r14, %r15, 272(%r15)
|
|
; CHECK-NEXT: br %r14
|
|
;
|
|
; VECTOR-LABEL: call3:
|
|
; VECTOR: # %bb.0:
|
|
; VECTOR-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; VECTOR-NEXT: .cfi_offset %r14, -48
|
|
; VECTOR-NEXT: .cfi_offset %r15, -40
|
|
; VECTOR-NEXT: aghi %r15, -160
|
|
; VECTOR-NEXT: .cfi_def_cfa_offset 320
|
|
; VECTOR-NEXT: lgrl %r1, Src@GOT
|
|
; VECTOR-NEXT: vl %v24, 0(%r1), 3
|
|
; VECTOR-NEXT: brasl %r14, Fnptr@PLT
|
|
; VECTOR-NEXT: lmg %r14, %r15, 272(%r15)
|
|
; VECTOR-NEXT: br %r14
|
|
%L = load %Ty3, ptr @Src
|
|
call void @Fnptr(%Ty3 %L)
|
|
ret void
|
|
}
|
|
|
|
define void @ret3() {
|
|
; CHECK-LABEL: ret3:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; CHECK-NEXT: .cfi_offset %r14, -48
|
|
; CHECK-NEXT: .cfi_offset %r15, -40
|
|
; CHECK-NEXT: aghi %r15, -160
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 320
|
|
; CHECK-NEXT: brasl %r14, Fnptr@PLT
|
|
; CHECK-NEXT: lgrl %r1, Dst@GOT
|
|
; CHECK-NEXT: std %f2, 8(%r1)
|
|
; CHECK-NEXT: std %f0, 0(%r1)
|
|
; CHECK-NEXT: lmg %r14, %r15, 272(%r15)
|
|
; CHECK-NEXT: br %r14
|
|
;
|
|
; VECTOR-LABEL: ret3:
|
|
; VECTOR: # %bb.0:
|
|
; VECTOR-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; VECTOR-NEXT: .cfi_offset %r14, -48
|
|
; VECTOR-NEXT: .cfi_offset %r15, -40
|
|
; VECTOR-NEXT: aghi %r15, -160
|
|
; VECTOR-NEXT: .cfi_def_cfa_offset 320
|
|
; VECTOR-NEXT: brasl %r14, Fnptr@PLT
|
|
; VECTOR-NEXT: lgrl %r1, Dst@GOT
|
|
; VECTOR-NEXT: vst %v24, 0(%r1), 3
|
|
; VECTOR-NEXT: lmg %r14, %r15, 272(%r15)
|
|
; VECTOR-NEXT: br %r14
|
|
%C = call %Ty3 @Fnptr()
|
|
store %Ty3 %C, ptr @Dst
|
|
ret void
|
|
}
|
|
|
|
%Ty4 = type <1 x i256>
|
|
define void @arg4(%Ty4 %A) {
|
|
; CHECK-LABEL: arg4:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: lg %r0, 24(%r2)
|
|
; CHECK-NEXT: lgrl %r1, Dst@GOT
|
|
; CHECK-NEXT: lg %r3, 16(%r2)
|
|
; CHECK-NEXT: lg %r4, 8(%r2)
|
|
; CHECK-NEXT: lg %r2, 0(%r2)
|
|
; CHECK-NEXT: stg %r0, 24(%r1)
|
|
; CHECK-NEXT: stg %r3, 16(%r1)
|
|
; CHECK-NEXT: stg %r4, 8(%r1)
|
|
; CHECK-NEXT: stg %r2, 0(%r1)
|
|
; CHECK-NEXT: br %r14
|
|
;
|
|
; VECTOR-LABEL: arg4:
|
|
; VECTOR: # %bb.0:
|
|
; VECTOR-NEXT: vl %v0, 0(%r2), 3
|
|
; VECTOR-NEXT: vl %v1, 16(%r2), 3
|
|
; VECTOR-NEXT: lgrl %r1, Dst@GOT
|
|
; VECTOR-NEXT: vst %v1, 16(%r1), 4
|
|
; VECTOR-NEXT: vst %v0, 0(%r1), 4
|
|
; VECTOR-NEXT: br %r14
|
|
store %Ty4 %A, ptr @Dst
|
|
ret void
|
|
}
|
|
|
|
define void @call4() {
|
|
; CHECK-LABEL: call4:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; CHECK-NEXT: .cfi_offset %r14, -48
|
|
; CHECK-NEXT: .cfi_offset %r15, -40
|
|
; CHECK-NEXT: aghi %r15, -192
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 352
|
|
; CHECK-NEXT: lgrl %r1, Src@GOT
|
|
; CHECK-NEXT: lg %r0, 24(%r1)
|
|
; CHECK-NEXT: lg %r2, 16(%r1)
|
|
; CHECK-NEXT: lg %r3, 8(%r1)
|
|
; CHECK-NEXT: lg %r1, 0(%r1)
|
|
; CHECK-NEXT: stg %r0, 184(%r15)
|
|
; CHECK-NEXT: stg %r2, 176(%r15)
|
|
; CHECK-NEXT: stg %r3, 168(%r15)
|
|
; CHECK-NEXT: la %r2, 160(%r15)
|
|
; CHECK-NEXT: stg %r1, 160(%r15)
|
|
; CHECK-NEXT: brasl %r14, Fnptr@PLT
|
|
; CHECK-NEXT: lmg %r14, %r15, 304(%r15)
|
|
; CHECK-NEXT: br %r14
|
|
;
|
|
; VECTOR-LABEL: call4:
|
|
; VECTOR: # %bb.0:
|
|
; VECTOR-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; VECTOR-NEXT: .cfi_offset %r14, -48
|
|
; VECTOR-NEXT: .cfi_offset %r15, -40
|
|
; VECTOR-NEXT: aghi %r15, -192
|
|
; VECTOR-NEXT: .cfi_def_cfa_offset 352
|
|
; VECTOR-NEXT: lgrl %r1, Src@GOT
|
|
; VECTOR-NEXT: vl %v0, 0(%r1), 4
|
|
; VECTOR-NEXT: vl %v1, 16(%r1), 4
|
|
; VECTOR-NEXT: la %r2, 160(%r15)
|
|
; VECTOR-NEXT: vst %v1, 176(%r15), 3
|
|
; VECTOR-NEXT: vst %v0, 160(%r15), 3
|
|
; VECTOR-NEXT: brasl %r14, Fnptr@PLT
|
|
; VECTOR-NEXT: lmg %r14, %r15, 304(%r15)
|
|
; VECTOR-NEXT: br %r14
|
|
%L = load %Ty4, ptr @Src
|
|
call void @Fnptr(%Ty4 %L)
|
|
ret void
|
|
}
|
|
|
|
define void @ret4() {
|
|
; CHECK-LABEL: ret4:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; CHECK-NEXT: .cfi_offset %r14, -48
|
|
; CHECK-NEXT: .cfi_offset %r15, -40
|
|
; CHECK-NEXT: aghi %r15, -160
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 320
|
|
; CHECK-NEXT: brasl %r14, Fnptr@PLT
|
|
; CHECK-NEXT: lgrl %r1, Dst@GOT
|
|
; CHECK-NEXT: stg %r5, 24(%r1)
|
|
; CHECK-NEXT: stg %r4, 16(%r1)
|
|
; CHECK-NEXT: stg %r3, 8(%r1)
|
|
; CHECK-NEXT: stg %r2, 0(%r1)
|
|
; CHECK-NEXT: lmg %r14, %r15, 272(%r15)
|
|
; CHECK-NEXT: br %r14
|
|
;
|
|
; VECTOR-LABEL: ret4:
|
|
; VECTOR: # %bb.0:
|
|
; VECTOR-NEXT: stmg %r14, %r15, 112(%r15)
|
|
; VECTOR-NEXT: .cfi_offset %r14, -48
|
|
; VECTOR-NEXT: .cfi_offset %r15, -40
|
|
; VECTOR-NEXT: aghi %r15, -192
|
|
; VECTOR-NEXT: .cfi_def_cfa_offset 352
|
|
; VECTOR-NEXT: la %r2, 160(%r15)
|
|
; VECTOR-NEXT: brasl %r14, Fnptr@PLT
|
|
; VECTOR-NEXT: vl %v0, 160(%r15), 3
|
|
; VECTOR-NEXT: vl %v1, 176(%r15), 3
|
|
; VECTOR-NEXT: lgrl %r1, Dst@GOT
|
|
; VECTOR-NEXT: vst %v1, 16(%r1), 4
|
|
; VECTOR-NEXT: vst %v0, 0(%r1), 4
|
|
; VECTOR-NEXT: lmg %r14, %r15, 304(%r15)
|
|
; VECTOR-NEXT: br %r14
|
|
%C = call %Ty4 @Fnptr()
|
|
store %Ty4 %C, ptr @Dst
|
|
ret void
|
|
}
|
|
|