Files
TheRock/compiler/amd-llvm/llvm/test/CodeGen/SystemZ/fp-half-vector-fcmp-select.ll
T
derek.holloway 7502bf64a4
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
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

504 lines
19 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 -mcpu=zEC12 | FileCheck %s
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z16 | FileCheck %s --check-prefix=VECTOR
;
; Test fcmp and select with fp16 vectors.
; Use of vsel with full vector.
%Ty0 = type <8 x half>
define void @fun0(ptr %Src, ptr %Dst) {
; CHECK-LABEL: fun0:
; CHECK: # %bb.0:
; CHECK-NEXT: stmg %r6, %r15, 48(%r15)
; CHECK-NEXT: .cfi_offset %r6, -112
; CHECK-NEXT: .cfi_offset %r7, -104
; CHECK-NEXT: .cfi_offset %r8, -96
; CHECK-NEXT: .cfi_offset %r9, -88
; CHECK-NEXT: .cfi_offset %r10, -80
; CHECK-NEXT: .cfi_offset %r11, -72
; CHECK-NEXT: .cfi_offset %r12, -64
; CHECK-NEXT: .cfi_offset %r13, -56
; CHECK-NEXT: .cfi_offset %r14, -48
; CHECK-NEXT: .cfi_offset %r15, -40
; CHECK-NEXT: aghi %r15, -272
; CHECK-NEXT: .cfi_def_cfa_offset 432
; CHECK-NEXT: std %f8, 264(%r15) # 8-byte Spill
; CHECK-NEXT: std %f9, 256(%r15) # 8-byte Spill
; CHECK-NEXT: std %f10, 248(%r15) # 8-byte Spill
; CHECK-NEXT: std %f11, 240(%r15) # 8-byte Spill
; CHECK-NEXT: std %f12, 232(%r15) # 8-byte Spill
; CHECK-NEXT: std %f13, 224(%r15) # 8-byte Spill
; CHECK-NEXT: std %f14, 216(%r15) # 8-byte Spill
; CHECK-NEXT: std %f15, 208(%r15) # 8-byte Spill
; CHECK-NEXT: .cfi_offset %f8, -168
; CHECK-NEXT: .cfi_offset %f9, -176
; CHECK-NEXT: .cfi_offset %f10, -184
; CHECK-NEXT: .cfi_offset %f11, -192
; CHECK-NEXT: .cfi_offset %f12, -200
; CHECK-NEXT: .cfi_offset %f13, -208
; CHECK-NEXT: .cfi_offset %f14, -216
; CHECK-NEXT: .cfi_offset %f15, -224
; CHECK-NEXT: lgh %r0, 14(%r2)
; CHECK-NEXT: stg %r0, 200(%r15) # 8-byte Spill
; CHECK-NEXT: lgh %r0, 12(%r2)
; CHECK-NEXT: stg %r0, 160(%r15) # 8-byte Spill
; CHECK-NEXT: lgh %r0, 6(%r2)
; CHECK-NEXT: sllg %r12, %r0, 48
; CHECK-NEXT: lgh %r0, 4(%r2)
; CHECK-NEXT: sllg %r0, %r0, 48
; CHECK-NEXT: ldgr %f10, %r0
; CHECK-NEXT: lgh %r0, 2(%r2)
; CHECK-NEXT: sllg %r0, %r0, 48
; CHECK-NEXT: ldgr %f9, %r0
; CHECK-NEXT: lgh %r0, 0(%r2)
; CHECK-NEXT: sllg %r0, %r0, 48
; CHECK-NEXT: ldgr %f12, %r0
; CHECK-NEXT: lgh %r0, 30(%r2)
; CHECK-NEXT: stg %r0, 192(%r15) # 8-byte Spill
; CHECK-NEXT: lgh %r0, 28(%r2)
; CHECK-NEXT: stg %r0, 184(%r15) # 8-byte Spill
; CHECK-NEXT: lgh %r0, 22(%r2)
; CHECK-NEXT: sllg %r10, %r0, 48
; CHECK-NEXT: lgh %r0, 20(%r2)
; CHECK-NEXT: sllg %r0, %r0, 48
; CHECK-NEXT: ldgr %f13, %r0
; CHECK-NEXT: lgh %r0, 18(%r2)
; CHECK-NEXT: sllg %r0, %r0, 48
; CHECK-NEXT: ldgr %f8, %r0
; CHECK-NEXT: lgh %r0, 16(%r2)
; CHECK-NEXT: lgh %r8, 10(%r2)
; CHECK-NEXT: lgh %r6, 8(%r2)
; CHECK-NEXT: lgh %r7, 26(%r2)
; CHECK-NEXT: lgh %r11, 24(%r2)
; CHECK-NEXT: sllg %r0, %r0, 48
; CHECK-NEXT: lgr %r13, %r3
; CHECK-NEXT: ldgr %f0, %r0
; CHECK-NEXT: # kill: def $f0h killed $f0h killed $f0d
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: ler %f11, %f0
; CHECK-NEXT: ler %f0, %f12
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: cebr %f0, %f11
; CHECK-NEXT: je .LBB0_2
; CHECK-NEXT: # %bb.1:
; CHECK-NEXT: ler %f0, %f11
; CHECK-NEXT: .LBB0_2:
; CHECK-NEXT: sllg %r6, %r6, 48
; CHECK-NEXT: sllg %r9, %r11, 48
; CHECK-NEXT: ldgr %f11, %r12
; CHECK-NEXT: ldgr %f15, %r10
; CHECK-NEXT: brasl %r14, __truncsfhf2@PLT
; CHECK-NEXT: # kill: def $f0h killed $f0h def $f0d
; CHECK-NEXT: std %f0, 176(%r15) # 8-byte Spill
; CHECK-NEXT: ler %f0, %f8
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: ler %f8, %f0
; CHECK-NEXT: ler %f0, %f9
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: cebr %f0, %f8
; CHECK-NEXT: je .LBB0_4
; CHECK-NEXT: # %bb.3:
; CHECK-NEXT: ler %f0, %f8
; CHECK-NEXT: .LBB0_4:
; CHECK-NEXT: sllg %r11, %r8, 48
; CHECK-NEXT: sllg %r8, %r7, 48
; CHECK-NEXT: ldgr %f12, %r6
; CHECK-NEXT: ldgr %f14, %r9
; CHECK-NEXT: brasl %r14, __truncsfhf2@PLT
; CHECK-NEXT: # kill: def $f0h killed $f0h def $f0d
; CHECK-NEXT: std %f0, 168(%r15) # 8-byte Spill
; CHECK-NEXT: ler %f0, %f13
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: ler %f8, %f0
; CHECK-NEXT: ler %f0, %f10
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: cebr %f0, %f8
; CHECK-NEXT: je .LBB0_6
; CHECK-NEXT: # %bb.5:
; CHECK-NEXT: ler %f0, %f8
; CHECK-NEXT: .LBB0_6:
; CHECK-NEXT: lg %r0, 160(%r15) # 8-byte Reload
; CHECK-NEXT: sllg %r12, %r0, 48
; CHECK-NEXT: lg %r0, 184(%r15) # 8-byte Reload
; CHECK-NEXT: sllg %r10, %r0, 48
; CHECK-NEXT: ldgr %f13, %r11
; CHECK-NEXT: ldgr %f8, %r8
; CHECK-NEXT: brasl %r14, __truncsfhf2@PLT
; CHECK-NEXT: # kill: def $f0h killed $f0h def $f0d
; CHECK-NEXT: std %f0, 160(%r15) # 8-byte Spill
; CHECK-NEXT: ler %f0, %f15
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: ler %f9, %f0
; CHECK-NEXT: ler %f0, %f11
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: cebr %f0, %f9
; CHECK-NEXT: je .LBB0_8
; CHECK-NEXT: # %bb.7:
; CHECK-NEXT: ler %f0, %f9
; CHECK-NEXT: .LBB0_8:
; CHECK-NEXT: lg %r0, 200(%r15) # 8-byte Reload
; CHECK-NEXT: sllg %r11, %r0, 48
; CHECK-NEXT: lg %r0, 192(%r15) # 8-byte Reload
; CHECK-NEXT: sllg %r9, %r0, 48
; CHECK-NEXT: ldgr %f15, %r12
; CHECK-NEXT: ldgr %f9, %r10
; CHECK-NEXT: brasl %r14, __truncsfhf2@PLT
; CHECK-NEXT: ler %f11, %f0
; CHECK-NEXT: ler %f0, %f14
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: ler %f10, %f0
; CHECK-NEXT: ler %f0, %f12
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: cebr %f0, %f10
; CHECK-NEXT: je .LBB0_10
; CHECK-NEXT: # %bb.9:
; CHECK-NEXT: ler %f0, %f10
; CHECK-NEXT: .LBB0_10:
; CHECK-NEXT: ldgr %f14, %r11
; CHECK-NEXT: ldgr %f10, %r9
; CHECK-NEXT: brasl %r14, __truncsfhf2@PLT
; CHECK-NEXT: ler %f12, %f0
; CHECK-NEXT: ler %f0, %f8
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: ler %f8, %f0
; CHECK-NEXT: ler %f0, %f13
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: cebr %f0, %f8
; CHECK-NEXT: je .LBB0_12
; CHECK-NEXT: # %bb.11:
; CHECK-NEXT: ler %f0, %f8
; CHECK-NEXT: .LBB0_12:
; CHECK-NEXT: brasl %r14, __truncsfhf2@PLT
; CHECK-NEXT: ler %f8, %f0
; CHECK-NEXT: ler %f0, %f9
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: ler %f9, %f0
; CHECK-NEXT: ler %f0, %f15
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: cebr %f0, %f9
; CHECK-NEXT: je .LBB0_14
; CHECK-NEXT: # %bb.13:
; CHECK-NEXT: ler %f0, %f9
; CHECK-NEXT: .LBB0_14:
; CHECK-NEXT: brasl %r14, __truncsfhf2@PLT
; CHECK-NEXT: ler %f9, %f0
; CHECK-NEXT: ler %f0, %f10
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: ler %f10, %f0
; CHECK-NEXT: ler %f0, %f14
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: cebr %f0, %f10
; CHECK-NEXT: je .LBB0_16
; CHECK-NEXT: # %bb.15:
; CHECK-NEXT: ler %f0, %f10
; CHECK-NEXT: .LBB0_16:
; CHECK-NEXT: brasl %r14, __truncsfhf2@PLT
; CHECK-NEXT: # kill: def $f0h killed $f0h def $f0d
; CHECK-NEXT: lgdr %r0, %f0
; CHECK-NEXT: srlg %r0, %r0, 48
; CHECK-NEXT: sth %r0, 14(%r13)
; CHECK-NEXT: lgdr %r0, %f9
; CHECK-NEXT: srlg %r0, %r0, 48
; CHECK-NEXT: sth %r0, 12(%r13)
; CHECK-NEXT: lgdr %r0, %f8
; CHECK-NEXT: srlg %r0, %r0, 48
; CHECK-NEXT: sth %r0, 10(%r13)
; CHECK-NEXT: lgdr %r0, %f12
; CHECK-NEXT: srlg %r0, %r0, 48
; CHECK-NEXT: sth %r0, 8(%r13)
; CHECK-NEXT: lgdr %r0, %f11
; CHECK-NEXT: ld %f8, 264(%r15) # 8-byte Reload
; CHECK-NEXT: ld %f9, 256(%r15) # 8-byte Reload
; CHECK-NEXT: srlg %r0, %r0, 48
; CHECK-NEXT: ld %f10, 248(%r15) # 8-byte Reload
; CHECK-NEXT: ld %f11, 240(%r15) # 8-byte Reload
; CHECK-NEXT: sth %r0, 6(%r13)
; CHECK-NEXT: lg %r0, 160(%r15) # 8-byte Reload
; CHECK-NEXT: ld %f12, 232(%r15) # 8-byte Reload
; CHECK-NEXT: srlg %r0, %r0, 48
; CHECK-NEXT: ld %f13, 224(%r15) # 8-byte Reload
; CHECK-NEXT: ld %f14, 216(%r15) # 8-byte Reload
; CHECK-NEXT: sth %r0, 4(%r13)
; CHECK-NEXT: lg %r0, 168(%r15) # 8-byte Reload
; CHECK-NEXT: ld %f15, 208(%r15) # 8-byte Reload
; CHECK-NEXT: srlg %r0, %r0, 48
; CHECK-NEXT: sth %r0, 2(%r13)
; CHECK-NEXT: lg %r0, 176(%r15) # 8-byte Reload
; CHECK-NEXT: srlg %r0, %r0, 48
; CHECK-NEXT: sth %r0, 0(%r13)
; CHECK-NEXT: lmg %r6, %r15, 320(%r15)
; CHECK-NEXT: br %r14
;
; VECTOR-LABEL: fun0:
; VECTOR: # %bb.0:
; VECTOR-NEXT: stmg %r11, %r15, 88(%r15)
; VECTOR-NEXT: .cfi_offset %r11, -72
; VECTOR-NEXT: .cfi_offset %r12, -64
; VECTOR-NEXT: .cfi_offset %r13, -56
; VECTOR-NEXT: .cfi_offset %r14, -48
; VECTOR-NEXT: .cfi_offset %r15, -40
; VECTOR-NEXT: aghi %r15, -216
; VECTOR-NEXT: .cfi_def_cfa_offset 376
; VECTOR-NEXT: std %f8, 208(%r15) # 8-byte Spill
; VECTOR-NEXT: .cfi_offset %f8, -168
; VECTOR-NEXT: vl %v0, 16(%r2), 3
; VECTOR-NEXT: mvc 176(16,%r15), 0(%r2) # 16-byte Folded Spill
; VECTOR-NEXT: lgr %r13, %r3
; VECTOR-NEXT: vst %v0, 192(%r15), 3 # 16-byte Spill
; VECTOR-NEXT: vreph %v0, %v0, 7
; VECTOR-NEXT: # kill: def $f0h killed $f0h killed $v0
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: ldr %f8, %f0
; VECTOR-NEXT: vl %v0, 176(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: vreph %v0, %v0, 7
; VECTOR-NEXT: # kill: def $f0h killed $f0h killed $v0
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: cebr %f0, %f8
; VECTOR-NEXT: vl %v0, 192(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: lhi %r11, 0
; VECTOR-NEXT: lhi %r12, 0
; VECTOR-NEXT: lochie %r11, -1
; VECTOR-NEXT: vreph %v0, %v0, 3
; VECTOR-NEXT: # kill: def $f0h killed $f0h killed $v0
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: ldr %f8, %f0
; VECTOR-NEXT: vl %v0, 176(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: vreph %v0, %v0, 3
; VECTOR-NEXT: # kill: def $f0h killed $f0h killed $v0
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: cebr %f0, %f8
; VECTOR-NEXT: lhi %r0, 0
; VECTOR-NEXT: lochie %r0, -1
; VECTOR-NEXT: vlvgp %v0, %r0, %r11
; VECTOR-NEXT: vst %v0, 160(%r15), 3 # 16-byte Spill
; VECTOR-NEXT: vl %v0, 192(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: # kill: def $f0h killed $f0h killed $v0
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: ldr %f8, %f0
; VECTOR-NEXT: vl %v0, 176(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: # kill: def $f0h killed $f0h killed $v0
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: cebr %f0, %f8
; VECTOR-NEXT: vl %v0, 160(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: lhi %r0, 0
; VECTOR-NEXT: lochie %r0, -1
; VECTOR-NEXT: vlvgh %v0, %r0, 0
; VECTOR-NEXT: vst %v0, 160(%r15), 3 # 16-byte Spill
; VECTOR-NEXT: vl %v0, 192(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: vreph %v0, %v0, 1
; VECTOR-NEXT: # kill: def $f0h killed $f0h killed $v0
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: ldr %f8, %f0
; VECTOR-NEXT: vl %v0, 176(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: vreph %v0, %v0, 1
; VECTOR-NEXT: # kill: def $f0h killed $f0h killed $v0
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: cebr %f0, %f8
; VECTOR-NEXT: vl %v0, 160(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: lhi %r0, 0
; VECTOR-NEXT: lochie %r0, -1
; VECTOR-NEXT: vlvgh %v0, %r0, 1
; VECTOR-NEXT: vst %v0, 160(%r15), 3 # 16-byte Spill
; VECTOR-NEXT: vl %v0, 192(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: vreph %v0, %v0, 2
; VECTOR-NEXT: # kill: def $f0h killed $f0h killed $v0
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: ldr %f8, %f0
; VECTOR-NEXT: vl %v0, 176(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: vreph %v0, %v0, 2
; VECTOR-NEXT: # kill: def $f0h killed $f0h killed $v0
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: cebr %f0, %f8
; VECTOR-NEXT: vl %v0, 160(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: lhi %r0, 0
; VECTOR-NEXT: lochie %r0, -1
; VECTOR-NEXT: vlvgh %v0, %r0, 2
; VECTOR-NEXT: vst %v0, 160(%r15), 3 # 16-byte Spill
; VECTOR-NEXT: vl %v0, 192(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: vreph %v0, %v0, 4
; VECTOR-NEXT: # kill: def $f0h killed $f0h killed $v0
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: ldr %f8, %f0
; VECTOR-NEXT: vl %v0, 176(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: vreph %v0, %v0, 4
; VECTOR-NEXT: # kill: def $f0h killed $f0h killed $v0
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: cebr %f0, %f8
; VECTOR-NEXT: vl %v0, 160(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: lhi %r0, 0
; VECTOR-NEXT: lochie %r0, -1
; VECTOR-NEXT: vlvgh %v0, %r0, 4
; VECTOR-NEXT: vst %v0, 160(%r15), 3 # 16-byte Spill
; VECTOR-NEXT: vl %v0, 192(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: vreph %v0, %v0, 5
; VECTOR-NEXT: # kill: def $f0h killed $f0h killed $v0
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: ldr %f8, %f0
; VECTOR-NEXT: vl %v0, 176(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: vreph %v0, %v0, 5
; VECTOR-NEXT: # kill: def $f0h killed $f0h killed $v0
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: cebr %f0, %f8
; VECTOR-NEXT: vl %v0, 160(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: lhi %r0, 0
; VECTOR-NEXT: lochie %r0, -1
; VECTOR-NEXT: vlvgh %v0, %r0, 5
; VECTOR-NEXT: vst %v0, 160(%r15), 3 # 16-byte Spill
; VECTOR-NEXT: vl %v0, 192(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: vreph %v0, %v0, 6
; VECTOR-NEXT: # kill: def $f0h killed $f0h killed $v0
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: ldr %f8, %f0
; VECTOR-NEXT: vl %v0, 176(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: vreph %v0, %v0, 6
; VECTOR-NEXT: # kill: def $f0h killed $f0h killed $v0
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: cebr %f0, %f8
; VECTOR-NEXT: vl %v2, 160(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: vl %v0, 176(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: vl %v1, 192(%r15), 3 # 16-byte Reload
; VECTOR-NEXT: lochie %r12, -1
; VECTOR-NEXT: vlvgh %v2, %r12, 6
; VECTOR-NEXT: ld %f8, 208(%r15) # 8-byte Reload
; VECTOR-NEXT: vsel %v0, %v0, %v1, %v2
; VECTOR-NEXT: vst %v0, 0(%r13), 3
; VECTOR-NEXT: lmg %r11, %r15, 304(%r15)
; VECTOR-NEXT: br %r14
%A = load %Ty0, ptr %Src
%S2 = getelementptr %Ty0, ptr %Src, i32 1
%B = load %Ty0, ptr %S2
%C = fcmp oeq %Ty0 %A, %B
%S = select <8 x i1> %C, %Ty0 %A, %Ty0 %B
store %Ty0 %S, ptr %Dst
ret void
}
%Ty1 = type <2 x half>
define void @fun1(ptr %Src, ptr %Dst) {
; CHECK-LABEL: fun1:
; CHECK: # %bb.0:
; CHECK-NEXT: stmg %r13, %r15, 104(%r15)
; CHECK-NEXT: .cfi_offset %r13, -56
; 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: std %f8, 184(%r15) # 8-byte Spill
; CHECK-NEXT: std %f9, 176(%r15) # 8-byte Spill
; CHECK-NEXT: std %f10, 168(%r15) # 8-byte Spill
; CHECK-NEXT: std %f11, 160(%r15) # 8-byte Spill
; CHECK-NEXT: .cfi_offset %f8, -168
; CHECK-NEXT: .cfi_offset %f9, -176
; CHECK-NEXT: .cfi_offset %f10, -184
; CHECK-NEXT: .cfi_offset %f11, -192
; CHECK-NEXT: lgh %r0, 4(%r2)
; CHECK-NEXT: lgh %r1, 2(%r2)
; CHECK-NEXT: lgr %r13, %r3
; CHECK-NEXT: lgh %r3, 0(%r2)
; CHECK-NEXT: lgh %r2, 6(%r2)
; CHECK-NEXT: sllg %r0, %r0, 48
; CHECK-NEXT: sllg %r1, %r1, 48
; CHECK-NEXT: ldgr %f8, %r1
; CHECK-NEXT: sllg %r1, %r3, 48
; CHECK-NEXT: ldgr %f0, %r0
; CHECK-NEXT: # kill: def $f0h killed $f0h killed $f0d
; CHECK-NEXT: sllg %r0, %r2, 48
; CHECK-NEXT: ldgr %f11, %r1
; CHECK-NEXT: ldgr %f10, %r0
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: ler %f9, %f0
; CHECK-NEXT: ler %f0, %f11
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: cebr %f0, %f9
; CHECK-NEXT: je .LBB1_2
; CHECK-NEXT: # %bb.1:
; CHECK-NEXT: ler %f0, %f9
; CHECK-NEXT: .LBB1_2:
; CHECK-NEXT: brasl %r14, __truncsfhf2@PLT
; CHECK-NEXT: ler %f9, %f0
; CHECK-NEXT: ler %f0, %f10
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: ler %f10, %f0
; CHECK-NEXT: ler %f0, %f8
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
; CHECK-NEXT: cebr %f0, %f10
; CHECK-NEXT: je .LBB1_4
; CHECK-NEXT: # %bb.3:
; CHECK-NEXT: ler %f0, %f10
; CHECK-NEXT: .LBB1_4:
; CHECK-NEXT: brasl %r14, __truncsfhf2@PLT
; CHECK-NEXT: # kill: def $f0h killed $f0h def $f0d
; CHECK-NEXT: lgdr %r0, %f0
; CHECK-NEXT: lgdr %r1, %f9
; CHECK-NEXT: ld %f8, 184(%r15) # 8-byte Reload
; CHECK-NEXT: ld %f9, 176(%r15) # 8-byte Reload
; CHECK-NEXT: ld %f10, 168(%r15) # 8-byte Reload
; CHECK-NEXT: ld %f11, 160(%r15) # 8-byte Reload
; CHECK-NEXT: srlg %r0, %r0, 48
; CHECK-NEXT: srlg %r1, %r1, 48
; CHECK-NEXT: sth %r0, 2(%r13)
; CHECK-NEXT: sth %r1, 0(%r13)
; CHECK-NEXT: lmg %r13, %r15, 296(%r15)
; CHECK-NEXT: br %r14
;
; VECTOR-LABEL: fun1:
; VECTOR: # %bb.0:
; VECTOR-NEXT: stmg %r13, %r15, 104(%r15)
; VECTOR-NEXT: .cfi_offset %r13, -56
; 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: std %f8, 184(%r15) # 8-byte Spill
; VECTOR-NEXT: std %f9, 176(%r15) # 8-byte Spill
; VECTOR-NEXT: std %f10, 168(%r15) # 8-byte Spill
; VECTOR-NEXT: std %f11, 160(%r15) # 8-byte Spill
; VECTOR-NEXT: .cfi_offset %f8, -168
; VECTOR-NEXT: .cfi_offset %f9, -176
; VECTOR-NEXT: .cfi_offset %f10, -184
; VECTOR-NEXT: .cfi_offset %f11, -192
; VECTOR-NEXT: vlreph %v0, 4(%r2)
; VECTOR-NEXT: vlreph %v8, 2(%r2)
; VECTOR-NEXT: vlreph %v11, 0(%r2)
; VECTOR-NEXT: vlreph %v9, 6(%r2)
; VECTOR-NEXT: lgr %r13, %r3
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: ldr %f10, %f0
; VECTOR-NEXT: ldr %f0, %f11
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: cebr %f0, %f10
; VECTOR-NEXT: je .LBB1_2
; VECTOR-NEXT: # %bb.1:
; VECTOR-NEXT: ldr %f0, %f10
; VECTOR-NEXT: .LBB1_2:
; VECTOR-NEXT: brasl %r14, __truncsfhf2@PLT
; VECTOR-NEXT: ldr %f10, %f0
; VECTOR-NEXT: ldr %f0, %f9
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: ldr %f9, %f0
; VECTOR-NEXT: ldr %f0, %f8
; VECTOR-NEXT: brasl %r14, __extendhfsf2@PLT
; VECTOR-NEXT: cebr %f0, %f9
; VECTOR-NEXT: je .LBB1_4
; VECTOR-NEXT: # %bb.3:
; VECTOR-NEXT: ldr %f0, %f9
; VECTOR-NEXT: .LBB1_4:
; VECTOR-NEXT: brasl %r14, __truncsfhf2@PLT
; VECTOR-NEXT: vsteh %v10, 0(%r13), 0
; VECTOR-NEXT: ld %f8, 184(%r15) # 8-byte Reload
; VECTOR-NEXT: ld %f9, 176(%r15) # 8-byte Reload
; VECTOR-NEXT: ld %f10, 168(%r15) # 8-byte Reload
; VECTOR-NEXT: ld %f11, 160(%r15) # 8-byte Reload
; VECTOR-NEXT: vsteh %v0, 2(%r13), 0
; VECTOR-NEXT: lmg %r13, %r15, 296(%r15)
; VECTOR-NEXT: br %r14
%A = load %Ty1, ptr %Src
%S2 = getelementptr %Ty1, ptr %Src, i32 1
%B = load %Ty1, ptr %S2
%C = fcmp oeq %Ty1 %A, %B
%S = select <2 x i1> %C, %Ty1 %A, %Ty1 %B
store %Ty1 %S, ptr %Dst
ret void
}