| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | 
 | ; RUN: llc -O3 -mtriple=s390x-linux-gnu  < %s | FileCheck --check-prefix=S390X %s | 
 | ; RUN: llc -O3 -mtriple=s390x-linux-gnu -mcpu=z13 < %s | FileCheck --check-prefix=SZ13 %s | 
 |  | 
 | define <1 x float> @constrained_vector_fdiv_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_fdiv_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI0_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI0_1 | 
 | ; S390X-NEXT:    deb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fdiv_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI0_0 | 
 | ; SZ13-NEXT:    vgmf %v0, 2, 8 | 
 | ; SZ13-NEXT:    deb %f0, 0(%r1) | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %div = call <1 x float> @llvm.experimental.constrained.fdiv.v1f32( | 
 |            <1 x float> <float 1.000000e+00>, | 
 |            <1 x float> <float 1.000000e+01>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %div | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_fdiv_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_fdiv_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI1_0 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI1_1 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI1_2 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    ddbr %f2, %f1 | 
 | ; S390X-NEXT:    ddbr %f0, %f1 | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fdiv_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI1_0 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r1), 3 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI1_1 | 
 | ; SZ13-NEXT:    vl %v1, 0(%r1), 3 | 
 | ; SZ13-NEXT:    vfddb %v24, %v1, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %div = call <2 x double> @llvm.experimental.constrained.fdiv.v2f64( | 
 |            <2 x double> <double 1.000000e+00, double 2.000000e+00>, | 
 |            <2 x double> <double 1.000000e+01, double 1.000000e+01>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %div | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_fdiv_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_fdiv_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI2_0 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI2_1 | 
 | ; S390X-NEXT:    le %f4, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI2_2 | 
 | ; S390X-NEXT:    le %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI2_3 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    debr %f4, %f1 | 
 | ; S390X-NEXT:    debr %f2, %f1 | 
 | ; S390X-NEXT:    debr %f0, %f1 | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fdiv_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI2_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI2_1 | 
 | ; SZ13-NEXT:    lde %f1, 0(%r1) | 
 | ; SZ13-NEXT:    debr %f1, %f0 | 
 | ; SZ13-NEXT:    vgmf %v2, 2, 8 | 
 | ; SZ13-NEXT:    vgmf %v3, 1, 1 | 
 | ; SZ13-NEXT:    debr %f2, %f0 | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    debr %f3, %f0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v2, %v3 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %div = call <3 x float> @llvm.experimental.constrained.fdiv.v3f32( | 
 |            <3 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, | 
 |            <3 x float> <float 1.000000e+01, float 1.000000e+01, float 1.000000e+01>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %div | 
 | } | 
 |  | 
 | define void @constrained_vector_fdiv_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_fdiv_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI3_1 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI3_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI3_0 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    ddb %f1, 0(%r2) | 
 | ; S390X-NEXT:    ddb %f0, 8(%r2) | 
 | ; S390X-NEXT:    ddb %f2, 16(%r2) | 
 | ; S390X-NEXT:    std %f1, 0(%r2) | 
 | ; S390X-NEXT:    std %f0, 8(%r2) | 
 | ; S390X-NEXT:    std %f2, 16(%r2) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fdiv_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI3_0 | 
 | ; SZ13-NEXT:    ld %f1, 0(%r1) | 
 | ; SZ13-NEXT:    ddb %f1, 16(%r2) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI3_1 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    vl %v2, 0(%r1), 3 | 
 | ; SZ13-NEXT:    std %f1, 16(%r2) | 
 | ; SZ13-NEXT:    vfddb %v0, %v2, %v0 | 
 | ; SZ13-NEXT:    vst %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %div = call <3 x double> @llvm.experimental.constrained.fdiv.v3f64( | 
 |            <3 x double> <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00>, | 
 |            <3 x double> %b, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %div, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_fdiv_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_fdiv_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI4_0 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI4_1 | 
 | ; S390X-NEXT:    ld %f6, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI4_2 | 
 | ; S390X-NEXT:    ld %f4, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI4_3 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI4_4 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    ddbr %f6, %f1 | 
 | ; S390X-NEXT:    ddbr %f4, %f1 | 
 | ; S390X-NEXT:    ddbr %f2, %f1 | 
 | ; S390X-NEXT:    ddbr %f0, %f1 | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fdiv_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI4_0 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r1), 3 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI4_1 | 
 | ; SZ13-NEXT:    vl %v1, 0(%r1), 3 | 
 | ; SZ13-NEXT:    vfddb %v26, %v1, %v0 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI4_2 | 
 | ; SZ13-NEXT:    vl %v1, 0(%r1), 3 | 
 | ; SZ13-NEXT:    vfddb %v24, %v1, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %div = call <4 x double> @llvm.experimental.constrained.fdiv.v4f64( | 
 |            <4 x double> <double 1.000000e+00, double 2.000000e+00, | 
 |                          double 3.000000e+00, double 4.000000e+00>, | 
 |            <4 x double> <double 1.000000e+01, double 1.000000e+01, | 
 |                          double 1.000000e+01, double 1.000000e+01>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %div | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_frem_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_frem_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    larl %r1, .LCPI5_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI5_1 | 
 | ; S390X-NEXT:    le %f2, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, fmodf@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_frem_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -160 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI5_0 | 
 | ; SZ13-NEXT:    lde %f2, 0(%r1) | 
 | ; SZ13-NEXT:    vgmf %v0, 2, 8 | 
 | ; SZ13-NEXT:    brasl %r14, fmodf@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %rem = call <1 x float> @llvm.experimental.constrained.frem.v1f32( | 
 |            <1 x float> <float 1.000000e+00>, | 
 |            <1 x float> <float 1.000000e+01>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %rem | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_frem_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_frem_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    larl %r1, .LCPI6_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI6_1 | 
 | ; S390X-NEXT:    ld %f8, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, fmod@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI6_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, fmod@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f9 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_frem_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -184 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; SZ13-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI6_0 | 
 | ; SZ13-NEXT:    ld %f8, 0(%r1) | 
 | ; SZ13-NEXT:    vgmg %v0, 1, 1 | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, fmod@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vgmg %v0, 2, 11 | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, fmod@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %rem = call <2 x double> @llvm.experimental.constrained.frem.v2f64( | 
 |            <2 x double> <double 1.000000e+00, double 2.000000e+00>, | 
 |            <2 x double> <double 1.000000e+01, double 1.000000e+01>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %rem | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_frem_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_frem_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    larl %r1, .LCPI7_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI7_1 | 
 | ; S390X-NEXT:    le %f8, 0(%r1) | 
 | ; S390X-NEXT:    ler %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, fmodf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI7_2 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    ler %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, fmodf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI7_3 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f10, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    ler %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, fmodf@PLT | 
 | ; S390X-NEXT:    ler %f2, %f10 | 
 | ; S390X-NEXT:    ler %f4, %f9 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_frem_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -200 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 360 | 
 | ; SZ13-NEXT:    std %f8, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI7_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI7_1 | 
 | ; SZ13-NEXT:    lde %f8, 0(%r1) | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, fmodf@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vgmf %v0, 2, 8 | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, fmodf@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vgmf %v0, 1, 1 | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, fmodf@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    ld %f8, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 312(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %rem = call <3 x float> @llvm.experimental.constrained.frem.v3f32( | 
 |            <3 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, | 
 |            <3 x float> <float 1.000000e+01, float 1.000000e+01, float 1.000000e+01>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %rem | 
 | } | 
 |  | 
 | define void @constrained_vector_frem_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_frem_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f2, 16(%r2) | 
 | ; S390X-NEXT:    larl %r1, .LCPI8_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    brasl %r14, fmod@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI8_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    ldr %f2, %f9 | 
 | ; S390X-NEXT:    brasl %r14, fmod@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI8_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, fmod@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f10, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_frem_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r13, -56 | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -200 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 360 | 
 | ; SZ13-NEXT:    std %f8, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    vl %v2, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f8, 16(%r2) | 
 | ; SZ13-NEXT:    vgmg %v0, 2, 11 | 
 | ; SZ13-NEXT:    lgr %r13, %r2 | 
 | ; SZ13-NEXT:    vst %v2, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    # kill: def $f2d killed $f2d killed $v2 | 
 | ; SZ13-NEXT:    brasl %r14, fmod@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vl %v0, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepg %v2, %v0, 1 | 
 | ; SZ13-NEXT:    vgmg %v0, 1, 1 | 
 | ; SZ13-NEXT:    # kill: def $f2d killed $f2d killed $v2 | 
 | ; SZ13-NEXT:    brasl %r14, fmod@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI8_0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, fmod@PLT | 
 | ; SZ13-NEXT:    mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload | 
 | ; SZ13-NEXT:    ld %f8, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    std %f0, 16(%r13) | 
 | ; SZ13-NEXT:    lmg %r13, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %rem = call <3 x double> @llvm.experimental.constrained.frem.v3f64( | 
 |            <3 x double> <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00>, | 
 |            <3 x double> %b, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %rem, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_frem_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_frem_v4f64: | 
 | ; S390X:       # %bb.0: | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -192 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; S390X-NEXT:    std %f8, 184(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f11, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    .cfi_offset %f11, -192 | 
 | ; S390X-NEXT:    larl %r1, .LCPI9_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI9_1 | 
 | ; S390X-NEXT:    ld %f8, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, fmod@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI9_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, fmod@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI9_3 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, fmod@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI9_4 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f11, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, fmod@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f11 | 
 | ; S390X-NEXT:    ldr %f4, %f10 | 
 | ; S390X-NEXT:    ldr %f6, %f9 | 
 | ; S390X-NEXT:    ld %f8, 184(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f11, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_frem_v4f64: | 
 | ; SZ13:       # %bb.0: | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -200 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 360 | 
 | ; SZ13-NEXT:    std %f8, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI9_0 | 
 | ; SZ13-NEXT:    ld %f8, 0(%r1) | 
 | ; SZ13-NEXT:    vgmg %v0, 1, 1 | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, fmod@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vgmg %v0, 2, 11 | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, fmod@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v0, %v1 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI9_1 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, fmod@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI9_2 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, fmod@PLT | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vl %v24, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    ld %f8, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v26, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 312(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 |   %rem = call <4 x double> @llvm.experimental.constrained.frem.v4f64( | 
 |            <4 x double> <double 1.000000e+00, double 2.000000e+00, | 
 |                          double 3.000000e+00, double 4.000000e+00>, | 
 |            <4 x double> <double 1.000000e+01, double 1.000000e+01, | 
 |                          double 1.000000e+01, double 1.000000e+01>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %rem | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_fmul_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_fmul_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI10_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI10_1 | 
 | ; S390X-NEXT:    meeb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fmul_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vgmf %v0, 1, 1 | 
 | ; SZ13-NEXT:    vgmf %v1, 1, 8 | 
 | ; SZ13-NEXT:    meebr %f1, %f0 | 
 | ; SZ13-NEXT:    vlr %v24, %v1 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %mul = call <1 x float> @llvm.experimental.constrained.fmul.v1f32( | 
 |            <1 x float> <float 0x7FF0000000000000>, | 
 |            <1 x float> <float 2.000000e+00>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %mul | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_fmul_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_fmul_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI11_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI11_1 | 
 | ; S390X-NEXT:    ldr %f2, %f0 | 
 | ; S390X-NEXT:    mdb %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI11_2 | 
 | ; S390X-NEXT:    mdb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fmul_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI11_0 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r1), 3 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI11_1 | 
 | ; SZ13-NEXT:    vl %v1, 0(%r1), 3 | 
 | ; SZ13-NEXT:    vfmdb %v24, %v1, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %mul = call <2 x double> @llvm.experimental.constrained.fmul.v2f64( | 
 |            <2 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>, | 
 |            <2 x double> <double 2.000000e+00, double 3.000000e+00>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %mul | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_fmul_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_fmul_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI12_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI12_1 | 
 | ; S390X-NEXT:    ler %f4, %f0 | 
 | ; S390X-NEXT:    meeb %f4, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI12_2 | 
 | ; S390X-NEXT:    ler %f2, %f0 | 
 | ; S390X-NEXT:    meeb %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI12_3 | 
 | ; S390X-NEXT:    meeb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fmul_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vgmf %v0, 1, 8 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI12_0 | 
 | ; SZ13-NEXT:    vgmf %v2, 2, 8 | 
 | ; SZ13-NEXT:    vgmf %v1, 1, 8 | 
 | ; SZ13-NEXT:    meeb %f1, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI12_1 | 
 | ; SZ13-NEXT:    meebr %f2, %f0 | 
 | ; SZ13-NEXT:    meeb %f0, 0(%r1) | 
 | ; SZ13-NEXT:    vmrhf %v0, %v2, %v0 | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %mul = call <3 x float> @llvm.experimental.constrained.fmul.v3f32( | 
 |            <3 x float> <float 0x7FF0000000000000, float 0x7FF0000000000000, | 
 |                         float 0x7FF0000000000000>, | 
 |            <3 x float> <float 1.000000e+00, float 1.000000e+01, float 1.000000e+02>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %mul | 
 | } | 
 |  | 
 | define void @constrained_vector_fmul_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_fmul_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI13_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f1, %f0 | 
 | ; S390X-NEXT:    ldr %f2, %f0 | 
 | ; S390X-NEXT:    mdb %f0, 0(%r2) | 
 | ; S390X-NEXT:    mdb %f2, 8(%r2) | 
 | ; S390X-NEXT:    mdb %f1, 16(%r2) | 
 | ; S390X-NEXT:    std %f0, 0(%r2) | 
 | ; S390X-NEXT:    std %f2, 8(%r2) | 
 | ; S390X-NEXT:    std %f1, 16(%r2) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fmul_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI13_0 | 
 | ; SZ13-NEXT:    ld %f1, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI13_1 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    vl %v2, 0(%r1), 3 | 
 | ; SZ13-NEXT:    mdb %f1, 16(%r2) | 
 | ; SZ13-NEXT:    vfmdb %v0, %v2, %v0 | 
 | ; SZ13-NEXT:    vst %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    std %f1, 16(%r2) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %mul = call <3 x double> @llvm.experimental.constrained.fmul.v3f64( | 
 |            <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF, | 
 |                         double 0x7FEFFFFFFFFFFFFF>, | 
 |            <3 x double> %b, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %mul, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_fmul_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_fmul_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI14_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI14_1 | 
 | ; S390X-NEXT:    ldr %f6, %f0 | 
 | ; S390X-NEXT:    mdb %f6, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI14_2 | 
 | ; S390X-NEXT:    ldr %f4, %f0 | 
 | ; S390X-NEXT:    mdb %f4, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI14_3 | 
 | ; S390X-NEXT:    ldr %f2, %f0 | 
 | ; S390X-NEXT:    mdb %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI14_4 | 
 | ; S390X-NEXT:    mdb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fmul_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI14_0 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r1), 3 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI14_1 | 
 | ; SZ13-NEXT:    vl %v1, 0(%r1), 3 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI14_2 | 
 | ; SZ13-NEXT:    vfmdb %v26, %v1, %v0 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r1), 3 | 
 | ; SZ13-NEXT:    vfmdb %v24, %v1, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %mul = call <4 x double> @llvm.experimental.constrained.fmul.v4f64( | 
 |            <4 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF, | 
 |                          double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>, | 
 |            <4 x double> <double 2.000000e+00, double 3.000000e+00, | 
 |                          double 4.000000e+00, double 5.000000e+00>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %mul | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_fadd_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_fadd_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI15_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI15_1 | 
 | ; S390X-NEXT:    aeb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fadd_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vgmf %v0, 2, 8 | 
 | ; SZ13-NEXT:    vgmf %v1, 1, 8 | 
 | ; SZ13-NEXT:    aebr %f1, %f0 | 
 | ; SZ13-NEXT:    vlr %v24, %v1 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %add = call <1 x float> @llvm.experimental.constrained.fadd.v1f32( | 
 |            <1 x float> <float 0x7FF0000000000000>, | 
 |            <1 x float> <float 1.0>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %add | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_fadd_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_fadd_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI16_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI16_1 | 
 | ; S390X-NEXT:    ldr %f2, %f0 | 
 | ; S390X-NEXT:    adb %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI16_2 | 
 | ; S390X-NEXT:    adb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fadd_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI16_0 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r1), 3 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI16_1 | 
 | ; SZ13-NEXT:    vl %v1, 0(%r1), 3 | 
 | ; SZ13-NEXT:    vfadb %v24, %v1, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %add = call <2 x double> @llvm.experimental.constrained.fadd.v2f64( | 
 |            <2 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>, | 
 |            <2 x double> <double 1.000000e+00, double 1.000000e-01>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %add | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_fadd_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_fadd_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI17_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    lzer %f4 | 
 | ; S390X-NEXT:    aebr %f4, %f0 | 
 | ; S390X-NEXT:    larl %r1, .LCPI17_1 | 
 | ; S390X-NEXT:    ler %f2, %f0 | 
 | ; S390X-NEXT:    aeb %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI17_2 | 
 | ; S390X-NEXT:    aeb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fadd_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vgbm %v0, 61440 | 
 | ; SZ13-NEXT:    vgmf %v2, 1, 1 | 
 | ; SZ13-NEXT:    vgmf %v3, 2, 8 | 
 | ; SZ13-NEXT:    lzer %f1 | 
 | ; SZ13-NEXT:    aebr %f1, %f0 | 
 | ; SZ13-NEXT:    aebr %f2, %f0 | 
 | ; SZ13-NEXT:    aebr %f3, %f0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v2, %v3 | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %add = call <3 x float> @llvm.experimental.constrained.fadd.v3f32( | 
 |            <3 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000, | 
 |                         float 0xFFFFFFFFE0000000>, | 
 |            <3 x float> <float 2.0, float 1.0, float 0.0>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %add | 
 | } | 
 |  | 
 | define void @constrained_vector_fadd_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_fadd_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI18_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f1, %f0 | 
 | ; S390X-NEXT:    ldr %f2, %f0 | 
 | ; S390X-NEXT:    adb %f0, 0(%r2) | 
 | ; S390X-NEXT:    adb %f2, 8(%r2) | 
 | ; S390X-NEXT:    adb %f1, 16(%r2) | 
 | ; S390X-NEXT:    std %f0, 0(%r2) | 
 | ; S390X-NEXT:    std %f2, 8(%r2) | 
 | ; S390X-NEXT:    std %f1, 16(%r2) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fadd_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI18_0 | 
 | ; SZ13-NEXT:    ld %f1, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI18_1 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    vl %v2, 0(%r1), 3 | 
 | ; SZ13-NEXT:    adb %f1, 16(%r2) | 
 | ; SZ13-NEXT:    vfadb %v0, %v2, %v0 | 
 | ; SZ13-NEXT:    vst %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    std %f1, 16(%r2) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %add = call <3 x double> @llvm.experimental.constrained.fadd.v3f64( | 
 |            <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF, | 
 |                          double 0x7FEFFFFFFFFFFFFF>, | 
 |            <3 x double> %b, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %add, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_fadd_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_fadd_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI19_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI19_1 | 
 | ; S390X-NEXT:    ldr %f6, %f0 | 
 | ; S390X-NEXT:    adb %f6, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI19_2 | 
 | ; S390X-NEXT:    ldr %f4, %f0 | 
 | ; S390X-NEXT:    adb %f4, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI19_3 | 
 | ; S390X-NEXT:    ldr %f2, %f0 | 
 | ; S390X-NEXT:    adb %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI19_4 | 
 | ; S390X-NEXT:    adb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fadd_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI19_0 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r1), 3 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI19_1 | 
 | ; SZ13-NEXT:    vl %v1, 0(%r1), 3 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI19_2 | 
 | ; SZ13-NEXT:    vfadb %v26, %v1, %v0 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r1), 3 | 
 | ; SZ13-NEXT:    vfadb %v24, %v1, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %add = call <4 x double> @llvm.experimental.constrained.fadd.v4f64( | 
 |            <4 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF, | 
 |                          double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>, | 
 |            <4 x double> <double 1.000000e+00, double 1.000000e-01, | 
 |                          double 2.000000e+00, double 2.000000e-01>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %add | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_fsub_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_fsub_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI20_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI20_1 | 
 | ; S390X-NEXT:    seb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fsub_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vgmf %v0, 2, 8 | 
 | ; SZ13-NEXT:    vgmf %v1, 1, 8 | 
 | ; SZ13-NEXT:    sebr %f1, %f0 | 
 | ; SZ13-NEXT:    vlr %v24, %v1 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %sub = call <1 x float> @llvm.experimental.constrained.fsub.v1f32( | 
 |            <1 x float> <float 0x7FF0000000000000>, | 
 |            <1 x float> <float 1.000000e+00>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %sub | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_fsub_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_fsub_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI21_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI21_1 | 
 | ; S390X-NEXT:    ldr %f2, %f0 | 
 | ; S390X-NEXT:    sdb %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI21_2 | 
 | ; S390X-NEXT:    sdb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fsub_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI21_0 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r1), 3 | 
 | ; SZ13-NEXT:    vgmg %v1, 12, 10 | 
 | ; SZ13-NEXT:    vfsdb %v24, %v1, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %sub = call <2 x double> @llvm.experimental.constrained.fsub.v2f64( | 
 |            <2 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF>, | 
 |            <2 x double> <double 1.000000e+00, double 1.000000e-01>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %sub | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_fsub_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_fsub_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI22_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    ler %f4, %f0 | 
 | ; S390X-NEXT:    larl %r1, .LCPI22_1 | 
 | ; S390X-NEXT:    ler %f2, %f0 | 
 | ; S390X-NEXT:    seb %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI22_2 | 
 | ; S390X-NEXT:    seb %f0, 0(%r1) | 
 | ; S390X-NEXT:    lzer %f1 | 
 | ; S390X-NEXT:    sebr %f4, %f1 | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fsub_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vgbm %v2, 61440 | 
 | ; SZ13-NEXT:    lzer %f1 | 
 | ; SZ13-NEXT:    sebr %f2, %f1 | 
 | ; SZ13-NEXT:    vgmf %v1, 1, 1 | 
 | ; SZ13-NEXT:    vgbm %v3, 61440 | 
 | ; SZ13-NEXT:    vgbm %v0, 61440 | 
 | ; SZ13-NEXT:    sebr %f3, %f1 | 
 | ; SZ13-NEXT:    vgmf %v1, 2, 8 | 
 | ; SZ13-NEXT:    sebr %f0, %f1 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v3, %v0 | 
 | ; SZ13-NEXT:    vrepf %v1, %v2, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %sub = call <3 x float> @llvm.experimental.constrained.fsub.v3f32( | 
 |            <3 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000, | 
 |                         float 0xFFFFFFFFE0000000>, | 
 |            <3 x float> <float 2.0, float 1.0, float 0.0>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %sub | 
 | } | 
 |  | 
 | define void @constrained_vector_fsub_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_fsub_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI23_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f1, %f0 | 
 | ; S390X-NEXT:    ldr %f2, %f0 | 
 | ; S390X-NEXT:    sdb %f0, 0(%r2) | 
 | ; S390X-NEXT:    sdb %f2, 8(%r2) | 
 | ; S390X-NEXT:    sdb %f1, 16(%r2) | 
 | ; S390X-NEXT:    std %f0, 0(%r2) | 
 | ; S390X-NEXT:    std %f2, 8(%r2) | 
 | ; S390X-NEXT:    std %f1, 16(%r2) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fsub_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    vgmg %v2, 12, 10 | 
 | ; SZ13-NEXT:    sdb %f2, 16(%r2) | 
 | ; SZ13-NEXT:    vgmg %v1, 12, 10 | 
 | ; SZ13-NEXT:    vfsdb %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vst %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    std %f2, 16(%r2) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %sub = call <3 x double> @llvm.experimental.constrained.fsub.v3f64( | 
 |            <3 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF, | 
 |                          double 0xFFEFFFFFFFFFFFFF>, | 
 |            <3 x double> %b, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %sub, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_fsub_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_fsub_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI24_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI24_1 | 
 | ; S390X-NEXT:    ldr %f6, %f0 | 
 | ; S390X-NEXT:    sdb %f6, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI24_2 | 
 | ; S390X-NEXT:    ldr %f4, %f0 | 
 | ; S390X-NEXT:    sdb %f4, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI24_3 | 
 | ; S390X-NEXT:    ldr %f2, %f0 | 
 | ; S390X-NEXT:    sdb %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI24_4 | 
 | ; S390X-NEXT:    sdb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fsub_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI24_0 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r1), 3 | 
 | ; SZ13-NEXT:    vgmg %v1, 12, 10 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI24_1 | 
 | ; SZ13-NEXT:    vfsdb %v26, %v1, %v0 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r1), 3 | 
 | ; SZ13-NEXT:    vfsdb %v24, %v1, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %sub = call <4 x double> @llvm.experimental.constrained.fsub.v4f64( | 
 |            <4 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF, | 
 |                          double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF>, | 
 |            <4 x double> <double 1.000000e+00, double 1.000000e-01, | 
 |                          double 2.000000e+00, double 2.000000e-01>, | 
 |            metadata !"round.dynamic", | 
 |            metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %sub | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_sqrt_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_sqrt_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI25_0 | 
 | ; S390X-NEXT:    sqeb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_sqrt_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI25_0 | 
 | ; SZ13-NEXT:    sqeb %f0, 0(%r1) | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %sqrt = call <1 x float> @llvm.experimental.constrained.sqrt.v1f32( | 
 |                               <1 x float> <float 42.0>, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %sqrt | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_sqrt_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_sqrt_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI26_0 | 
 | ; S390X-NEXT:    sqdb %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI26_1 | 
 | ; S390X-NEXT:    sqdb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_sqrt_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI26_0 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r1), 3 | 
 | ; SZ13-NEXT:    vfsqdb %v24, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %sqrt = call <2 x double> @llvm.experimental.constrained.sqrt.v2f64( | 
 |                               <2 x double> <double 42.0, double 42.1>, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %sqrt | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_sqrt_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_sqrt_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI27_0 | 
 | ; S390X-NEXT:    sqeb %f4, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI27_1 | 
 | ; S390X-NEXT:    sqeb %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI27_2 | 
 | ; S390X-NEXT:    sqeb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_sqrt_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI27_0 | 
 | ; SZ13-NEXT:    sqeb %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI27_1 | 
 | ; SZ13-NEXT:    vrepf %v0, %v0, 0 | 
 | ; SZ13-NEXT:    sqeb %f1, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI27_2 | 
 | ; SZ13-NEXT:    sqeb %f2, 0(%r1) | 
 | ; SZ13-NEXT:    vmrhf %v1, %v1, %v2 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v1, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %sqrt = call <3 x float> @llvm.experimental.constrained.sqrt.v3f32( | 
 |                               <3 x float> <float 42.0, float 43.0, float 44.0>, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %sqrt | 
 | } | 
 |  | 
 | define void @constrained_vector_sqrt_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_sqrt_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    sqdb %f0, 0(%r2) | 
 | ; S390X-NEXT:    sqdb %f1, 8(%r2) | 
 | ; S390X-NEXT:    sqdb %f2, 16(%r2) | 
 | ; S390X-NEXT:    std %f0, 0(%r2) | 
 | ; S390X-NEXT:    std %f1, 8(%r2) | 
 | ; S390X-NEXT:    std %f2, 16(%r2) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_sqrt_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    sqdb %f1, 16(%r2) | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    std %f1, 16(%r2) | 
 | ; SZ13-NEXT:    vfsqdb %v0, %v0 | 
 | ; SZ13-NEXT:    vst %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %sqrt = call <3 x double> @llvm.experimental.constrained.sqrt.v3f64( | 
 |                           <3 x double> %b, | 
 |                           metadata !"round.dynamic", | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %sqrt, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_sqrt_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_sqrt_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI29_0 | 
 | ; S390X-NEXT:    sqdb %f6, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI29_1 | 
 | ; S390X-NEXT:    sqdb %f4, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI29_2 | 
 | ; S390X-NEXT:    sqdb %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI29_3 | 
 | ; S390X-NEXT:    sqdb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_sqrt_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI29_0 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r1), 3 | 
 | ; SZ13-NEXT:    vfsqdb %v26, %v0 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI29_1 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r1), 3 | 
 | ; SZ13-NEXT:    vfsqdb %v24, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 |  entry: | 
 |   %sqrt = call <4 x double> @llvm.experimental.constrained.sqrt.v4f64( | 
 |                               <4 x double> <double 42.0, double 42.1, | 
 |                                             double 42.2, double 42.3>, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %sqrt | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_pow_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_pow_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    larl %r1, .LCPI30_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI30_1 | 
 | ; S390X-NEXT:    le %f2, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, powf@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_pow_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -160 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI30_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI30_1 | 
 | ; SZ13-NEXT:    lde %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, powf@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %pow = call <1 x float> @llvm.experimental.constrained.pow.v1f32( | 
 |                              <1 x float> <float 42.0>, | 
 |                              <1 x float> <float 3.0>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %pow | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_pow_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_pow_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    larl %r1, .LCPI31_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI31_1 | 
 | ; S390X-NEXT:    ld %f8, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, pow@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI31_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, pow@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f9 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_pow_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -184 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; SZ13-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI31_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI31_1 | 
 | ; SZ13-NEXT:    ld %f8, 0(%r1) | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, pow@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI31_2 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, pow@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %pow = call <2 x double> @llvm.experimental.constrained.pow.v2f64( | 
 |                              <2 x double> <double 42.1, double 42.2>, | 
 |                              <2 x double> <double 3.0, double 3.0>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %pow | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_pow_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_pow_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    larl %r1, .LCPI32_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI32_1 | 
 | ; S390X-NEXT:    le %f8, 0(%r1) | 
 | ; S390X-NEXT:    ler %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, powf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI32_2 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    ler %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, powf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI32_3 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f10, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    ler %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, powf@PLT | 
 | ; S390X-NEXT:    ler %f2, %f10 | 
 | ; S390X-NEXT:    ler %f4, %f9 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_pow_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -200 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 360 | 
 | ; SZ13-NEXT:    std %f8, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI32_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI32_1 | 
 | ; SZ13-NEXT:    lde %f8, 0(%r1) | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, powf@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI32_2 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, powf@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI32_3 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, powf@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    ld %f8, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 312(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %pow = call <3 x float> @llvm.experimental.constrained.pow.v3f32( | 
 |                              <3 x float> <float 42.0, float 43.0, float 44.0>, | 
 |                              <3 x float> <float 3.0, float 3.0, float 3.0>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %pow | 
 | } | 
 |  | 
 | define void @constrained_vector_pow_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_pow_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -192 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; S390X-NEXT:    std %f8, 184(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f11, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    .cfi_offset %f11, -192 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    larl %r1, .LCPI33_0 | 
 | ; S390X-NEXT:    ld %f9, 0(%r1) | 
 | ; S390X-NEXT:    ld %f10, 8(%r2) | 
 | ; S390X-NEXT:    ldr %f2, %f9 | 
 | ; S390X-NEXT:    brasl %r14, pow@PLT | 
 | ; S390X-NEXT:    ldr %f11, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f10 | 
 | ; S390X-NEXT:    ldr %f2, %f9 | 
 | ; S390X-NEXT:    brasl %r14, pow@PLT | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    ldr %f2, %f9 | 
 | ; S390X-NEXT:    brasl %r14, pow@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f10, 8(%r13) | 
 | ; S390X-NEXT:    std %f11, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 184(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f11, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_pow_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r13, -56 | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -208 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 368 | 
 | ; SZ13-NEXT:    std %f8, 200(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    std %f9, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    .cfi_offset %f9, -176 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI33_0 | 
 | ; SZ13-NEXT:    ld %f9, 0(%r1) | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f8, 16(%r2) | 
 | ; SZ13-NEXT:    ldr %f2, %f9 | 
 | ; SZ13-NEXT:    lgr %r13, %r2 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, pow@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vl %v0, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    ldr %f2, %f9 | 
 | ; SZ13-NEXT:    vrepg %v0, %v0, 1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, pow@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ldr %f0, %f8 | 
 | ; SZ13-NEXT:    ldr %f2, %f9 | 
 | ; SZ13-NEXT:    brasl %r14, pow@PLT | 
 | ; SZ13-NEXT:    mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload | 
 | ; SZ13-NEXT:    ld %f8, 200(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    ld %f9, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    std %f0, 16(%r13) | 
 | ; SZ13-NEXT:    lmg %r13, %r15, 312(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %pow = call <3 x double> @llvm.experimental.constrained.pow.v3f64( | 
 |                           <3 x double> %b, | 
 |                           <3 x double> <double 3.0, double 3.0, double 3.0>, | 
 |                           metadata !"round.dynamic", | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %pow, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_pow_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_pow_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -192 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; S390X-NEXT:    std %f8, 184(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f11, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    .cfi_offset %f11, -192 | 
 | ; S390X-NEXT:    larl %r1, .LCPI34_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI34_1 | 
 | ; S390X-NEXT:    ld %f8, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, pow@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI34_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, pow@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI34_3 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, pow@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI34_4 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f11, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, pow@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f11 | 
 | ; S390X-NEXT:    ldr %f4, %f10 | 
 | ; S390X-NEXT:    ldr %f6, %f9 | 
 | ; S390X-NEXT:    ld %f8, 184(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f11, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_pow_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -200 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 360 | 
 | ; SZ13-NEXT:    std %f8, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI34_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI34_1 | 
 | ; SZ13-NEXT:    ld %f8, 0(%r1) | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, pow@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI34_2 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, pow@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v0, %v1 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI34_3 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, pow@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI34_4 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, pow@PLT | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vl %v24, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    ld %f8, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v26, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 312(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %pow = call <4 x double> @llvm.experimental.constrained.pow.v4f64( | 
 |                              <4 x double> <double 42.1, double 42.2, | 
 |                                            double 42.3, double 42.4>, | 
 |                              <4 x double> <double 3.0, double 3.0, | 
 |                                            double 3.0, double 3.0>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %pow | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_powi_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_powi_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    larl %r1, .LCPI35_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    lghi %r2, 3 | 
 | ; S390X-NEXT:    brasl %r14, __powisf2@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_powi_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -160 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI35_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    lghi %r2, 3 | 
 | ; SZ13-NEXT:    brasl %r14, __powisf2@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %powi = call <1 x float> @llvm.experimental.constrained.powi.v1f32( | 
 |                               <1 x float> <float 42.0>, | 
 |                               i32 3, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %powi | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_powi_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_powi_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -168 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 328 | 
 | ; S390X-NEXT:    std %f8, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    larl %r1, .LCPI36_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    lghi %r2, 3 | 
 | ; S390X-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI36_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    lghi %r2, 3 | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    ld %f8, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 280(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_powi_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -176 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI36_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    lghi %r2, 3 | 
 | ; SZ13-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI36_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    lghi %r2, 3 | 
 | ; SZ13-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %powi = call <2 x double> @llvm.experimental.constrained.powi.v2f64( | 
 |                               <2 x double> <double 42.1, double 42.2>, | 
 |                               i32 3, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %powi | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_powi_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_powi_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    larl %r1, .LCPI37_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    lghi %r2, 3 | 
 | ; S390X-NEXT:    brasl %r14, __powisf2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI37_1 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    lghi %r2, 3 | 
 | ; S390X-NEXT:    ler %f8, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, __powisf2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI37_2 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    lghi %r2, 3 | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, __powisf2@PLT | 
 | ; S390X-NEXT:    ler %f2, %f9 | 
 | ; S390X-NEXT:    ler %f4, %f8 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_powi_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI37_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    lghi %r2, 3 | 
 | ; SZ13-NEXT:    brasl %r14, __powisf2@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI37_1 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    lghi %r2, 3 | 
 | ; SZ13-NEXT:    brasl %r14, __powisf2@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI37_2 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    lghi %r2, 3 | 
 | ; SZ13-NEXT:    brasl %r14, __powisf2@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %powi = call <3 x float> @llvm.experimental.constrained.powi.v3f32( | 
 |                               <3 x float> <float 42.0, float 43.0, float 44.0>, | 
 |                               i32 3, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %powi | 
 | } | 
 |  | 
 | define void @constrained_vector_powi_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_powi_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    larl %r1, .LCPI38_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    lghi %r2, 3 | 
 | ; S390X-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI38_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    lghi %r2, 3 | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI38_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    lghi %r2, 3 | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; S390X-NEXT:    std %f0, 16(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f8, 0(%r13) | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 280(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_powi_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r13, -56 | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -176 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI38_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    lgr %r13, %r2 | 
 | ; SZ13-NEXT:    lghi %r2, 3 | 
 | ; SZ13-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI38_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    lghi %r2, 3 | 
 | ; SZ13-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v0, %v1 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI38_2 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    lghi %r2, 3 | 
 | ; SZ13-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; SZ13-NEXT:    mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload | 
 | ; SZ13-NEXT:    std %f0, 16(%r13) | 
 | ; SZ13-NEXT:    lmg %r13, %r15, 280(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %powi = call <3 x double> @llvm.experimental.constrained.powi.v3f64( | 
 |                           <3 x double> <double 42.0, double 42.1, double 42.2>, | 
 |                           i32 3, | 
 |                           metadata !"round.dynamic", | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %powi, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_powi_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_powi_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    larl %r1, .LCPI39_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    lghi %r2, 3 | 
 | ; S390X-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI39_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    lghi %r2, 3 | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI39_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    lghi %r2, 3 | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI39_3 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    lghi %r2, 3 | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f10 | 
 | ; S390X-NEXT:    ldr %f4, %f9 | 
 | ; S390X-NEXT:    ldr %f6, %f8 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_powi_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI39_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    lghi %r2, 3 | 
 | ; SZ13-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI39_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    lghi %r2, 3 | 
 | ; SZ13-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v0, %v1 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI39_2 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    lghi %r2, 3 | 
 | ; SZ13-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI39_3 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    lghi %r2, 3 | 
 | ; SZ13-NEXT:    brasl %r14, __powidf2@PLT | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vl %v24, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v26, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %powi = call <4 x double> @llvm.experimental.constrained.powi.v4f64( | 
 |                               <4 x double> <double 42.1, double 42.2, | 
 |                                             double 42.3, double 42.4>, | 
 |                               i32 3, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %powi | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_sin_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_sin_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    larl %r1, .LCPI40_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, sinf@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_sin_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -160 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI40_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, sinf@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %sin = call <1 x float> @llvm.experimental.constrained.sin.v1f32( | 
 |                              <1 x float> <float 42.0>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %sin | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_sin_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_sin_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -168 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 328 | 
 | ; S390X-NEXT:    std %f8, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    larl %r1, .LCPI41_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, sin@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI41_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, sin@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    ld %f8, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 280(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_sin_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -176 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI41_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, sin@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI41_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, sin@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %sin = call <2 x double> @llvm.experimental.constrained.sin.v2f64( | 
 |                              <2 x double> <double 42.0, double 42.1>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %sin | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_sin_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_sin_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    larl %r1, .LCPI42_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, sinf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI42_1 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f8, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, sinf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI42_2 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, sinf@PLT | 
 | ; S390X-NEXT:    ler %f2, %f9 | 
 | ; S390X-NEXT:    ler %f4, %f8 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_sin_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI42_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, sinf@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI42_1 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, sinf@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI42_2 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, sinf@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %sin = call <3 x float> @llvm.experimental.constrained.sin.v3f32( | 
 |                               <3 x float> <float 42.0, float 43.0, float 44.0>, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %sin | 
 | } | 
 |  | 
 | define void @constrained_vector_sin_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_sin_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    brasl %r14, sin@PLT | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, sin@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, sin@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f10, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_sin_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r13, -56 | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -200 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 360 | 
 | ; SZ13-NEXT:    std %f8, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f8, 16(%r2) | 
 | ; SZ13-NEXT:    lgr %r13, %r2 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, sin@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vl %v0, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepg %v0, %v0, 1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, sin@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ldr %f0, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, sin@PLT | 
 | ; SZ13-NEXT:    mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload | 
 | ; SZ13-NEXT:    ld %f8, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    std %f0, 16(%r13) | 
 | ; SZ13-NEXT:    lmg %r13, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %sin = call <3 x double> @llvm.experimental.constrained.sin.v3f64( | 
 |                           <3 x double> %b, | 
 |                           metadata !"round.dynamic", | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %sin, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_sin_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_sin_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    larl %r1, .LCPI44_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, sin@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI44_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, sin@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI44_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, sin@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI44_3 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, sin@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f10 | 
 | ; S390X-NEXT:    ldr %f4, %f9 | 
 | ; S390X-NEXT:    ldr %f6, %f8 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_sin_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI44_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, sin@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI44_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, sin@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v0, %v1 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI44_2 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, sin@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI44_3 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, sin@PLT | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vl %v24, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v26, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %sin = call <4 x double> @llvm.experimental.constrained.sin.v4f64( | 
 |                              <4 x double> <double 42.0, double 42.1, | 
 |                                            double 42.2, double 42.3>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %sin | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_cos_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_cos_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    larl %r1, .LCPI45_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, cosf@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_cos_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -160 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI45_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, cosf@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %cos = call <1 x float> @llvm.experimental.constrained.cos.v1f32( | 
 |                              <1 x float> <float 42.0>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %cos | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_cos_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_cos_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -168 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 328 | 
 | ; S390X-NEXT:    std %f8, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    larl %r1, .LCPI46_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, cos@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI46_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, cos@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    ld %f8, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 280(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_cos_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -176 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI46_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, cos@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI46_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, cos@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %cos = call <2 x double> @llvm.experimental.constrained.cos.v2f64( | 
 |                              <2 x double> <double 42.0, double 42.1>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %cos | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_cos_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_cos_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    larl %r1, .LCPI47_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, cosf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI47_1 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f8, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, cosf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI47_2 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, cosf@PLT | 
 | ; S390X-NEXT:    ler %f2, %f9 | 
 | ; S390X-NEXT:    ler %f4, %f8 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_cos_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI47_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, cosf@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI47_1 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, cosf@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI47_2 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, cosf@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %cos = call <3 x float> @llvm.experimental.constrained.cos.v3f32( | 
 |                               <3 x float> <float 42.0, float 43.0, float 44.0>, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %cos | 
 | } | 
 |  | 
 | define void @constrained_vector_cos_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_cos_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    brasl %r14, cos@PLT | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, cos@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, cos@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f10, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_cos_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r13, -56 | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -200 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 360 | 
 | ; SZ13-NEXT:    std %f8, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f8, 16(%r2) | 
 | ; SZ13-NEXT:    lgr %r13, %r2 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, cos@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vl %v0, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepg %v0, %v0, 1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, cos@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ldr %f0, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, cos@PLT | 
 | ; SZ13-NEXT:    mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload | 
 | ; SZ13-NEXT:    ld %f8, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    std %f0, 16(%r13) | 
 | ; SZ13-NEXT:    lmg %r13, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %cos = call <3 x double> @llvm.experimental.constrained.cos.v3f64( | 
 |                           <3 x double> %b, | 
 |                           metadata !"round.dynamic", | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %cos, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_cos_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_cos_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    larl %r1, .LCPI49_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, cos@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI49_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, cos@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI49_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, cos@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI49_3 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, cos@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f10 | 
 | ; S390X-NEXT:    ldr %f4, %f9 | 
 | ; S390X-NEXT:    ldr %f6, %f8 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_cos_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI49_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, cos@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI49_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, cos@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v0, %v1 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI49_2 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, cos@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI49_3 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, cos@PLT | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vl %v24, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v26, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %cos = call <4 x double> @llvm.experimental.constrained.cos.v4f64( | 
 |                              <4 x double> <double 42.0, double 42.1, | 
 |                                            double 42.2, double 42.3>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %cos | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_exp_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_exp_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    larl %r1, .LCPI50_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, expf@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_exp_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -160 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI50_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, expf@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %exp = call <1 x float> @llvm.experimental.constrained.exp.v1f32( | 
 |                              <1 x float> <float 42.0>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %exp | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_exp_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_exp_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -168 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 328 | 
 | ; S390X-NEXT:    std %f8, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    larl %r1, .LCPI51_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, exp@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI51_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, exp@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    ld %f8, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 280(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_exp_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -176 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI51_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, exp@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI51_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, exp@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %exp = call <2 x double> @llvm.experimental.constrained.exp.v2f64( | 
 |                              <2 x double> <double 42.0, double 42.1>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %exp | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_exp_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_exp_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    larl %r1, .LCPI52_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, expf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI52_1 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f8, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, expf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI52_2 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, expf@PLT | 
 | ; S390X-NEXT:    ler %f2, %f9 | 
 | ; S390X-NEXT:    ler %f4, %f8 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_exp_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI52_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, expf@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI52_1 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, expf@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI52_2 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, expf@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %exp = call <3 x float> @llvm.experimental.constrained.exp.v3f32( | 
 |                               <3 x float> <float 42.0, float 43.0, float 44.0>, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %exp | 
 | } | 
 |  | 
 | define void @constrained_vector_exp_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_exp_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    brasl %r14, exp@PLT | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, exp@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, exp@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f10, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_exp_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r13, -56 | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -200 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 360 | 
 | ; SZ13-NEXT:    std %f8, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f8, 16(%r2) | 
 | ; SZ13-NEXT:    lgr %r13, %r2 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, exp@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vl %v0, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepg %v0, %v0, 1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, exp@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ldr %f0, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, exp@PLT | 
 | ; SZ13-NEXT:    mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload | 
 | ; SZ13-NEXT:    ld %f8, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    std %f0, 16(%r13) | 
 | ; SZ13-NEXT:    lmg %r13, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %exp = call <3 x double> @llvm.experimental.constrained.exp.v3f64( | 
 |                           <3 x double> %b, | 
 |                           metadata !"round.dynamic", | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %exp, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_exp_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_exp_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    larl %r1, .LCPI54_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, exp@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI54_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, exp@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI54_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, exp@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI54_3 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, exp@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f10 | 
 | ; S390X-NEXT:    ldr %f4, %f9 | 
 | ; S390X-NEXT:    ldr %f6, %f8 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_exp_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI54_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, exp@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI54_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, exp@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v0, %v1 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI54_2 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, exp@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI54_3 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, exp@PLT | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vl %v24, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v26, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %exp = call <4 x double> @llvm.experimental.constrained.exp.v4f64( | 
 |                              <4 x double> <double 42.0, double 42.1, | 
 |                                            double 42.2, double 42.3>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %exp | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_exp2_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_exp2_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    larl %r1, .LCPI55_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, exp2f@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_exp2_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -160 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI55_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, exp2f@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %exp2 = call <1 x float> @llvm.experimental.constrained.exp2.v1f32( | 
 |                              <1 x float> <float 42.0>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %exp2 | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_exp2_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_exp2_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -168 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 328 | 
 | ; S390X-NEXT:    std %f8, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    larl %r1, .LCPI56_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, exp2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI56_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, exp2@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    ld %f8, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 280(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_exp2_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -176 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI56_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, exp2@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI56_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, exp2@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %exp2 = call <2 x double> @llvm.experimental.constrained.exp2.v2f64( | 
 |                               <2 x double> <double 42.1, double 42.0>, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %exp2 | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_exp2_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_exp2_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    larl %r1, .LCPI57_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, exp2f@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI57_1 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f8, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, exp2f@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI57_2 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, exp2f@PLT | 
 | ; S390X-NEXT:    ler %f2, %f9 | 
 | ; S390X-NEXT:    ler %f4, %f8 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_exp2_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI57_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, exp2f@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI57_1 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, exp2f@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI57_2 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, exp2f@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %exp2 = call <3 x float> @llvm.experimental.constrained.exp2.v3f32( | 
 |                               <3 x float> <float 42.0, float 43.0, float 44.0>, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %exp2 | 
 | } | 
 |  | 
 | define void @constrained_vector_exp2_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_exp2_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    brasl %r14, exp2@PLT | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, exp2@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, exp2@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f10, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_exp2_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r13, -56 | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -200 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 360 | 
 | ; SZ13-NEXT:    std %f8, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f8, 16(%r2) | 
 | ; SZ13-NEXT:    lgr %r13, %r2 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, exp2@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vl %v0, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepg %v0, %v0, 1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, exp2@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ldr %f0, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, exp2@PLT | 
 | ; SZ13-NEXT:    mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload | 
 | ; SZ13-NEXT:    ld %f8, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    std %f0, 16(%r13) | 
 | ; SZ13-NEXT:    lmg %r13, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %exp2 = call <3 x double> @llvm.experimental.constrained.exp2.v3f64( | 
 |                           <3 x double> %b, | 
 |                           metadata !"round.dynamic", | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %exp2, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_exp2_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_exp2_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    larl %r1, .LCPI59_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, exp2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI59_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, exp2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI59_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, exp2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI59_3 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, exp2@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f10 | 
 | ; S390X-NEXT:    ldr %f4, %f9 | 
 | ; S390X-NEXT:    ldr %f6, %f8 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_exp2_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI59_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, exp2@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI59_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, exp2@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v0, %v1 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI59_2 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, exp2@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI59_3 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, exp2@PLT | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vl %v24, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v26, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %exp2 = call <4 x double> @llvm.experimental.constrained.exp2.v4f64( | 
 |                               <4 x double> <double 42.1, double 42.2, | 
 |                                             double 42.3, double 42.4>, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %exp2 | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_log_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_log_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    larl %r1, .LCPI60_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, logf@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_log_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -160 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI60_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, logf@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %log = call <1 x float> @llvm.experimental.constrained.log.v1f32( | 
 |                              <1 x float> <float 42.0>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %log | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_log_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_log_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -168 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 328 | 
 | ; S390X-NEXT:    std %f8, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    larl %r1, .LCPI61_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, log@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI61_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, log@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    ld %f8, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 280(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_log_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -176 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI61_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI61_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %log = call <2 x double> @llvm.experimental.constrained.log.v2f64( | 
 |                              <2 x double> <double 42.0, double 42.1>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %log | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_log_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_log_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    larl %r1, .LCPI62_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, logf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI62_1 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f8, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, logf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI62_2 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, logf@PLT | 
 | ; S390X-NEXT:    ler %f2, %f9 | 
 | ; S390X-NEXT:    ler %f4, %f8 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_log_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI62_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, logf@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI62_1 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, logf@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI62_2 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, logf@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %log = call <3 x float> @llvm.experimental.constrained.log.v3f32( | 
 |                               <3 x float> <float 42.0, float 43.0, float 44.0>, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %log | 
 | } | 
 |  | 
 | define void @constrained_vector_log_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_log_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    brasl %r14, log@PLT | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, log@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, log@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f10, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_log_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r13, -56 | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -200 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 360 | 
 | ; SZ13-NEXT:    std %f8, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f8, 16(%r2) | 
 | ; SZ13-NEXT:    lgr %r13, %r2 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, log@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vl %v0, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepg %v0, %v0, 1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, log@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ldr %f0, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, log@PLT | 
 | ; SZ13-NEXT:    mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload | 
 | ; SZ13-NEXT:    ld %f8, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    std %f0, 16(%r13) | 
 | ; SZ13-NEXT:    lmg %r13, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %log = call <3 x double> @llvm.experimental.constrained.log.v3f64( | 
 |                           <3 x double> %b, | 
 |                           metadata !"round.dynamic", | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %log, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_log_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_log_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    larl %r1, .LCPI64_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, log@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI64_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, log@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI64_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, log@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI64_3 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, log@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f10 | 
 | ; S390X-NEXT:    ldr %f4, %f9 | 
 | ; S390X-NEXT:    ldr %f6, %f8 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_log_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI64_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI64_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v0, %v1 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI64_2 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI64_3 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log@PLT | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vl %v24, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v26, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %log = call <4 x double> @llvm.experimental.constrained.log.v4f64( | 
 |                              <4 x double> <double 42.0, double 42.1, | 
 |                                            double 42.2, double 42.3>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %log | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_log10_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_log10_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    larl %r1, .LCPI65_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, log10f@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_log10_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -160 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI65_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log10f@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %log10 = call <1 x float> @llvm.experimental.constrained.log10.v1f32( | 
 |                              <1 x float> <float 42.0>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %log10 | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_log10_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_log10_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -168 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 328 | 
 | ; S390X-NEXT:    std %f8, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    larl %r1, .LCPI66_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, log10@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI66_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, log10@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    ld %f8, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 280(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_log10_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -176 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI66_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log10@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI66_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log10@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %log10 = call <2 x double> @llvm.experimental.constrained.log10.v2f64( | 
 |                                <2 x double> <double 42.0, double 42.1>, | 
 |                                metadata !"round.dynamic", | 
 |                                metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %log10 | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_log10_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_log10_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    larl %r1, .LCPI67_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, log10f@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI67_1 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f8, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, log10f@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI67_2 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, log10f@PLT | 
 | ; S390X-NEXT:    ler %f2, %f9 | 
 | ; S390X-NEXT:    ler %f4, %f8 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_log10_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI67_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log10f@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI67_1 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log10f@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI67_2 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log10f@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %log10 = call <3 x float> @llvm.experimental.constrained.log10.v3f32( | 
 |                               <3 x float> <float 42.0, float 43.0, float 44.0>, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %log10 | 
 | } | 
 |  | 
 | define void @constrained_vector_log10_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_log10_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    brasl %r14, log10@PLT | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, log10@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, log10@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f10, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_log10_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r13, -56 | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -200 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 360 | 
 | ; SZ13-NEXT:    std %f8, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f8, 16(%r2) | 
 | ; SZ13-NEXT:    lgr %r13, %r2 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, log10@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vl %v0, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepg %v0, %v0, 1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, log10@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ldr %f0, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, log10@PLT | 
 | ; SZ13-NEXT:    mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload | 
 | ; SZ13-NEXT:    ld %f8, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    std %f0, 16(%r13) | 
 | ; SZ13-NEXT:    lmg %r13, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %log10 = call <3 x double> @llvm.experimental.constrained.log10.v3f64( | 
 |                           <3 x double> %b, | 
 |                           metadata !"round.dynamic", | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %log10, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_log10_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_log10_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    larl %r1, .LCPI69_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, log10@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI69_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, log10@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI69_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, log10@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI69_3 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, log10@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f10 | 
 | ; S390X-NEXT:    ldr %f4, %f9 | 
 | ; S390X-NEXT:    ldr %f6, %f8 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_log10_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI69_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log10@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI69_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log10@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v0, %v1 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI69_2 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log10@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI69_3 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log10@PLT | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vl %v24, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v26, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %log10 = call <4 x double> @llvm.experimental.constrained.log10.v4f64( | 
 |                                <4 x double> <double 42.0, double 42.1, | 
 |                                              double 42.2, double 42.3>, | 
 |                                metadata !"round.dynamic", | 
 |                                metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %log10 | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_log2_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_log2_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    larl %r1, .LCPI70_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, log2f@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_log2_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -160 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI70_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log2f@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %log2 = call <1 x float> @llvm.experimental.constrained.log2.v1f32( | 
 |                              <1 x float> <float 42.0>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %log2 | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_log2_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_log2_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -168 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 328 | 
 | ; S390X-NEXT:    std %f8, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    larl %r1, .LCPI71_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, log2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI71_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, log2@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    ld %f8, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 280(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_log2_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -176 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI71_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log2@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI71_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log2@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %log2 = call <2 x double> @llvm.experimental.constrained.log2.v2f64( | 
 |                               <2 x double> <double 42.0, double 42.1>, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %log2 | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_log2_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_log2_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    larl %r1, .LCPI72_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, log2f@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI72_1 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f8, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, log2f@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI72_2 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, log2f@PLT | 
 | ; S390X-NEXT:    ler %f2, %f9 | 
 | ; S390X-NEXT:    ler %f4, %f8 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_log2_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI72_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log2f@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI72_1 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log2f@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI72_2 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log2f@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %log2 = call <3 x float> @llvm.experimental.constrained.log2.v3f32( | 
 |                               <3 x float> <float 42.0, float 43.0, float 44.0>, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %log2 | 
 | } | 
 |  | 
 | define void @constrained_vector_log2_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_log2_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    brasl %r14, log2@PLT | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, log2@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, log2@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f10, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_log2_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r13, -56 | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -200 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 360 | 
 | ; SZ13-NEXT:    std %f8, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f8, 16(%r2) | 
 | ; SZ13-NEXT:    lgr %r13, %r2 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, log2@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vl %v0, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepg %v0, %v0, 1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, log2@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ldr %f0, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, log2@PLT | 
 | ; SZ13-NEXT:    mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload | 
 | ; SZ13-NEXT:    ld %f8, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    std %f0, 16(%r13) | 
 | ; SZ13-NEXT:    lmg %r13, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %log2 = call <3 x double> @llvm.experimental.constrained.log2.v3f64( | 
 |                           <3 x double> %b, | 
 |                           metadata !"round.dynamic", | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %log2, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_log2_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_log2_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    larl %r1, .LCPI74_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, log2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI74_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, log2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI74_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, log2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI74_3 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, log2@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f10 | 
 | ; S390X-NEXT:    ldr %f4, %f9 | 
 | ; S390X-NEXT:    ldr %f6, %f8 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_log2_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI74_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log2@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI74_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log2@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v0, %v1 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI74_2 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log2@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI74_3 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, log2@PLT | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vl %v24, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v26, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %log2 = call <4 x double> @llvm.experimental.constrained.log2.v4f64( | 
 |                               <4 x double> <double 42.0, double 42.1, | 
 |                                             double 42.2, double 42.3>, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %log2 | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_rint_v1f32(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_rint_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    le %f0, 0(%r2) | 
 | ; S390X-NEXT:    fiebr %f0, 0, %f0 | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_rint_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    lde %f0, 0(%r2) | 
 | ; SZ13-NEXT:    fiebr %f0, 0, %f0 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <1 x float>, ptr %a | 
 |   %rint = call <1 x float> @llvm.experimental.constrained.rint.v1f32( | 
 |                              <1 x float> %b, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %rint | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_rint_v2f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_rint_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    ld %f0, 8(%r2) | 
 | ; S390X-NEXT:    ld %f1, 0(%r2) | 
 | ; S390X-NEXT:    fidbr %f2, 0, %f0 | 
 | ; S390X-NEXT:    fidbr %f0, 0, %f1 | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_rint_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 3 | 
 | ; SZ13-NEXT:    vfidb %v24, %v0, 0, 0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <2 x double>, ptr %a | 
 |   %rint = call <2 x double> @llvm.experimental.constrained.rint.v2f64( | 
 |                         <2 x double> %b, | 
 |                         metadata !"round.dynamic", | 
 |                         metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %rint | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_rint_v3f32(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_rint_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    lg %r0, 0(%r2) | 
 | ; S390X-NEXT:    risbg %r1, %r0, 0, 159, 0 | 
 | ; S390X-NEXT:    le %f0, 8(%r2) | 
 | ; S390X-NEXT:    ldgr %f1, %r1 | 
 | ; S390X-NEXT:    sllg %r0, %r0, 32 | 
 | ; S390X-NEXT:    ldgr %f2, %r0 | 
 | ; S390X-NEXT:    fiebr %f4, 0, %f0 | 
 | ; S390X-NEXT:    fiebr %f2, 0, %f2 | 
 | ; S390X-NEXT:    fiebr %f0, 0, %f1 | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_rint_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    vrepf %v1, %v0, 2 | 
 | ; SZ13-NEXT:    vrepf %v2, %v0, 1 | 
 | ; SZ13-NEXT:    fiebr %f1, 0, %f1 | 
 | ; SZ13-NEXT:    fiebr %f2, 0, %f2 | 
 | ; SZ13-NEXT:    fiebr %f0, 0, %f0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v0, %v2 | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    br %r14 | 
 |  entry: | 
 |   %b = load <3 x float>, ptr %a | 
 |   %rint = call <3 x float> @llvm.experimental.constrained.rint.v3f32( | 
 |                               <3 x float> %b, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %rint | 
 | } | 
 |  | 
 | define void @constrained_vector_rint_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_rint_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    ld %f1, 8(%r2) | 
 | ; S390X-NEXT:    ld %f2, 0(%r2) | 
 | ; S390X-NEXT:    fidbr %f0, 0, %f0 | 
 | ; S390X-NEXT:    fidbr %f1, 0, %f1 | 
 | ; S390X-NEXT:    fidbr %f2, 0, %f2 | 
 | ; S390X-NEXT:    std %f2, 0(%r2) | 
 | ; S390X-NEXT:    std %f1, 8(%r2) | 
 | ; S390X-NEXT:    std %f0, 16(%r2) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_rint_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f1, 16(%r2) | 
 | ; SZ13-NEXT:    vfidb %v0, %v0, 0, 0 | 
 | ; SZ13-NEXT:    fidbra %f1, 0, %f1, 0 | 
 | ; SZ13-NEXT:    vst %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    std %f1, 16(%r2) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %rint = call <3 x double> @llvm.experimental.constrained.rint.v3f64( | 
 |                           <3 x double> %b, | 
 |                           metadata !"round.dynamic", | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %rint, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_rint_v4f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_rint_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    ld %f0, 24(%r2) | 
 | ; S390X-NEXT:    ld %f1, 16(%r2) | 
 | ; S390X-NEXT:    ld %f2, 8(%r2) | 
 | ; S390X-NEXT:    ld %f3, 0(%r2) | 
 | ; S390X-NEXT:    fidbr %f6, 0, %f0 | 
 | ; S390X-NEXT:    fidbr %f4, 0, %f1 | 
 | ; S390X-NEXT:    fidbr %f2, 0, %f2 | 
 | ; S390X-NEXT:    fidbr %f0, 0, %f3 | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_rint_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 16(%r2), 4 | 
 | ; SZ13-NEXT:    vl %v1, 0(%r2), 4 | 
 | ; SZ13-NEXT:    vfidb %v24, %v1, 0, 0 | 
 | ; SZ13-NEXT:    vfidb %v26, %v0, 0, 0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <4 x double>, ptr %a | 
 |   %rint = call <4 x double> @llvm.experimental.constrained.rint.v4f64( | 
 |                         <4 x double> %b, | 
 |                         metadata !"round.dynamic", | 
 |                         metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %rint | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_nearbyint_v1f32(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_nearbyint_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    le %f0, 0(%r2) | 
 | ; S390X-NEXT:    brasl %r14, nearbyintf@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_nearbyint_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    lde %f0, 0(%r2) | 
 | ; SZ13-NEXT:    fiebra %f0, 0, %f0, 4 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <1 x float>, ptr %a | 
 |   %nearby = call <1 x float> @llvm.experimental.constrained.nearbyint.v1f32( | 
 |                                <1 x float> %b, | 
 |                                metadata !"round.dynamic", | 
 |                                metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %nearby | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_nearbyint_v2f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_nearbyint_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    ld %f0, 8(%r2) | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    brasl %r14, nearbyint@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, nearbyint@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f9 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_nearbyint_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 3 | 
 | ; SZ13-NEXT:    vfidb %v24, %v0, 4, 0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <2 x double>, ptr %a | 
 |   %nearby = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64( | 
 |                                 <2 x double> %b, | 
 |                                 metadata !"round.dynamic", | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %nearby | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_nearbyint_v3f32(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_nearbyint_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lg %r0, 0(%r2) | 
 | ; S390X-NEXT:    le %f0, 8(%r2) | 
 | ; S390X-NEXT:    risbg %r1, %r0, 0, 159, 0 | 
 | ; S390X-NEXT:    ldgr %f8, %r1 | 
 | ; S390X-NEXT:    sllg %r0, %r0, 32 | 
 | ; S390X-NEXT:    ldgr %f9, %r0 | 
 | ; S390X-NEXT:    brasl %r14, nearbyintf@PLT | 
 | ; S390X-NEXT:    ler %f10, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, nearbyintf@PLT | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, nearbyintf@PLT | 
 | ; S390X-NEXT:    ler %f2, %f9 | 
 | ; S390X-NEXT:    ler %f4, %f10 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_nearbyint_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    vrepf %v1, %v0, 2 | 
 | ; SZ13-NEXT:    vrepf %v2, %v0, 1 | 
 | ; SZ13-NEXT:    fiebra %f1, 0, %f1, 4 | 
 | ; SZ13-NEXT:    fiebra %f2, 0, %f2, 4 | 
 | ; SZ13-NEXT:    fiebra %f0, 0, %f0, 4 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v0, %v2 | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x float>, ptr %a | 
 |   %nearby = call <3 x float> @llvm.experimental.constrained.nearbyint.v3f32( | 
 |                               <3 x float> %b, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %nearby | 
 | } | 
 |  | 
 | define void @constrained_vector_nearbyint_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_nearbyint_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    brasl %r14, nearbyint@PLT | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, nearbyint@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, nearbyint@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f10, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_nearbyint_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f1, 16(%r2) | 
 | ; SZ13-NEXT:    vfidb %v0, %v0, 4, 0 | 
 | ; SZ13-NEXT:    fidbra %f1, 0, %f1, 4 | 
 | ; SZ13-NEXT:    vst %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    std %f1, 16(%r2) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %nearby = call <3 x double> @llvm.experimental.constrained.nearbyint.v3f64( | 
 |                           <3 x double> %b, | 
 |                           metadata !"round.dynamic", | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %nearby, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_nearbyint_v4f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_nearbyint_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -192 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; S390X-NEXT:    std %f8, 184(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f11, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    .cfi_offset %f11, -192 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    ld %f0, 24(%r2) | 
 | ; S390X-NEXT:    ld %f10, 16(%r2) | 
 | ; S390X-NEXT:    brasl %r14, nearbyint@PLT | 
 | ; S390X-NEXT:    ldr %f11, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f10 | 
 | ; S390X-NEXT:    brasl %r14, nearbyint@PLT | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, nearbyint@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, nearbyint@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f9 | 
 | ; S390X-NEXT:    ldr %f4, %f10 | 
 | ; S390X-NEXT:    ldr %f6, %f11 | 
 | ; S390X-NEXT:    ld %f8, 184(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f11, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_nearbyint_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 16(%r2), 4 | 
 | ; SZ13-NEXT:    vl %v1, 0(%r2), 4 | 
 | ; SZ13-NEXT:    vfidb %v24, %v1, 4, 0 | 
 | ; SZ13-NEXT:    vfidb %v26, %v0, 4, 0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <4 x double>, ptr %a | 
 |   %nearby = call <4 x double> @llvm.experimental.constrained.nearbyint.v4f64( | 
 |                                 <4 x double> %b, | 
 |                                 metadata !"round.dynamic", | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %nearby | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_maxnum_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_maxnum_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    larl %r1, .LCPI85_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI85_1 | 
 | ; S390X-NEXT:    le %f2, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, fmaxf@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_maxnum_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -160 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI85_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI85_1 | 
 | ; SZ13-NEXT:    lde %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, fmaxf@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %max = call <1 x float> @llvm.experimental.constrained.maxnum.v1f32( | 
 |                                <1 x float> <float 42.0>, <1 x float> <float 41.0>, | 
 |                                metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %max | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_maxnum_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_maxnum_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -168 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 328 | 
 | ; S390X-NEXT:    std %f8, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    larl %r1, .LCPI86_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI86_1 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, fmax@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI86_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI86_3 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, fmax@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    ld %f8, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 280(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_maxnum_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -176 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI86_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI86_1 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, fmax@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI86_2 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI86_3 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, fmax@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %max = call <2 x double> @llvm.experimental.constrained.maxnum.v2f64( | 
 |                                 <2 x double> <double 43.0, double 42.0>, | 
 |                                 <2 x double> <double 41.0, double 40.0>, | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %max | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_maxnum_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_maxnum_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    larl %r1, .LCPI87_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI87_1 | 
 | ; S390X-NEXT:    le %f8, 0(%r1) | 
 | ; S390X-NEXT:    ler %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, fmaxf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI87_2 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI87_3 | 
 | ; S390X-NEXT:    le %f2, 0(%r1) | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, fmaxf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI87_4 | 
 | ; S390X-NEXT:    le %f2, 0(%r1) | 
 | ; S390X-NEXT:    ler %f10, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, fmaxf@PLT | 
 | ; S390X-NEXT:    ler %f2, %f10 | 
 | ; S390X-NEXT:    ler %f4, %f9 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_maxnum_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -200 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 360 | 
 | ; SZ13-NEXT:    std %f8, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI87_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI87_1 | 
 | ; SZ13-NEXT:    lde %f8, 0(%r1) | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, fmaxf@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI87_2 | 
 | ; SZ13-NEXT:    lde %f2, 0(%r1) | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ldr %f0, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, fmaxf@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI87_3 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI87_4 | 
 | ; SZ13-NEXT:    lde %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, fmaxf@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    ld %f8, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 312(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %max = call <3 x float> @llvm.experimental.constrained.maxnum.v3f32( | 
 |                               <3 x float> <float 43.0, float 44.0, float 45.0>, | 
 |                               <3 x float> <float 41.0, float 42.0, float 43.0>, | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %max | 
 | } | 
 |  | 
 | define void @constrained_vector_log10_maxnum_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_log10_maxnum_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    larl %r1, .LCPI88_0 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    brasl %r14, fmax@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI88_1 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, fmax@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI88_2 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, fmax@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f10, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_log10_maxnum_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r13, -56 | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -200 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 360 | 
 | ; SZ13-NEXT:    std %f8, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI88_0 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    ld %f8, 16(%r2) | 
 | ; SZ13-NEXT:    lgr %r13, %r2 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, fmax@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI88_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vl %v0, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    vrepg %v0, %v0, 1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, fmax@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    larl %r1, .LCPI88_2 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ldr %f0, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, fmax@PLT | 
 | ; SZ13-NEXT:    mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload | 
 | ; SZ13-NEXT:    ld %f8, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    std %f0, 16(%r13) | 
 | ; SZ13-NEXT:    lmg %r13, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %max = call <3 x double> @llvm.experimental.constrained.maxnum.v3f64( | 
 |                           <3 x double> %b, | 
 |                           <3 x double> <double 40.0, double 41.0, double 42.0>, | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %max, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_maxnum_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_maxnum_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    larl %r1, .LCPI89_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI89_1 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, fmax@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI89_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI89_3 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, fmax@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI89_4 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI89_5 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, fmax@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI89_6 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI89_7 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, fmax@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f10 | 
 | ; S390X-NEXT:    ldr %f4, %f9 | 
 | ; S390X-NEXT:    ldr %f6, %f8 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_maxnum_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI89_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI89_1 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, fmax@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI89_2 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI89_3 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, fmax@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v0, %v1 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI89_4 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI89_5 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, fmax@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI89_6 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI89_7 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, fmax@PLT | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vl %v24, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v26, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %max = call <4 x double> @llvm.experimental.constrained.maxnum.v4f64( | 
 |                                 <4 x double> <double 44.0, double 45.0, | 
 |                                               double 46.0, double 47.0>, | 
 |                                 <4 x double> <double 40.0, double 41.0, | 
 |                                               double 42.0, double 43.0>, | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %max | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_minnum_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_minnum_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    larl %r1, .LCPI90_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI90_1 | 
 | ; S390X-NEXT:    le %f2, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, fminf@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_minnum_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -160 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI90_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI90_1 | 
 | ; SZ13-NEXT:    lde %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, fminf@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 |  entry: | 
 |   %min = call <1 x float> @llvm.experimental.constrained.minnum.v1f32( | 
 |                                <1 x float> <float 42.0>, <1 x float> <float 41.0>, | 
 |                                metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %min | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_minnum_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_minnum_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -168 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 328 | 
 | ; S390X-NEXT:    std %f8, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    larl %r1, .LCPI91_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI91_1 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, fmin@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI91_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI91_3 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, fmin@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    ld %f8, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 280(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_minnum_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -176 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI91_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI91_1 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, fmin@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI91_2 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI91_3 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, fmin@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %min = call <2 x double> @llvm.experimental.constrained.minnum.v2f64( | 
 |                                 <2 x double> <double 43.0, double 42.0>, | 
 |                                 <2 x double> <double 41.0, double 40.0>, | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %min | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_minnum_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_minnum_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    larl %r1, .LCPI92_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI92_1 | 
 | ; S390X-NEXT:    le %f8, 0(%r1) | 
 | ; S390X-NEXT:    ler %f2, %f8 | 
 | ; S390X-NEXT:    brasl %r14, fminf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI92_2 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI92_3 | 
 | ; S390X-NEXT:    le %f2, 0(%r1) | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, fminf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI92_4 | 
 | ; S390X-NEXT:    le %f2, 0(%r1) | 
 | ; S390X-NEXT:    ler %f10, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, fminf@PLT | 
 | ; S390X-NEXT:    ler %f2, %f10 | 
 | ; S390X-NEXT:    ler %f4, %f9 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_minnum_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -200 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 360 | 
 | ; SZ13-NEXT:    std %f8, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI92_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI92_1 | 
 | ; SZ13-NEXT:    lde %f8, 0(%r1) | 
 | ; SZ13-NEXT:    ldr %f2, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, fminf@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI92_2 | 
 | ; SZ13-NEXT:    lde %f2, 0(%r1) | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ldr %f0, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, fminf@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI92_3 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI92_4 | 
 | ; SZ13-NEXT:    lde %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, fminf@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    ld %f8, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 312(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %min = call <3 x float> @llvm.experimental.constrained.minnum.v3f32( | 
 |                               <3 x float> <float 43.0, float 44.0, float 45.0>, | 
 |                               <3 x float> <float 41.0, float 42.0, float 43.0>, | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %min | 
 | } | 
 |  | 
 | define void @constrained_vector_minnum_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_minnum_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -192 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; S390X-NEXT:    std %f8, 184(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f11, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    .cfi_offset %f11, -192 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    larl %r1, .LCPI93_0 | 
 | ; S390X-NEXT:    ld %f9, 0(%r1) | 
 | ; S390X-NEXT:    ld %f10, 8(%r2) | 
 | ; S390X-NEXT:    ldr %f2, %f9 | 
 | ; S390X-NEXT:    brasl %r14, fmin@PLT | 
 | ; S390X-NEXT:    ldr %f11, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f10 | 
 | ; S390X-NEXT:    ldr %f2, %f9 | 
 | ; S390X-NEXT:    brasl %r14, fmin@PLT | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    ldr %f2, %f9 | 
 | ; S390X-NEXT:    brasl %r14, fmin@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f10, 8(%r13) | 
 | ; S390X-NEXT:    std %f11, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 184(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f11, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_minnum_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r13, -56 | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -208 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 368 | 
 | ; SZ13-NEXT:    std %f8, 200(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    std %f9, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    .cfi_offset %f9, -176 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI93_0 | 
 | ; SZ13-NEXT:    ld %f9, 0(%r1) | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f8, 16(%r2) | 
 | ; SZ13-NEXT:    ldr %f2, %f9 | 
 | ; SZ13-NEXT:    lgr %r13, %r2 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, fmin@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vl %v0, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    ldr %f2, %f9 | 
 | ; SZ13-NEXT:    vrepg %v0, %v0, 1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, fmin@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ldr %f0, %f8 | 
 | ; SZ13-NEXT:    ldr %f2, %f9 | 
 | ; SZ13-NEXT:    brasl %r14, fmin@PLT | 
 | ; SZ13-NEXT:    mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload | 
 | ; SZ13-NEXT:    ld %f8, 200(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    ld %f9, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    std %f0, 16(%r13) | 
 | ; SZ13-NEXT:    lmg %r13, %r15, 312(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |  %b = load <3 x double>, ptr %a | 
 |  %min = call <3 x double> @llvm.experimental.constrained.minnum.v3f64( | 
 |                           <3 x double> %b, | 
 |                           <3 x double> <double 3.0, double 3.0, double 3.0>, | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %min, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_minnum_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_minnum_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    larl %r1, .LCPI94_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI94_1 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, fmin@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI94_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI94_3 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, fmin@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI94_4 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI94_5 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, fmin@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI94_6 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI94_7 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, fmin@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f10 | 
 | ; S390X-NEXT:    ldr %f4, %f9 | 
 | ; S390X-NEXT:    ldr %f6, %f8 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_minnum_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI94_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI94_1 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, fmin@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI94_2 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI94_3 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, fmin@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v0, %v1 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI94_4 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI94_5 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, fmin@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI94_6 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI94_7 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, fmin@PLT | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vl %v24, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v26, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %min = call <4 x double> @llvm.experimental.constrained.minnum.v4f64( | 
 |                                 <4 x double> <double 44.0, double 45.0, | 
 |                                               double 46.0, double 47.0>, | 
 |                                 <4 x double> <double 40.0, double 41.0, | 
 |                                               double 42.0, double 43.0>, | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %min | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_fptrunc_v1f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_fptrunc_v1f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI95_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    ledbr %f0, %f0 | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fptrunc_v1f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI95_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    wledb %v24, %f0, 0, 0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %result = call <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64( | 
 |                                 <1 x double><double 42.1>, | 
 |                                 metadata !"round.dynamic", | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %result | 
 | } | 
 |  | 
 | define <2 x float> @constrained_vector_fptrunc_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_fptrunc_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI96_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI96_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ledbr %f2, %f0 | 
 | ; S390X-NEXT:    ledbr %f0, %f1 | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fptrunc_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI96_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI96_1 | 
 | ; SZ13-NEXT:    ld %f1, 0(%r1) | 
 | ; SZ13-NEXT:    ledbra %f0, 0, %f0, 0 | 
 | ; SZ13-NEXT:    ledbra %f1, 0, %f1, 0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %result = call <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64( | 
 |                                 <2 x double><double 42.1, double 42.2>, | 
 |                                 metadata !"round.dynamic", | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   ret <2 x float> %result | 
 | } | 
 |  | 
 | define void @constrained_vector_fptrunc_v3f64(ptr %src, ptr %dest) #0 { | 
 | ; S390X-LABEL: constrained_vector_fptrunc_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    ld %f0, 0(%r2) | 
 | ; S390X-NEXT:    ld %f1, 16(%r2) | 
 | ; S390X-NEXT:    ld %f2, 8(%r2) | 
 | ; S390X-NEXT:    ledbr %f0, %f0 | 
 | ; S390X-NEXT:    lgdr %r0, %f0 | 
 | ; S390X-NEXT:    nilf %r0, 0 | 
 | ; S390X-NEXT:    ledbr %f0, %f2 | 
 | ; S390X-NEXT:    lgdr %r1, %f0 | 
 | ; S390X-NEXT:    srlg %r1, %r1, 32 | 
 | ; S390X-NEXT:    lr %r0, %r1 | 
 | ; S390X-NEXT:    ledbr %f0, %f1 | 
 | ; S390X-NEXT:    ste %f0, 8(%r3) | 
 | ; S390X-NEXT:    stg %r0, 0(%r3) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fptrunc_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v1, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f0, 16(%r2) | 
 | ; SZ13-NEXT:    vledb %v1, %v1, 0, 0 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI97_0 | 
 | ; SZ13-NEXT:    ledbra %f0, 0, %f0, 0 | 
 | ; SZ13-NEXT:    vl %v2, 0(%r1), 3 | 
 | ; SZ13-NEXT:    vperm %v1, %v1, %v1, %v2 | 
 | ; SZ13-NEXT:    ste %f0, 8(%r3) | 
 | ; SZ13-NEXT:    vsteg %v1, 0(%r3), 0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %src | 
 |   %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64( | 
 |                                 <3 x double> %b, | 
 |                                 metadata !"round.dynamic", | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   store <3 x float> %result, ptr %dest | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x float> @constrained_vector_fptrunc_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_fptrunc_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI98_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI98_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI98_2 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI98_3 | 
 | ; S390X-NEXT:    ld %f3, 0(%r1) | 
 | ; S390X-NEXT:    ledbr %f6, %f0 | 
 | ; S390X-NEXT:    ledbr %f4, %f1 | 
 | ; S390X-NEXT:    ledbr %f2, %f2 | 
 | ; S390X-NEXT:    ledbr %f0, %f3 | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fptrunc_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI98_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI98_1 | 
 | ; SZ13-NEXT:    ld %f1, 0(%r1) | 
 | ; SZ13-NEXT:    ledbra %f0, 0, %f0, 0 | 
 | ; SZ13-NEXT:    ledbra %f1, 0, %f1, 0 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI98_2 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    ld %f1, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI98_3 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    ledbra %f1, 0, %f1, 0 | 
 | ; SZ13-NEXT:    ledbra %f2, 0, %f2, 0 | 
 | ; SZ13-NEXT:    vmrhf %v1, %v2, %v1 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v1, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %result = call <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64( | 
 |                                 <4 x double><double 42.1, double 42.2, | 
 |                                              double 42.3, double 42.4>, | 
 |                                 metadata !"round.dynamic", | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   ret <4 x float> %result | 
 | } | 
 |  | 
 | define <1 x double> @constrained_vector_fpext_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_fpext_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI99_0 | 
 | ; S390X-NEXT:    ldeb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fpext_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI99_0 | 
 | ; SZ13-NEXT:    ldeb %f0, 0(%r1) | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %result = call <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32( | 
 |                                 <1 x float><float 42.0>, | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   ret <1 x double> %result | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_fpext_v2f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_fpext_v2f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI100_0 | 
 | ; S390X-NEXT:    ldeb %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI100_1 | 
 | ; S390X-NEXT:    ldeb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fpext_v2f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI100_0 | 
 | ; SZ13-NEXT:    ldeb %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI100_1 | 
 | ; SZ13-NEXT:    ldeb %f1, 0(%r1) | 
 | ; SZ13-NEXT:    vmrhg %v24, %v1, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %result = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32( | 
 |                                 <2 x float><float 42.0, float 43.0>, | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %result | 
 | } | 
 |  | 
 | define void @constrained_vector_fpext_v3f64(ptr %src, ptr %dest) #0 { | 
 | ; S390X-LABEL: constrained_vector_fpext_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    lg %r0, 0(%r2) | 
 | ; S390X-NEXT:    sllg %r1, %r0, 32 | 
 | ; S390X-NEXT:    ldgr %f0, %r1 | 
 | ; S390X-NEXT:    nilf %r0, 0 | 
 | ; S390X-NEXT:    ldeb %f1, 8(%r2) | 
 | ; S390X-NEXT:    ldgr %f2, %r0 | 
 | ; S390X-NEXT:    ldebr %f2, %f2 | 
 | ; S390X-NEXT:    ldebr %f0, %f0 | 
 | ; S390X-NEXT:    std %f1, 16(%r3) | 
 | ; S390X-NEXT:    std %f0, 8(%r3) | 
 | ; S390X-NEXT:    std %f2, 0(%r3) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fpext_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    vrepf %v1, %v0, 1 | 
 | ; SZ13-NEXT:    vldeb %v0, %v0 | 
 | ; SZ13-NEXT:    ldebr %f1, %f1 | 
 | ; SZ13-NEXT:    vmrhg %v1, %v0, %v1 | 
 | ; SZ13-NEXT:    vsteg %v0, 16(%r3), 1 | 
 | ; SZ13-NEXT:    vst %v1, 0(%r3), 4 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x float>, ptr %src | 
 |   %result = call <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32( | 
 |                               <3 x float> %b, | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %result, ptr %dest | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_fpext_v4f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_fpext_v4f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    larl %r1, .LCPI102_0 | 
 | ; S390X-NEXT:    ldeb %f6, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI102_1 | 
 | ; S390X-NEXT:    ldeb %f4, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI102_2 | 
 | ; S390X-NEXT:    ldeb %f2, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI102_3 | 
 | ; S390X-NEXT:    ldeb %f0, 0(%r1) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_fpext_v4f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    larl %r1, .LCPI102_0 | 
 | ; SZ13-NEXT:    ldeb %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI102_1 | 
 | ; SZ13-NEXT:    ldeb %f1, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI102_2 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v1, %v0 | 
 | ; SZ13-NEXT:    ldeb %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI102_3 | 
 | ; SZ13-NEXT:    ldeb %f1, 0(%r1) | 
 | ; SZ13-NEXT:    vmrhg %v26, %v1, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %result = call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32( | 
 |                                 <4 x float><float 42.0, float 43.0, | 
 |                                             float 44.0, float 45.0>, | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %result | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_ceil_v1f32(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_ceil_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    larl %r1, .LCPI103_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, ceilf@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_ceil_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vgmf %v0, 2, 9 | 
 | ; SZ13-NEXT:    fiebra %f0, 6, %f0, 4 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <1 x float>, ptr %a | 
 |   %ceil = call <1 x float> @llvm.experimental.constrained.ceil.v1f32( | 
 |                                <1 x float> <float 1.5>, | 
 |                                metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %ceil | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_ceil_v2f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_ceil_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    ld %f0, 8(%r2) | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    brasl %r14, ceil@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, ceil@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f9 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_ceil_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 3 | 
 | ; SZ13-NEXT:    vfidb %v24, %v0, 4, 6 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <2 x double>, ptr %a | 
 |   %ceil = call <2 x double> @llvm.experimental.constrained.ceil.v2f64( | 
 |                                 <2 x double> %b, | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %ceil | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_ceil_v3f32(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_ceil_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lg %r0, 0(%r2) | 
 | ; S390X-NEXT:    le %f0, 8(%r2) | 
 | ; S390X-NEXT:    risbg %r1, %r0, 0, 159, 0 | 
 | ; S390X-NEXT:    ldgr %f8, %r1 | 
 | ; S390X-NEXT:    sllg %r0, %r0, 32 | 
 | ; S390X-NEXT:    ldgr %f9, %r0 | 
 | ; S390X-NEXT:    brasl %r14, ceilf@PLT | 
 | ; S390X-NEXT:    ler %f10, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, ceilf@PLT | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, ceilf@PLT | 
 | ; S390X-NEXT:    ler %f2, %f9 | 
 | ; S390X-NEXT:    ler %f4, %f10 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_ceil_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    vrepf %v1, %v0, 2 | 
 | ; SZ13-NEXT:    vrepf %v2, %v0, 1 | 
 | ; SZ13-NEXT:    fiebra %f1, 6, %f1, 4 | 
 | ; SZ13-NEXT:    fiebra %f2, 6, %f2, 4 | 
 | ; SZ13-NEXT:    fiebra %f0, 6, %f0, 4 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v0, %v2 | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x float>, ptr %a | 
 |   %ceil = call <3 x float> @llvm.experimental.constrained.ceil.v3f32( | 
 |                               <3 x float> %b, | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %ceil | 
 | } | 
 |  | 
 | define void @constrained_vector_ceil_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_ceil_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    brasl %r14, ceil@PLT | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, ceil@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, ceil@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f10, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_ceil_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f1, 16(%r2) | 
 | ; SZ13-NEXT:    vfidb %v0, %v0, 4, 6 | 
 | ; SZ13-NEXT:    fidbra %f1, 6, %f1, 4 | 
 | ; SZ13-NEXT:    vst %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    std %f1, 16(%r2) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %ceil = call <3 x double> @llvm.experimental.constrained.ceil.v3f64( | 
 |                           <3 x double> %b, | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %ceil, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_floor_v1f32(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_floor_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    le %f0, 0(%r2) | 
 | ; S390X-NEXT:    brasl %r14, floorf@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_floor_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    lde %f0, 0(%r2) | 
 | ; SZ13-NEXT:    fiebra %f0, 7, %f0, 4 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <1 x float>, ptr %a | 
 |   %floor = call <1 x float> @llvm.experimental.constrained.floor.v1f32( | 
 |                                <1 x float> %b, | 
 |                                metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %floor | 
 | } | 
 |  | 
 |  | 
 | define <2 x double> @constrained_vector_floor_v2f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_floor_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    ld %f0, 8(%r2) | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    brasl %r14, floor@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, floor@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f9 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_floor_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 3 | 
 | ; SZ13-NEXT:    vfidb %v24, %v0, 4, 7 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <2 x double>, ptr %a | 
 |   %floor = call <2 x double> @llvm.experimental.constrained.floor.v2f64( | 
 |                                 <2 x double> %b, | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %floor | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_floor_v3f32(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_floor_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lg %r0, 0(%r2) | 
 | ; S390X-NEXT:    le %f0, 8(%r2) | 
 | ; S390X-NEXT:    risbg %r1, %r0, 0, 159, 0 | 
 | ; S390X-NEXT:    ldgr %f8, %r1 | 
 | ; S390X-NEXT:    sllg %r0, %r0, 32 | 
 | ; S390X-NEXT:    ldgr %f9, %r0 | 
 | ; S390X-NEXT:    brasl %r14, floorf@PLT | 
 | ; S390X-NEXT:    ler %f10, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, floorf@PLT | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, floorf@PLT | 
 | ; S390X-NEXT:    ler %f2, %f9 | 
 | ; S390X-NEXT:    ler %f4, %f10 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_floor_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    vrepf %v1, %v0, 2 | 
 | ; SZ13-NEXT:    vrepf %v2, %v0, 1 | 
 | ; SZ13-NEXT:    fiebra %f1, 7, %f1, 4 | 
 | ; SZ13-NEXT:    fiebra %f2, 7, %f2, 4 | 
 | ; SZ13-NEXT:    fiebra %f0, 7, %f0, 4 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v0, %v2 | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x float>, ptr %a | 
 |   %floor = call <3 x float> @llvm.experimental.constrained.floor.v3f32( | 
 |                               <3 x float> %b, | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %floor | 
 | } | 
 |  | 
 | define void @constrained_vector_floor_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_floor_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    brasl %r14, floor@PLT | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, floor@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, floor@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f10, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_floor_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f1, 16(%r2) | 
 | ; SZ13-NEXT:    vfidb %v0, %v0, 4, 7 | 
 | ; SZ13-NEXT:    fidbra %f1, 7, %f1, 4 | 
 | ; SZ13-NEXT:    vst %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    std %f1, 16(%r2) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %floor = call <3 x double> @llvm.experimental.constrained.floor.v3f64( | 
 |                           <3 x double> %b, | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %floor, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_round_v1f32(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_round_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    le %f0, 0(%r2) | 
 | ; S390X-NEXT:    brasl %r14, roundf@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_round_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    lde %f0, 0(%r2) | 
 | ; SZ13-NEXT:    fiebra %f0, 1, %f0, 4 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <1 x float>, ptr %a | 
 |   %round = call <1 x float> @llvm.experimental.constrained.round.v1f32( | 
 |                                <1 x float> %b, | 
 |                                metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %round | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_round_v2f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_round_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    ld %f0, 8(%r2) | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    brasl %r14, round@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, round@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f9 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_round_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 3 | 
 | ; SZ13-NEXT:    vfidb %v24, %v0, 4, 1 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <2 x double>, ptr %a | 
 |   %round = call <2 x double> @llvm.experimental.constrained.round.v2f64( | 
 |                                 <2 x double> %b, | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %round | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_round_v3f32(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_round_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lg %r0, 0(%r2) | 
 | ; S390X-NEXT:    le %f0, 8(%r2) | 
 | ; S390X-NEXT:    risbg %r1, %r0, 0, 159, 0 | 
 | ; S390X-NEXT:    ldgr %f8, %r1 | 
 | ; S390X-NEXT:    sllg %r0, %r0, 32 | 
 | ; S390X-NEXT:    ldgr %f9, %r0 | 
 | ; S390X-NEXT:    brasl %r14, roundf@PLT | 
 | ; S390X-NEXT:    ler %f10, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, roundf@PLT | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, roundf@PLT | 
 | ; S390X-NEXT:    ler %f2, %f9 | 
 | ; S390X-NEXT:    ler %f4, %f10 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_round_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    vrepf %v1, %v0, 2 | 
 | ; SZ13-NEXT:    vrepf %v2, %v0, 1 | 
 | ; SZ13-NEXT:    fiebra %f1, 1, %f1, 4 | 
 | ; SZ13-NEXT:    fiebra %f2, 1, %f2, 4 | 
 | ; SZ13-NEXT:    fiebra %f0, 1, %f0, 4 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v0, %v2 | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x float>, ptr %a | 
 |   %round = call <3 x float> @llvm.experimental.constrained.round.v3f32( | 
 |                               <3 x float> %b, | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %round | 
 | } | 
 |  | 
 |  | 
 | define void @constrained_vector_round_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_round_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    brasl %r14, round@PLT | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, round@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, round@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f10, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_round_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f1, 16(%r2) | 
 | ; SZ13-NEXT:    vfidb %v0, %v0, 4, 1 | 
 | ; SZ13-NEXT:    fidbra %f1, 1, %f1, 4 | 
 | ; SZ13-NEXT:    vst %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    std %f1, 16(%r2) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %round = call <3 x double> @llvm.experimental.constrained.round.v3f64( | 
 |                           <3 x double> %b, | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %round, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_roundeven_v1f32(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_roundeven_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    le %f0, 0(%r2) | 
 | ; S390X-NEXT:    brasl %r14, roundevenf@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_roundeven_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    lde %f0, 0(%r2) | 
 | ; SZ13-NEXT:    fiebra %f0, 4, %f0, 4 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <1 x float>, ptr %a | 
 |   %round = call <1 x float> @llvm.experimental.constrained.roundeven.v1f32( | 
 |                                <1 x float> %b, | 
 |                                metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %round | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_roundeven_v2f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_roundeven_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    ld %f0, 8(%r2) | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    brasl %r14, roundeven@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, roundeven@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f9 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_roundeven_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 3 | 
 | ; SZ13-NEXT:    vfidb %v24, %v0, 4, 4 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <2 x double>, ptr %a | 
 |   %round = call <2 x double> @llvm.experimental.constrained.roundeven.v2f64( | 
 |                                 <2 x double> %b, | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %round | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_roundeven_v3f32(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_roundeven_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lg %r0, 0(%r2) | 
 | ; S390X-NEXT:    le %f0, 8(%r2) | 
 | ; S390X-NEXT:    risbg %r1, %r0, 0, 159, 0 | 
 | ; S390X-NEXT:    ldgr %f8, %r1 | 
 | ; S390X-NEXT:    sllg %r0, %r0, 32 | 
 | ; S390X-NEXT:    ldgr %f9, %r0 | 
 | ; S390X-NEXT:    brasl %r14, roundevenf@PLT | 
 | ; S390X-NEXT:    ler %f10, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, roundevenf@PLT | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, roundevenf@PLT | 
 | ; S390X-NEXT:    ler %f2, %f9 | 
 | ; S390X-NEXT:    ler %f4, %f10 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_roundeven_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    vrepf %v1, %v0, 2 | 
 | ; SZ13-NEXT:    vrepf %v2, %v0, 1 | 
 | ; SZ13-NEXT:    fiebra %f1, 4, %f1, 4 | 
 | ; SZ13-NEXT:    fiebra %f2, 4, %f2, 4 | 
 | ; SZ13-NEXT:    fiebra %f0, 4, %f0, 4 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v0, %v2 | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x float>, ptr %a | 
 |   %round = call <3 x float> @llvm.experimental.constrained.roundeven.v3f32( | 
 |                               <3 x float> %b, | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %round | 
 | } | 
 |  | 
 | define void @constrained_vector_roundeven_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_roundeven_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    brasl %r14, roundeven@PLT | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, roundeven@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, roundeven@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f10, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_roundeven_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f1, 16(%r2) | 
 | ; SZ13-NEXT:    vfidb %v0, %v0, 4, 4 | 
 | ; SZ13-NEXT:    fidbra %f1, 4, %f1, 4 | 
 | ; SZ13-NEXT:    vst %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    std %f1, 16(%r2) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %round = call <3 x double> @llvm.experimental.constrained.roundeven.v3f64( | 
 |                           <3 x double> %b, | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %round, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_trunc_v1f32(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_trunc_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    le %f0, 0(%r2) | 
 | ; S390X-NEXT:    brasl %r14, truncf@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_trunc_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    lde %f0, 0(%r2) | 
 | ; SZ13-NEXT:    fiebra %f0, 5, %f0, 4 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <1 x float>, ptr %a | 
 |   %trunc = call <1 x float> @llvm.experimental.constrained.trunc.v1f32( | 
 |                                <1 x float> %b, | 
 |                                metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %trunc | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_trunc_v2f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_trunc_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    ld %f0, 8(%r2) | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    brasl %r14, trunc@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, trunc@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f9 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_trunc_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 3 | 
 | ; SZ13-NEXT:    vfidb %v24, %v0, 4, 5 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <2 x double>, ptr %a | 
 |   %trunc = call <2 x double> @llvm.experimental.constrained.trunc.v2f64( | 
 |                                 <2 x double> %b, | 
 |                                 metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %trunc | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_trunc_v3f32(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_trunc_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lg %r0, 0(%r2) | 
 | ; S390X-NEXT:    le %f0, 8(%r2) | 
 | ; S390X-NEXT:    risbg %r1, %r0, 0, 159, 0 | 
 | ; S390X-NEXT:    ldgr %f8, %r1 | 
 | ; S390X-NEXT:    sllg %r0, %r0, 32 | 
 | ; S390X-NEXT:    ldgr %f9, %r0 | 
 | ; S390X-NEXT:    brasl %r14, truncf@PLT | 
 | ; S390X-NEXT:    ler %f10, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, truncf@PLT | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, truncf@PLT | 
 | ; S390X-NEXT:    ler %f2, %f9 | 
 | ; S390X-NEXT:    ler %f4, %f10 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_trunc_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    vrepf %v1, %v0, 2 | 
 | ; SZ13-NEXT:    vrepf %v2, %v0, 1 | 
 | ; SZ13-NEXT:    fiebra %f1, 5, %f1, 4 | 
 | ; SZ13-NEXT:    fiebra %f2, 5, %f2, 4 | 
 | ; SZ13-NEXT:    fiebra %f0, 5, %f0, 4 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v0, %v2 | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x float>, ptr %a | 
 |   %trunc = call <3 x float> @llvm.experimental.constrained.trunc.v3f32( | 
 |                               <3 x float> %b, | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %trunc | 
 | } | 
 |  | 
 | define void @constrained_vector_trunc_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_trunc_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    brasl %r14, trunc@PLT | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, trunc@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, trunc@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f10, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_trunc_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f1, 16(%r2) | 
 | ; SZ13-NEXT:    vfidb %v0, %v0, 4, 5 | 
 | ; SZ13-NEXT:    fidbra %f1, 5, %f1, 4 | 
 | ; SZ13-NEXT:    vst %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    std %f1, 16(%r2) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %trunc = call <3 x double> @llvm.experimental.constrained.trunc.v3f64( | 
 |                           <3 x double> %b, | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %trunc, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_tan_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_tan_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    larl %r1, .LCPI123_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, tanf@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_tan_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -160 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI123_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, tanf@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %tan = call <1 x float> @llvm.experimental.constrained.tan.v1f32( | 
 |                              <1 x float> <float 42.0>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %tan | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_tan_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_tan_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -168 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 328 | 
 | ; S390X-NEXT:    std %f8, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    larl %r1, .LCPI124_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, tan@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI124_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, tan@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    ld %f8, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 280(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_tan_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -176 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI124_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, tan@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI124_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, tan@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %tan = call <2 x double> @llvm.experimental.constrained.tan.v2f64( | 
 |                              <2 x double> <double 42.0, double 42.1>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %tan | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_tan_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_tan_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    larl %r1, .LCPI125_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, tanf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI125_1 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f8, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, tanf@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI125_2 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, tanf@PLT | 
 | ; S390X-NEXT:    ler %f2, %f9 | 
 | ; S390X-NEXT:    ler %f4, %f8 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_tan_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI125_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, tanf@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI125_1 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, tanf@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI125_2 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, tanf@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %tan = call <3 x float> @llvm.experimental.constrained.tan.v3f32( | 
 |                               <3 x float> <float 42.0, float 43.0, float 44.0>, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %tan | 
 | } | 
 |  | 
 | define void @constrained_vector_tan_v3f64(ptr %a) #0 { | 
 | ; S390X-LABEL: constrained_vector_tan_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    brasl %r14, tan@PLT | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f9 | 
 | ; S390X-NEXT:    brasl %r14, tan@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    brasl %r14, tan@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f10, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_tan_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r13, -56 | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -200 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 360 | 
 | ; SZ13-NEXT:    std %f8, 192(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    ld %f8, 16(%r2) | 
 | ; SZ13-NEXT:    lgr %r13, %r2 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, tan@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vl %v0, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepg %v0, %v0, 1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    brasl %r14, tan@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ldr %f0, %f8 | 
 | ; SZ13-NEXT:    brasl %r14, tan@PLT | 
 | ; SZ13-NEXT:    mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload | 
 | ; SZ13-NEXT:    ld %f8, 192(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    std %f0, 16(%r13) | 
 | ; SZ13-NEXT:    lmg %r13, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %b = load <3 x double>, ptr %a | 
 |   %tan = call <3 x double> @llvm.experimental.constrained.tan.v3f64( | 
 |                           <3 x double> %b, | 
 |                           metadata !"round.dynamic", | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %tan, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_tan_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_tan_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    larl %r1, .LCPI127_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, tan@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI127_1 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, tan@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI127_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, tan@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI127_3 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, tan@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f10 | 
 | ; S390X-NEXT:    ldr %f4, %f9 | 
 | ; S390X-NEXT:    ldr %f6, %f8 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_tan_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI127_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, tan@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI127_1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, tan@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v0, %v1 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI127_2 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, tan@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI127_3 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, tan@PLT | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vl %v24, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v26, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %tan = call <4 x double> @llvm.experimental.constrained.tan.v4f64( | 
 |                              <4 x double> <double 42.0, double 42.1, | 
 |                                            double 42.2, double 42.3>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %tan | 
 | } | 
 |  | 
 | define <1 x float> @constrained_vector_atan2_v1f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_atan2_v1f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -160 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; S390X-NEXT:    larl %r1, .LCPI128_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI128_1 | 
 | ; S390X-NEXT:    le %f2, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, atan2f@PLT | 
 | ; S390X-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_atan2_v1f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -160 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 320 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI128_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI128_1 | 
 | ; SZ13-NEXT:    lde %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, atan2f@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vlr %v24, %v0 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 272(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %atan2 = call <1 x float> @llvm.experimental.constrained.atan2.v1f32( | 
 |                              <1 x float> <float 42.0>, | 
 |                              <1 x float> <float 43.0>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <1 x float> %atan2 | 
 | } | 
 |  | 
 | define <2 x double> @constrained_vector_atan2_v2f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_atan2_v2f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -168 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 328 | 
 | ; S390X-NEXT:    std %f8, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    larl %r1, .LCPI129_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI129_1 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, atan2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI129_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI129_3 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, atan2@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f8 | 
 | ; S390X-NEXT:    ld %f8, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 280(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_atan2_v2f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -176 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI129_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI129_1 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, atan2@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI129_2 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI129_3 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, atan2@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %atan2 = call <2 x double> @llvm.experimental.constrained.atan2.v2f64( | 
 |                              <2 x double> <double 42.0, double 42.1>, | 
 |                              <2 x double> <double 43.0, double 43.1>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <2 x double> %atan2 | 
 | } | 
 |  | 
 | define <3 x float> @constrained_vector_atan2_v3f32() #0 { | 
 | ; S390X-LABEL: constrained_vector_atan2_v3f32: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -176 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 336 | 
 | ; S390X-NEXT:    std %f8, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    larl %r1, .LCPI130_0 | 
 | ; S390X-NEXT:    le %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI130_1 | 
 | ; S390X-NEXT:    le %f2, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, atan2f@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI130_2 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI130_3 | 
 | ; S390X-NEXT:    le %f2, 0(%r1) | 
 | ; S390X-NEXT:    ler %f8, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, atan2f@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI130_4 | 
 | ; S390X-NEXT:    le %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI130_5 | 
 | ; S390X-NEXT:    le %f2, 0(%r1) | 
 | ; S390X-NEXT:    ler %f9, %f0 | 
 | ; S390X-NEXT:    ler %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, atan2f@PLT | 
 | ; S390X-NEXT:    ler %f2, %f9 | 
 | ; S390X-NEXT:    ler %f4, %f8 | 
 | ; S390X-NEXT:    ld %f8, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 288(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_atan2_v3f32: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI130_0 | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI130_1 | 
 | ; SZ13-NEXT:    lde %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, atan2f@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI130_2 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI130_3 | 
 | ; SZ13-NEXT:    lde %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, atan2f@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI130_4 | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    lde %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI130_5 | 
 | ; SZ13-NEXT:    lde %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, atan2f@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0s killed $f0s def $v0 | 
 | ; SZ13-NEXT:    vmrhf %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepf %v1, %v1, 0 | 
 | ; SZ13-NEXT:    vmrhg %v24, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %atan2 = call <3 x float> @llvm.experimental.constrained.atan2.v3f32( | 
 |                               <3 x float> <float 42.0, float 43.0, float 44.0>, | 
 |                               <3 x float> <float 42.125, float 43.25, float 44.375>, | 
 |                               metadata !"round.dynamic", | 
 |                               metadata !"fpexcept.strict") #0 | 
 |   ret <3 x float> %atan2 | 
 | } | 
 |  | 
 | define void @constrained_vector_atan2_v3f64(ptr %a, ptr %b) #0 { | 
 | ; S390X-LABEL: constrained_vector_atan2_v3f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r13, -56 | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -200 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 360 | 
 | ; S390X-NEXT:    std %f8, 192(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 184(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f11, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f12, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    .cfi_offset %f11, -192 | 
 | ; S390X-NEXT:    .cfi_offset %f12, -200 | 
 | ; S390X-NEXT:    lgr %r13, %r2 | 
 | ; S390X-NEXT:    ld %f8, 0(%r2) | 
 | ; S390X-NEXT:    ld %f9, 8(%r2) | 
 | ; S390X-NEXT:    ld %f0, 16(%r2) | 
 | ; S390X-NEXT:    ld %f10, 0(%r3) | 
 | ; S390X-NEXT:    ld %f2, 16(%r3) | 
 | ; S390X-NEXT:    ld %f11, 8(%r3) | 
 | ; S390X-NEXT:    brasl %r14, atan2@PLT | 
 | ; S390X-NEXT:    ldr %f12, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f9 | 
 | ; S390X-NEXT:    ldr %f2, %f11 | 
 | ; S390X-NEXT:    brasl %r14, atan2@PLT | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f8 | 
 | ; S390X-NEXT:    ldr %f2, %f10 | 
 | ; S390X-NEXT:    brasl %r14, atan2@PLT | 
 | ; S390X-NEXT:    std %f0, 0(%r13) | 
 | ; S390X-NEXT:    std %f9, 8(%r13) | 
 | ; S390X-NEXT:    std %f12, 16(%r13) | 
 | ; S390X-NEXT:    ld %f8, 192(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 184(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f11, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f12, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r13, %r15, 304(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_atan2_v3f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r13, %r15, 104(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r13, -56 | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -224 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 384 | 
 | ; SZ13-NEXT:    std %f8, 216(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    std %f9, 208(%r15) # 8-byte Spill | 
 | ; SZ13-NEXT:    .cfi_offset %f8, -168 | 
 | ; SZ13-NEXT:    .cfi_offset %f9, -176 | 
 | ; SZ13-NEXT:    vl %v0, 0(%r2), 4 | 
 | ; SZ13-NEXT:    vl %v2, 0(%r3), 4 | 
 | ; SZ13-NEXT:    ld %f8, 16(%r2) | 
 | ; SZ13-NEXT:    ld %f9, 16(%r3) | 
 | ; SZ13-NEXT:    lgr %r13, %r2 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vst %v2, 192(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    # kill: def $f2d killed $f2d killed $v2 | 
 | ; SZ13-NEXT:    brasl %r14, atan2@PLT | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    vl %v0, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vl %v1, 192(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vrepg %v0, %v0, 1 | 
 | ; SZ13-NEXT:    vrepg %v2, %v1, 1 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d killed $v0 | 
 | ; SZ13-NEXT:    # kill: def $f2d killed $f2d killed $v2 | 
 | ; SZ13-NEXT:    brasl %r14, atan2@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v1, %v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ldr %f0, %f8 | 
 | ; SZ13-NEXT:    ldr %f2, %f9 | 
 | ; SZ13-NEXT:    brasl %r14, atan2@PLT | 
 | ; SZ13-NEXT:    mvc 0(16,%r13), 160(%r15) # 16-byte Folded Reload | 
 | ; SZ13-NEXT:    ld %f8, 216(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    ld %f9, 208(%r15) # 8-byte Reload | 
 | ; SZ13-NEXT:    std %f0, 16(%r13) | 
 | ; SZ13-NEXT:    lmg %r13, %r15, 328(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %c = load <3 x double>, ptr %a | 
 |   %d = load <3 x double>, ptr %b | 
 |   %atan2 = call <3 x double> @llvm.experimental.constrained.atan2.v3f64( | 
 |                           <3 x double> %c, | 
 |                           <3 x double> %d, | 
 |                           metadata !"round.dynamic", | 
 |                           metadata !"fpexcept.strict") #0 | 
 |   store <3 x double> %atan2, ptr %a | 
 |   ret void | 
 | } | 
 |  | 
 | define <4 x double> @constrained_vector_atan2_v4f64() #0 { | 
 | ; S390X-LABEL: constrained_vector_atan2_v4f64: | 
 | ; S390X:       # %bb.0: # %entry | 
 | ; S390X-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; S390X-NEXT:    .cfi_offset %r14, -48 | 
 | ; S390X-NEXT:    .cfi_offset %r15, -40 | 
 | ; S390X-NEXT:    aghi %r15, -184 | 
 | ; S390X-NEXT:    .cfi_def_cfa_offset 344 | 
 | ; S390X-NEXT:    std %f8, 176(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f9, 168(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    std %f10, 160(%r15) # 8-byte Spill | 
 | ; S390X-NEXT:    .cfi_offset %f8, -168 | 
 | ; S390X-NEXT:    .cfi_offset %f9, -176 | 
 | ; S390X-NEXT:    .cfi_offset %f10, -184 | 
 | ; S390X-NEXT:    larl %r1, .LCPI132_0 | 
 | ; S390X-NEXT:    ld %f0, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI132_1 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    brasl %r14, atan2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI132_2 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI132_3 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f8, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, atan2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI132_4 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI132_5 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f9, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, atan2@PLT | 
 | ; S390X-NEXT:    larl %r1, .LCPI132_6 | 
 | ; S390X-NEXT:    ld %f1, 0(%r1) | 
 | ; S390X-NEXT:    larl %r1, .LCPI132_7 | 
 | ; S390X-NEXT:    ld %f2, 0(%r1) | 
 | ; S390X-NEXT:    ldr %f10, %f0 | 
 | ; S390X-NEXT:    ldr %f0, %f1 | 
 | ; S390X-NEXT:    brasl %r14, atan2@PLT | 
 | ; S390X-NEXT:    ldr %f2, %f10 | 
 | ; S390X-NEXT:    ldr %f4, %f9 | 
 | ; S390X-NEXT:    ldr %f6, %f8 | 
 | ; S390X-NEXT:    ld %f8, 176(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f9, 168(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    ld %f10, 160(%r15) # 8-byte Reload | 
 | ; S390X-NEXT:    lmg %r14, %r15, 296(%r15) | 
 | ; S390X-NEXT:    br %r14 | 
 | ; | 
 | ; SZ13-LABEL: constrained_vector_atan2_v4f64: | 
 | ; SZ13:       # %bb.0: # %entry | 
 | ; SZ13-NEXT:    stmg %r14, %r15, 112(%r15) | 
 | ; SZ13-NEXT:    .cfi_offset %r14, -48 | 
 | ; SZ13-NEXT:    .cfi_offset %r15, -40 | 
 | ; SZ13-NEXT:    aghi %r15, -192 | 
 | ; SZ13-NEXT:    .cfi_def_cfa_offset 352 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI132_0 | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI132_1 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, atan2@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI132_2 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI132_3 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, atan2@PLT | 
 | ; SZ13-NEXT:    vl %v1, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v0, %v0, %v1 | 
 | ; SZ13-NEXT:    larl %r1, .LCPI132_4 | 
 | ; SZ13-NEXT:    vst %v0, 160(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI132_5 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, atan2@PLT | 
 | ; SZ13-NEXT:    larl %r1, .LCPI132_6 | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vst %v0, 176(%r15), 3 # 16-byte Spill | 
 | ; SZ13-NEXT:    ld %f0, 0(%r1) | 
 | ; SZ13-NEXT:    larl %r1, .LCPI132_7 | 
 | ; SZ13-NEXT:    ld %f2, 0(%r1) | 
 | ; SZ13-NEXT:    brasl %r14, atan2@PLT | 
 | ; SZ13-NEXT:    vl %v1, 176(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    vl %v24, 160(%r15), 3 # 16-byte Reload | 
 | ; SZ13-NEXT:    # kill: def $f0d killed $f0d def $v0 | 
 | ; SZ13-NEXT:    vmrhg %v26, %v0, %v1 | 
 | ; SZ13-NEXT:    lmg %r14, %r15, 304(%r15) | 
 | ; SZ13-NEXT:    br %r14 | 
 | entry: | 
 |   %atan2 = call <4 x double> @llvm.experimental.constrained.atan2.v4f64( | 
 |                              <4 x double> <double 42.0, double 42.1, | 
 |                                            double 42.2, double 42.3>, | 
 |                              <4 x double> <double 43.0, double 43.1, | 
 |                                            double 43.2, double 43.3>, | 
 |                              metadata !"round.dynamic", | 
 |                              metadata !"fpexcept.strict") #0 | 
 |   ret <4 x double> %atan2 | 
 | } | 
 |  | 
 | attributes #0 = { strictfp } | 
 |  | 
 | declare <2 x double> @llvm.experimental.constrained.fadd.v2f64(<2 x double>, <2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double>, <2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.fdiv.v2f64(<2 x double>, <2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.frem.v2f64(<2 x double>, <2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.pow.v2f64(<2 x double>, <2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.powi.v2f64(<2 x double>, i32, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.sin.v2f64(<2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.cos.v2f64(<2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.tan.v2f64(<2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.atan2.v2f64(<2 x double>, <2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.exp.v2f64(<2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.exp2.v2f64(<2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.log.v2f64(<2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.log10.v2f64(<2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.log2.v2f64(<2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.maxnum.v2f64(<2 x double>, <2 x double>, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.minnum.v2f64(<2 x double>, <2 x double>, metadata) | 
 | declare <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(<2 x double>, metadata, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(<2 x float>, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double>, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double>, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double>, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.roundeven.v2f64(<2 x double>, metadata) | 
 | declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata) | 
 |  | 
 | declare <1 x float> @llvm.experimental.constrained.fadd.v1f32(<1 x float>, <1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.fsub.v1f32(<1 x float>, <1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float>, <1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.fdiv.v1f32(<1 x float>, <1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.frem.v1f32(<1 x float>, <1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.sqrt.v1f32(<1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.pow.v1f32(<1 x float>, <1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.powi.v1f32(<1 x float>, i32, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.sin.v1f32(<1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.cos.v1f32(<1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.tan.v1f32(<1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.atan2.v1f32(<1 x float>, <1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.exp.v1f32(<1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.exp2.v1f32(<1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.log.v1f32(<1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.log10.v1f32(<1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.log2.v1f32(<1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.rint.v1f32(<1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(<1 x float>, metadata, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.maxnum.v1f32(<1 x float>, <1 x float>, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.minnum.v1f32(<1 x float>, <1 x float>, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(<1 x double>, metadata, metadata) | 
 | declare <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(<1 x float>, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.ceil.v1f32(<1 x float>, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.floor.v1f32(<1 x float>, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.round.v1f32(<1 x float>, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.roundeven.v1f32(<1 x float>, metadata) | 
 | declare <1 x float> @llvm.experimental.constrained.trunc.v1f32(<1 x float>, metadata) | 
 |  | 
 | declare <3 x float> @llvm.experimental.constrained.fadd.v3f32(<3 x float>, <3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.fadd.v3f64(<3 x double>, <3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.fsub.v3f32(<3 x float>, <3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.fsub.v3f64(<3 x double>, <3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.fmul.v3f32(<3 x float>, <3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.fmul.v3f64(<3 x double>, <3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.fdiv.v3f32(<3 x float>, <3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.fdiv.v3f64(<3 x double>, <3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.frem.v3f32(<3 x float>, <3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.frem.v3f64(<3 x double>, <3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.sqrt.v3f32(<3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.sqrt.v3f64(<3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.pow.v3f32(<3 x float>, <3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.pow.v3f64(<3 x double>, <3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.powi.v3f32(<3 x float>, i32, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.powi.v3f64(<3 x double>, i32, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.sin.v3f32(<3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.sin.v3f64(<3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.cos.v3f32(<3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.cos.v3f64(<3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.tan.v3f32(<3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.tan.v3f64(<3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.atan2.v3f32(<3 x float>, <3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.atan2.v3f64(<3 x double>, <3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.exp.v3f32(<3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.exp.v3f64(<3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.exp2.v3f32(<3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.exp2.v3f64(<3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.log.v3f32(<3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.log.v3f64(<3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.log10.v3f32(<3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.log10.v3f64(<3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.log2.v3f32(<3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.log2.v3f64(<3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.rint.v3f32(<3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.rint.v3f64(<3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(<3 x float>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(<3 x double>, metadata, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.maxnum.v3f32(<3 x float>, <3 x float>, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.maxnum.v3f64(<3 x double>, <3 x double>, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.minnum.v3f32(<3 x float>, <3 x float>, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.minnum.v3f64(<3 x double>, <3 x double>, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(<3 x double>, metadata, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(<3 x float>, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.ceil.v3f32(<3 x float>, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.ceil.v3f64(<3 x double>, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.floor.v3f32(<3 x float>, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.floor.v3f64(<3 x double>, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.round.v3f32(<3 x float>, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.round.v3f64(<3 x double>, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.roundeven.v3f32(<3 x float>, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.roundeven.v3f64(<3 x double>, metadata) | 
 | declare <3 x float> @llvm.experimental.constrained.trunc.v3f32(<3 x float>, metadata) | 
 | declare <3 x double> @llvm.experimental.constrained.trunc.v3f64(<3 x double>, metadata) | 
 |  | 
 | declare <4 x double> @llvm.experimental.constrained.fadd.v4f64(<4 x double>, <4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.fsub.v4f64(<4 x double>, <4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double>, <4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.fdiv.v4f64(<4 x double>, <4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.frem.v4f64(<4 x double>, <4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.pow.v4f64(<4 x double>, <4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.powi.v4f64(<4 x double>, i32, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.sin.v4f64(<4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.cos.v4f64(<4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.tan.v4f64(<4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.atan2.v4f64(<4 x double>, <4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.exp.v4f64(<4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.exp2.v4f64(<4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.log.v4f64(<4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.log10.v4f64(<4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.log2.v4f64(<4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.rint.v4f64(<4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(<4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.maxnum.v4f64(<4 x double>, <4 x double>, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.minnum.v4f64(<4 x double>, <4 x double>, metadata) | 
 | declare <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(<4 x double>, metadata, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float>, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.ceil.v4f64(<4 x double>, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.floor.v4f64(<4 x double>, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.round.v4f64(<4 x double>, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.roundeven.v4f64(<4 x double>, metadata) | 
 | declare <4 x double> @llvm.experimental.constrained.trunc.v4f64(<4 x double>, metadata) |