[llvm] 4d788fb - [PowerPC] Split tests for constrained intrinsics

Serge Pavlov via llvm-commits llvm-commits at lists.llvm.org
Mon May 31 22:31:43 PDT 2021


Author: Serge Pavlov
Date: 2021-06-01T12:30:17+07:00
New Revision: 4d788fb80ff3184089df435b45f29396119cc780

URL: https://github.com/llvm/llvm-project/commit/4d788fb80ff3184089df435b45f29396119cc780
DIFF: https://github.com/llvm/llvm-project/commit/4d788fb80ff3184089df435b45f29396119cc780.diff

LOG: [PowerPC] Split tests for constrained intrinsics

The test CodeGen/PowerPC/vector-constrained-fp-intrinsics.ll checks code
generation for constrained floating point intrinsics. Many test cases in
it were implemented using operations on constants. Constant folding of
constrained intrinsics would make these test cases almost useless,
because they would check only constant loading.

To keep the tests useful, operations on constants were replaced with
operations on function parameters.

Differential Revision: https://reviews.llvm.org/D103259

Added: 
    

Modified: 
    llvm/test/CodeGen/PowerPC/vector-constrained-fp-intrinsics.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/PowerPC/vector-constrained-fp-intrinsics.ll b/llvm/test/CodeGen/PowerPC/vector-constrained-fp-intrinsics.ll
index d8b5dfba96fd..3cbfa1eabd66 100644
--- a/llvm/test/CodeGen/PowerPC/vector-constrained-fp-intrinsics.ll
+++ b/llvm/test/CodeGen/PowerPC/vector-constrained-fp-intrinsics.ll
@@ -2,138 +2,118 @@
 ; RUN: llc -O3 -mtriple=powerpc64le-linux-gnu < %s | FileCheck --check-prefix=PC64LE %s
 ; RUN: llc -O3 -mtriple=powerpc64le-linux-gnu -mcpu=pwr9 < %s | FileCheck --check-prefix=PC64LE9 %s
 
-define <1 x float> @constrained_vector_fdiv_v1f32() #0 {
+define <1 x float> @constrained_vector_fdiv_v1f32(<1 x float> %x, <1 x float> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fdiv_v1f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI0_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI0_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI0_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI0_1 at toc@l(4)
-; PC64LE-NEXT:    xsdivsp 1, 1, 0
+; PC64LE-NEXT:    xsdivsp 1, 1, 2
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fdiv_v1f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI0_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI0_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI0_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI0_1 at toc@l(3)
-; PC64LE9-NEXT:    xsdivsp 1, 1, 0
+; PC64LE9-NEXT:    xsdivsp 1, 1, 2
 ; PC64LE9-NEXT:    blr
 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>,
+           <1 x float> %x,
+           <1 x float> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <1 x float> %div
 }
 
-define <2 x double> @constrained_vector_fdiv_v2f64() #0 {
+define <2 x double> @constrained_vector_fdiv_v2f64(<2 x double> %x, <2 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fdiv_v2f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI1_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI1_1 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI1_0 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI1_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    lxvd2x 1, 0, 4
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
-; PC64LE-NEXT:    xvdivdp 34, 1, 0
+; PC64LE-NEXT:    xvdivdp 34, 34, 35
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fdiv_v2f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI1_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI1_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI1_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI1_1 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
-; PC64LE9-NEXT:    xvdivdp 34, 1, 0
+; PC64LE9-NEXT:    xvdivdp 34, 34, 35
 ; PC64LE9-NEXT:    blr
 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>,
+           <2 x double> %x,
+           <2 x double> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <2 x double> %div
 }
 
-define <3 x float> @constrained_vector_fdiv_v3f32() #0 {
+define <3 x float> @constrained_vector_fdiv_v3f32(<3 x float> %x, <3 x float> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fdiv_v3f32:
 ; PC64LE:       # %bb.0: # %entry
+; PC64LE-NEXT:    xxswapd 0, 35
+; PC64LE-NEXT:    xxsldwi 1, 35, 35, 3
 ; PC64LE-NEXT:    addis 3, 2, .LCPI2_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI2_3 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI2_2 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI2_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI2_3 at toc@l(4)
-; PC64LE-NEXT:    lfs 2, .LCPI2_2 at toc@l(5)
-; PC64LE-NEXT:    addis 3, 2, .LCPI2_1 at toc@ha
-; PC64LE-NEXT:    xsdivsp 1, 1, 0
-; PC64LE-NEXT:    lfs 3, .LCPI2_1 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI2_4 at toc@ha
-; PC64LE-NEXT:    xsdivsp 2, 2, 0
-; PC64LE-NEXT:    addi 3, 3, .LCPI2_4 at toc@l
+; PC64LE-NEXT:    xxsldwi 2, 34, 34, 3
+; PC64LE-NEXT:    xxswapd 3, 34
+; PC64LE-NEXT:    addi 3, 3, .LCPI2_0 at toc@l
+; PC64LE-NEXT:    xxsldwi 4, 35, 35, 1
+; PC64LE-NEXT:    xxsldwi 5, 34, 34, 1
 ; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvspdpn 2, 2
+; PC64LE-NEXT:    xscvspdpn 3, 3
+; PC64LE-NEXT:    xsdivsp 1, 2, 1
+; PC64LE-NEXT:    xscvspdpn 2, 4
 ; PC64LE-NEXT:    xsdivsp 0, 3, 0
+; PC64LE-NEXT:    xscvspdpn 3, 5
+; PC64LE-NEXT:    xsdivsp 2, 3, 2
 ; PC64LE-NEXT:    xscvdpspn 34, 1
-; PC64LE-NEXT:    xscvdpspn 35, 2
-; PC64LE-NEXT:    vmrghw 2, 3, 2
 ; PC64LE-NEXT:    xscvdpspn 35, 0
+; PC64LE-NEXT:    vmrghw 2, 3, 2
+; PC64LE-NEXT:    xscvdpspn 35, 2
 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fdiv_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
+; PC64LE9-NEXT:    xxsldwi 0, 35, 35, 1
+; PC64LE9-NEXT:    xxsldwi 1, 34, 34, 1
 ; PC64LE9-NEXT:    addis 3, 2, .LCPI2_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI2_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI2_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI2_1 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI2_2 at toc@ha
-; PC64LE9-NEXT:    xsdivsp 1, 1, 0
-; PC64LE9-NEXT:    lfs 2, .LCPI2_2 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI2_3 at toc@ha
-; PC64LE9-NEXT:    lfs 3, .LCPI2_3 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI2_4 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI2_4 at toc@l
+; PC64LE9-NEXT:    addi 3, 3, .LCPI2_0 at toc@l
+; PC64LE9-NEXT:    xxswapd 2, 34
+; PC64LE9-NEXT:    xxsldwi 3, 34, 34, 3
+; PC64LE9-NEXT:    xscvspdpn 0, 0
+; PC64LE9-NEXT:    xscvspdpn 1, 1
+; PC64LE9-NEXT:    xscvspdpn 2, 2
+; PC64LE9-NEXT:    xscvspdpn 3, 3
 ; PC64LE9-NEXT:    lxvx 36, 0, 3
-; PC64LE9-NEXT:    xsdivsp 2, 2, 0
-; PC64LE9-NEXT:    xsdivsp 0, 3, 0
-; PC64LE9-NEXT:    xscvdpspn 35, 2
-; PC64LE9-NEXT:    xscvdpspn 34, 0
-; PC64LE9-NEXT:    vmrghw 2, 3, 2
+; PC64LE9-NEXT:    xsdivsp 0, 1, 0
+; PC64LE9-NEXT:    xxswapd 1, 35
+; PC64LE9-NEXT:    xscvspdpn 1, 1
+; PC64LE9-NEXT:    xsdivsp 1, 2, 1
+; PC64LE9-NEXT:    xxsldwi 2, 35, 35, 3
+; PC64LE9-NEXT:    xscvspdpn 2, 2
+; PC64LE9-NEXT:    xsdivsp 2, 3, 2
 ; PC64LE9-NEXT:    xscvdpspn 35, 1
+; PC64LE9-NEXT:    xscvdpspn 34, 2
+; PC64LE9-NEXT:    vmrghw 2, 3, 2
+; PC64LE9-NEXT:    xscvdpspn 35, 0
 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
 ; PC64LE9-NEXT:    blr
 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>,
+           <3 x float> %x,
+           <3 x float> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <3 x float> %div
 }
 
-define <3 x double> @constrained_vector_fdiv_v3f64() #0 {
+define <3 x double> @constrained_vector_fdiv_v3f64(<3 x double> %x, <3 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fdiv_v3f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI3_2 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI3_3 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI3_2 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI3_3 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    lxvd2x 1, 0, 4
-; PC64LE-NEXT:    addis 3, 2, .LCPI3_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI3_1 at toc@ha
-; PC64LE-NEXT:    lfs 3, .LCPI3_0 at toc@l(3)
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE-NEXT:    # kill: def $f5 killed $f5 def $vsl5
+; PC64LE-NEXT:    # kill: def $f4 killed $f4 def $vsl4
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE-NEXT:    xxmrghd 0, 5, 4
+; PC64LE-NEXT:    xsdivdp 3, 3, 6
+; PC64LE-NEXT:    xxmrghd 1, 2, 1
 ; PC64LE-NEXT:    xvdivdp 2, 1, 0
-; PC64LE-NEXT:    lfs 0, .LCPI3_1 at toc@l(4)
-; PC64LE-NEXT:    xsdivdp 3, 0, 3
 ; PC64LE-NEXT:    xxswapd 1, 2
 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
@@ -141,17 +121,13 @@ define <3 x double> @constrained_vector_fdiv_v3f64() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fdiv_v3f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI3_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI3_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI3_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI3_1 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI3_2 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI3_2 at toc@l
-; PC64LE9-NEXT:    xsdivdp 3, 1, 0
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI3_3 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI3_3 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
+; PC64LE9-NEXT:    # kill: def $f5 killed $f5 def $vsl5
+; PC64LE9-NEXT:    # kill: def $f4 killed $f4 def $vsl4
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE9-NEXT:    xxmrghd 0, 5, 4
+; PC64LE9-NEXT:    xxmrghd 1, 2, 1
+; PC64LE9-NEXT:    xsdivdp 3, 3, 6
 ; PC64LE9-NEXT:    xvdivdp 2, 1, 0
 ; PC64LE9-NEXT:    xxswapd 1, 2
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
@@ -159,67 +135,40 @@ define <3 x double> @constrained_vector_fdiv_v3f64() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %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> <double 1.000000e+01, double 1.000000e+01, double 1.000000e+01>,
+           <3 x double> %x,
+           <3 x double> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <3 x double> %div
 }
 
-define <4 x double> @constrained_vector_fdiv_v4f64() #0 {
+define <4 x double> @constrained_vector_fdiv_v4f64(<4 x double> %x, <4 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fdiv_v4f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI4_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI4_1 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI4_2 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI4_0 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    addi 3, 4, .LCPI4_1 at toc@l
-; PC64LE-NEXT:    addi 4, 5, .LCPI4_2 at toc@l
-; PC64LE-NEXT:    lxvd2x 1, 0, 3
-; PC64LE-NEXT:    lxvd2x 2, 0, 4
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
-; PC64LE-NEXT:    xxswapd 2, 2
-; PC64LE-NEXT:    xvdivdp 35, 1, 0
-; PC64LE-NEXT:    xvdivdp 34, 2, 0
+; PC64LE-NEXT:    xvdivdp 35, 35, 37
+; PC64LE-NEXT:    xvdivdp 34, 34, 36
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fdiv_v4f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI4_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI4_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI4_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI4_1 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI4_2 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI4_2 at toc@l
-; PC64LE9-NEXT:    xvdivdp 35, 1, 0
-; PC64LE9-NEXT:    lxvx 1, 0, 3
-; PC64LE9-NEXT:    xvdivdp 34, 1, 0
+; PC64LE9-NEXT:    xvdivdp 35, 35, 37
+; PC64LE9-NEXT:    xvdivdp 34, 34, 36
 ; PC64LE9-NEXT:    blr
 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>,
+           <4 x double> %x,
+           <4 x double> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <4 x double> %div
 }
 
-define <1 x float> @constrained_vector_frem_v1f32() #0 {
+define <1 x float> @constrained_vector_frem_v1f32(<1 x float> %x, <1 x float> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_frem_v1f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
 ; PC64LE-NEXT:    stdu 1, -32(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI5_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI5_1 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI5_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 2, .LCPI5_1 at toc@l(4)
 ; PC64LE-NEXT:    bl fmodf
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    addi 1, 1, 32
@@ -232,10 +181,6 @@ define <1 x float> @constrained_vector_frem_v1f32() #0 {
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
 ; PC64LE9-NEXT:    stdu 1, -32(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI5_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI5_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI5_1 at toc@ha
-; PC64LE9-NEXT:    lfs 2, .LCPI5_1 at toc@l(3)
 ; PC64LE9-NEXT:    bl fmodf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    addi 1, 1, 32
@@ -244,41 +189,47 @@ define <1 x float> @constrained_vector_frem_v1f32() #0 {
 ; PC64LE9-NEXT:    blr
 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>,
+           <1 x float> %x,
+           <1 x float> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <1 x float> %rem
 }
 
-define <2 x double> @constrained_vector_frem_v2f64() #0 {
+define <2 x double> @constrained_vector_frem_v2f64(<2 x double> %x, <2 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_frem_v2f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -80(1)
-; PC64LE-NEXT:    addis 4, 2, .LCPI6_1 at toc@ha
-; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stdu 1, -96(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stxvd2x 61, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 80
+; PC64LE-NEXT:    vmr 30, 2
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI6_0 at toc@ha
-; PC64LE-NEXT:    lfs 31, .LCPI6_1 at toc@l(4)
-; PC64LE-NEXT:    lfs 1, .LCPI6_0 at toc@l(3)
-; PC64LE-NEXT:    fmr 2, 31
+; PC64LE-NEXT:    vmr 31, 3
+; PC64LE-NEXT:    xxlor 1, 62, 62
+; PC64LE-NEXT:    xxlor 2, 63, 63
 ; PC64LE-NEXT:    bl fmod
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI6_2 at toc@ha
-; PC64LE-NEXT:    fmr 2, 31
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI6_2 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 62
+; PC64LE-NEXT:    xxswapd 2, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE-NEXT:    bl fmod
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 80
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 34, 1, 63
-; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    xxmrghd 34, 61, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 80
+; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 61, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -287,171 +238,191 @@ define <2 x double> @constrained_vector_frem_v2f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -64(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI6_0 at toc@ha
-; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfs 1, .LCPI6_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI6_1 at toc@ha
-; PC64LE9-NEXT:    lfs 31, .LCPI6_1 at toc@l(3)
-; PC64LE9-NEXT:    fmr 2, 31
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    stxv 62, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 64(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 3
+; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
+; PC64LE9-NEXT:    vmr 30, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 62, 62
+; PC64LE9-NEXT:    stxv 61, 32(1) # 16-byte Folded Spill
 ; PC64LE9-NEXT:    bl fmod
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI6_2 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    fmr 2, 31
-; PC64LE9-NEXT:    lfs 1, .LCPI6_2 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 62
+; PC64LE9-NEXT:    xxswapd 2, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE9-NEXT:    bl fmod
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 34, 1, 63
-; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 64
+; PC64LE9-NEXT:    xxmrghd 34, 61, 1
+; PC64LE9-NEXT:    lxv 63, 64(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 61, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 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>,
+           <2 x double> %x,
+           <2 x double> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <2 x double> %rem
 }
 
-define <3 x float> @constrained_vector_frem_v3f32() #0 {
+define <3 x float> @constrained_vector_frem_v3f32(<3 x float> %x, <3 x float> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_frem_v3f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
-; PC64LE-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
-; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
-; PC64LE-NEXT:    addis 4, 2, .LCPI7_1 at toc@ha
-; PC64LE-NEXT:    addis 3, 2, .LCPI7_0 at toc@ha
-; PC64LE-NEXT:    lfs 31, .LCPI7_1 at toc@l(4)
-; PC64LE-NEXT:    lfs 1, .LCPI7_0 at toc@l(3)
-; PC64LE-NEXT:    fmr 2, 31
+; PC64LE-NEXT:    stdu 1, -96(1)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE-NEXT:    xxsldwi 2, 35, 35, 1
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    stfd 30, 80(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    xscvspdpn 1, 0
+; PC64LE-NEXT:    xscvspdpn 2, 2
+; PC64LE-NEXT:    vmr 31, 3
+; PC64LE-NEXT:    vmr 30, 2
 ; PC64LE-NEXT:    bl fmodf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI7_2 at toc@ha
-; PC64LE-NEXT:    fmr 2, 31
-; PC64LE-NEXT:    fmr 30, 1
-; PC64LE-NEXT:    lfs 1, .LCPI7_2 at toc@l(3)
+; PC64LE-NEXT:    xxswapd 0, 62
+; PC64LE-NEXT:    xxswapd 2, 63
+; PC64LE-NEXT:    fmr 31, 1
+; PC64LE-NEXT:    xscvspdpn 1, 0
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    bl fmodf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI7_3 at toc@ha
-; PC64LE-NEXT:    fmr 2, 31
-; PC64LE-NEXT:    fmr 29, 1
-; PC64LE-NEXT:    lfs 1, .LCPI7_3 at toc@l(3)
+; PC64LE-NEXT:    xxsldwi 0, 62, 62, 3
+; PC64LE-NEXT:    xxsldwi 2, 63, 63, 3
+; PC64LE-NEXT:    fmr 30, 1
+; PC64LE-NEXT:    xscvspdpn 1, 0
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    bl fmodf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    xscvdpspn 34, 29
-; PC64LE-NEXT:    addis 3, 2, .LCPI7_4 at toc@ha
+; PC64LE-NEXT:    xscvdpspn 34, 30
+; PC64LE-NEXT:    addis 3, 2, .LCPI7_0 at toc@ha
+; PC64LE-NEXT:    lfd 30, 80(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    xscvdpspn 35, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI7_4 at toc@l
+; PC64LE-NEXT:    addi 3, 3, .LCPI7_0 at toc@l
 ; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    vmrghw 2, 2, 3
-; PC64LE-NEXT:    xscvdpspn 35, 30
+; PC64LE-NEXT:    xscvdpspn 35, 31
+; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
-; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
-; PC64LE-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_frem_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
-; PC64LE9-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -64(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI7_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI7_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI7_1 at toc@ha
-; PC64LE9-NEXT:    lfs 31, .LCPI7_1 at toc@l(3)
-; PC64LE9-NEXT:    fmr 2, 31
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    xxsldwi 0, 35, 35, 1
+; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xscvspdpn 2, 0
+; PC64LE9-NEXT:    vmr 31, 3
+; PC64LE9-NEXT:    vmr 30, 2
 ; PC64LE9-NEXT:    bl fmodf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI7_2 at toc@ha
-; PC64LE9-NEXT:    fmr 30, 1
-; PC64LE9-NEXT:    fmr 2, 31
-; PC64LE9-NEXT:    lfs 1, .LCPI7_2 at toc@l(3)
+; PC64LE9-NEXT:    xxswapd 0, 62
+; PC64LE9-NEXT:    fmr 31, 1
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    xxswapd 0, 63
+; PC64LE9-NEXT:    xscvspdpn 2, 0
 ; PC64LE9-NEXT:    bl fmodf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI7_3 at toc@ha
-; PC64LE9-NEXT:    fmr 29, 1
-; PC64LE9-NEXT:    fmr 2, 31
-; PC64LE9-NEXT:    lfs 1, .LCPI7_3 at toc@l(3)
+; PC64LE9-NEXT:    xxsldwi 0, 62, 62, 3
+; PC64LE9-NEXT:    fmr 30, 1
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    xxsldwi 0, 63, 63, 3
+; PC64LE9-NEXT:    xscvspdpn 2, 0
 ; PC64LE9-NEXT:    bl fmodf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    xscvdpspn 34, 1
-; PC64LE9-NEXT:    xscvdpspn 35, 29
-; PC64LE9-NEXT:    addis 3, 2, .LCPI7_4 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI7_4 at toc@l
+; PC64LE9-NEXT:    xscvdpspn 35, 30
+; PC64LE9-NEXT:    addis 3, 2, .LCPI7_0 at toc@ha
+; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 3, 3, .LCPI7_0 at toc@l
 ; PC64LE9-NEXT:    lxvx 36, 0, 3
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
-; PC64LE9-NEXT:    xscvdpspn 35, 30
+; PC64LE9-NEXT:    xscvdpspn 35, 31
+; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
-; PC64LE9-NEXT:    addi 1, 1, 64
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
-; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    mtlr 0
-; PC64LE9-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    blr
 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>,
+           <3 x float> %x,
+           <3 x float> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <3 x float> %rem
 }
 
-define <3 x double> @constrained_vector_frem_v3f64() #0 {
+define <3 x double> @constrained_vector_frem_v3f64(<3 x double> %x, <3 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_frem_v3f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -80(1)
-; PC64LE-NEXT:    addis 4, 2, .LCPI8_1 at toc@ha
-; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stdu 1, -96(1)
+; PC64LE-NEXT:    stfd 28, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    fmr 28, 2
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    fmr 2, 4
+; PC64LE-NEXT:    stfd 29, 72(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 30, 80(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI8_0 at toc@ha
-; PC64LE-NEXT:    lfs 31, .LCPI8_1 at toc@l(4)
-; PC64LE-NEXT:    lfs 1, .LCPI8_0 at toc@l(3)
-; PC64LE-NEXT:    fmr 2, 31
+; PC64LE-NEXT:    fmr 31, 6
+; PC64LE-NEXT:    fmr 30, 5
+; PC64LE-NEXT:    fmr 29, 3
 ; PC64LE-NEXT:    bl fmod
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI8_2 at toc@ha
-; PC64LE-NEXT:    fmr 2, 31
 ; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI8_2 at toc@l(3)
+; PC64LE-NEXT:    fmr 1, 28
+; PC64LE-NEXT:    fmr 2, 30
 ; PC64LE-NEXT:    bl fmod
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI8_3 at toc@ha
-; PC64LE-NEXT:    fmr 2, 31
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
 ; PC64LE-NEXT:    xxmrghd 63, 1, 63
-; PC64LE-NEXT:    lfs 1, .LCPI8_3 at toc@l(3)
+; PC64LE-NEXT:    fmr 2, 31
+; PC64LE-NEXT:    fmr 1, 29
 ; PC64LE-NEXT:    bl fmod
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    li 3, 48
 ; PC64LE-NEXT:    xxlor 2, 63, 63
-; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    lfd 30, 80(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    lfd 29, 72(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    fmr 3, 1
+; PC64LE-NEXT:    lfd 28, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    fmr 1, 0
-; PC64LE-NEXT:    addi 1, 1, 80
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -460,94 +431,110 @@ define <3 x double> @constrained_vector_frem_v3f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -64(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI8_0 at toc@ha
-; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    stfd 28, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    fmr 28, 2
 ; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfs 1, .LCPI8_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI8_1 at toc@ha
-; PC64LE9-NEXT:    lfs 31, .LCPI8_1 at toc@l(3)
-; PC64LE9-NEXT:    fmr 2, 31
+; PC64LE9-NEXT:    fmr 2, 4
+; PC64LE9-NEXT:    stfd 29, 56(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    fmr 31, 6
+; PC64LE9-NEXT:    fmr 30, 5
+; PC64LE9-NEXT:    fmr 29, 3
 ; PC64LE9-NEXT:    bl fmod
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI8_2 at toc@ha
 ; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    fmr 2, 31
-; PC64LE9-NEXT:    lfs 1, .LCPI8_2 at toc@l(3)
+; PC64LE9-NEXT:    fmr 1, 28
+; PC64LE9-NEXT:    fmr 2, 30
 ; PC64LE9-NEXT:    bl fmod
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI8_3 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
 ; PC64LE9-NEXT:    xxmrghd 63, 1, 63
+; PC64LE9-NEXT:    fmr 1, 29
 ; PC64LE9-NEXT:    fmr 2, 31
-; PC64LE9-NEXT:    lfs 1, .LCPI8_3 at toc@l(3)
 ; PC64LE9-NEXT:    bl fmod
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    fmr 3, 1
 ; PC64LE9-NEXT:    xxswapd 1, 63
 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
 ; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
-; PC64LE9-NEXT:    addi 1, 1, 64
+; PC64LE9-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    lfd 29, 56(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    lfd 28, 48(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %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> <double 1.000000e+01, double 1.000000e+01, double 1.000000e+01>,
+           <3 x double> %x,
+           <3 x double> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <3 x double> %rem
 }
 
-define <4 x double> @constrained_vector_frem_v4f64() #0 {
+define <4 x double> @constrained_vector_frem_v4f64(<4 x double> %x, <4 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_frem_v4f64:
 ; PC64LE:       # %bb.0:
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -96(1)
-; PC64LE-NEXT:    addis 4, 2, .LCPI9_1 at toc@ha
-; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stdu 1, -128(1)
 ; PC64LE-NEXT:    li 3, 48
-; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 59, 1, 3 # 16-byte Folded Spill
 ; PC64LE-NEXT:    li 3, 64
-; PC64LE-NEXT:    lfs 31, .LCPI9_1 at toc@l(4)
+; PC64LE-NEXT:    stxvd2x 60, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 80
+; PC64LE-NEXT:    vmr 28, 2
+; PC64LE-NEXT:    stxvd2x 61, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 96
+; PC64LE-NEXT:    vmr 29, 3
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 30, 4
+; PC64LE-NEXT:    li 3, 112
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI9_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI9_0 at toc@l(3)
-; PC64LE-NEXT:    fmr 2, 31
+; PC64LE-NEXT:    vmr 31, 5
+; PC64LE-NEXT:    xxlor 1, 60, 60
+; PC64LE-NEXT:    xxlor 2, 62, 62
 ; PC64LE-NEXT:    bl fmod
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI9_2 at toc@ha
-; PC64LE-NEXT:    fmr 2, 31
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI9_2 at toc@l(3)
+; PC64LE-NEXT:    xxlor 59, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 60
+; PC64LE-NEXT:    xxswapd 2, 62
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE-NEXT:    bl fmod
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI9_3 at toc@ha
-; PC64LE-NEXT:    fmr 2, 31
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 1, 63
-; PC64LE-NEXT:    lfs 1, .LCPI9_3 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 62, 59, 1
+; PC64LE-NEXT:    xxlor 2, 63, 63
+; PC64LE-NEXT:    xxlor 1, 61, 61
 ; PC64LE-NEXT:    bl fmod
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI9_4 at toc@ha
-; PC64LE-NEXT:    fmr 2, 31
-; PC64LE-NEXT:    xxlor 62, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI9_4 at toc@l(3)
+; PC64LE-NEXT:    xxlor 60, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 61
+; PC64LE-NEXT:    xxswapd 2, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE-NEXT:    bl fmod
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 64
-; PC64LE-NEXT:    vmr 2, 31
+; PC64LE-NEXT:    li 3, 112
+; PC64LE-NEXT:    vmr 2, 30
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 35, 1, 62
-; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    xxmrghd 35, 60, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 96
 ; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 96
+; PC64LE-NEXT:    li 3, 80
+; PC64LE-NEXT:    lxvd2x 61, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    lxvd2x 60, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 59, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 128
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -556,135 +543,121 @@ define <4 x double> @constrained_vector_frem_v4f64() #0 {
 ; PC64LE9:       # %bb.0:
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -80(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI9_0 at toc@ha
-; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfs 1, .LCPI9_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI9_1 at toc@ha
-; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfs 31, .LCPI9_1 at toc@l(3)
-; PC64LE9-NEXT:    fmr 2, 31
+; PC64LE9-NEXT:    stdu 1, -112(1)
+; PC64LE9-NEXT:    stxv 60, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stxv 62, 80(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 30, 4
+; PC64LE9-NEXT:    xscpsgndp 2, 62, 62
+; PC64LE9-NEXT:    vmr 28, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 60, 60
+; PC64LE9-NEXT:    stxv 59, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stxv 61, 64(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 96(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 5
+; PC64LE9-NEXT:    vmr 29, 3
 ; PC64LE9-NEXT:    bl fmod
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI9_2 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    fmr 2, 31
-; PC64LE9-NEXT:    lfs 1, .LCPI9_2 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 59, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 60
+; PC64LE9-NEXT:    xxswapd 2, 62
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE9-NEXT:    bl fmod
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI9_3 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 1, 63
-; PC64LE9-NEXT:    fmr 2, 31
-; PC64LE9-NEXT:    lfs 1, .LCPI9_3 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 62, 59, 1
+; PC64LE9-NEXT:    xscpsgndp 1, 61, 61
+; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
 ; PC64LE9-NEXT:    bl fmod
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI9_4 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
-; PC64LE9-NEXT:    fmr 2, 31
-; PC64LE9-NEXT:    lfs 1, .LCPI9_4 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 60, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 61
+; PC64LE9-NEXT:    xxswapd 2, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE9-NEXT:    bl fmod
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 35, 1, 62
-; PC64LE9-NEXT:    vmr 2, 31
-; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 80
+; PC64LE9-NEXT:    xxmrghd 35, 60, 1
+; PC64LE9-NEXT:    vmr 2, 30
+; PC64LE9-NEXT:    lxv 63, 96(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 80(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 61, 64(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 60, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 59, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 112
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
   %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>,
+           <4 x double> %x,
+           <4 x double> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <4 x double> %rem
 }
 
-define <1 x float> @constrained_vector_fmul_v1f32() #0 {
+define <1 x float> @constrained_vector_fmul_v1f32(<1 x float> %x, <1 x float> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fmul_v1f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI10_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI10_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI10_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI10_1 at toc@l(4)
-; PC64LE-NEXT:    xsmulsp 1, 1, 0
+; PC64LE-NEXT:    xsmulsp 1, 1, 2
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fmul_v1f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI10_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI10_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI10_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI10_1 at toc@l(3)
-; PC64LE9-NEXT:    xsmulsp 1, 1, 0
+; PC64LE9-NEXT:    xsmulsp 1, 1, 2
 ; PC64LE9-NEXT:    blr
 entry:
   %mul = call <1 x float> @llvm.experimental.constrained.fmul.v1f32(
-           <1 x float> <float 0x7FF0000000000000>,
-           <1 x float> <float 2.000000e+00>,
+           <1 x float> %x,
+           <1 x float> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <1 x float> %mul
 }
 
-define <2 x double> @constrained_vector_fmul_v2f64() #0 {
+define <2 x double> @constrained_vector_fmul_v2f64(<2 x double> %x, <2 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fmul_v2f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI11_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI11_1 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI11_0 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI11_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    lxvd2x 1, 0, 4
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
-; PC64LE-NEXT:    xvmuldp 34, 1, 0
+; PC64LE-NEXT:    xvmuldp 34, 34, 35
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fmul_v2f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI11_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI11_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI11_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI11_1 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
-; PC64LE9-NEXT:    xvmuldp 34, 1, 0
+; PC64LE9-NEXT:    xvmuldp 34, 34, 35
 ; PC64LE9-NEXT:    blr
 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>,
+           <2 x double> %x,
+           <2 x double> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <2 x double> %mul
 }
 
-define <3 x float> @constrained_vector_fmul_v3f32() #0 {
+define <3 x float> @constrained_vector_fmul_v3f32(<3 x float> %x, <3 x float> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fmul_v3f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI12_1 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI12_3 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI12_2 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI12_1 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI12_3 at toc@l(4)
-; PC64LE-NEXT:    lfs 2, .LCPI12_2 at toc@l(5)
+; PC64LE-NEXT:    xxsldwi 0, 35, 35, 3
+; PC64LE-NEXT:    xxsldwi 1, 34, 34, 3
 ; PC64LE-NEXT:    addis 3, 2, .LCPI12_0 at toc@ha
-; PC64LE-NEXT:    xsmulsp 1, 0, 1
-; PC64LE-NEXT:    lfs 3, .LCPI12_0 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI12_4 at toc@ha
-; PC64LE-NEXT:    xsmulsp 2, 0, 2
-; PC64LE-NEXT:    addi 3, 3, .LCPI12_4 at toc@l
+; PC64LE-NEXT:    xxswapd 2, 35
+; PC64LE-NEXT:    xxswapd 3, 34
+; PC64LE-NEXT:    addi 3, 3, .LCPI12_0 at toc@l
+; PC64LE-NEXT:    xxsldwi 4, 35, 35, 1
 ; PC64LE-NEXT:    lvx 4, 0, 3
-; PC64LE-NEXT:    xsmulsp 0, 0, 3
-; PC64LE-NEXT:    xscvdpspn 34, 1
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvspdpn 2, 2
+; PC64LE-NEXT:    xscvspdpn 3, 3
+; PC64LE-NEXT:    xscvspdpn 4, 4
+; PC64LE-NEXT:    xsmulsp 0, 1, 0
+; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
+; PC64LE-NEXT:    xsmulsp 2, 3, 2
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvdpspn 34, 0
 ; PC64LE-NEXT:    xscvdpspn 35, 2
+; PC64LE-NEXT:    xsmulsp 0, 1, 4
 ; PC64LE-NEXT:    vmrghw 2, 3, 2
 ; PC64LE-NEXT:    xscvdpspn 35, 0
 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
@@ -692,53 +665,50 @@ define <3 x float> @constrained_vector_fmul_v3f32() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fmul_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
+; PC64LE9-NEXT:    xxsldwi 0, 35, 35, 1
+; PC64LE9-NEXT:    xxsldwi 1, 34, 34, 1
 ; PC64LE9-NEXT:    addis 3, 2, .LCPI12_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI12_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI12_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI12_1 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI12_2 at toc@ha
-; PC64LE9-NEXT:    xsmulsp 0, 1, 0
-; PC64LE9-NEXT:    lfs 2, .LCPI12_2 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI12_3 at toc@ha
-; PC64LE9-NEXT:    lfs 3, .LCPI12_3 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI12_4 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI12_4 at toc@l
+; PC64LE9-NEXT:    addi 3, 3, .LCPI12_0 at toc@l
+; PC64LE9-NEXT:    xxswapd 2, 34
+; PC64LE9-NEXT:    xxsldwi 3, 34, 34, 3
+; PC64LE9-NEXT:    xscvspdpn 0, 0
+; PC64LE9-NEXT:    xscvspdpn 1, 1
+; PC64LE9-NEXT:    xscvspdpn 2, 2
+; PC64LE9-NEXT:    xscvspdpn 3, 3
 ; PC64LE9-NEXT:    lxvx 36, 0, 3
-; PC64LE9-NEXT:    xsmulsp 2, 1, 2
-; PC64LE9-NEXT:    xsmulsp 1, 1, 3
-; PC64LE9-NEXT:    xscvdpspn 35, 2
-; PC64LE9-NEXT:    xscvdpspn 34, 1
+; PC64LE9-NEXT:    xsmulsp 0, 1, 0
+; PC64LE9-NEXT:    xxswapd 1, 35
+; PC64LE9-NEXT:    xscvspdpn 1, 1
+; PC64LE9-NEXT:    xsmulsp 1, 2, 1
+; PC64LE9-NEXT:    xxsldwi 2, 35, 35, 3
+; PC64LE9-NEXT:    xscvspdpn 2, 2
+; PC64LE9-NEXT:    xsmulsp 2, 3, 2
+; PC64LE9-NEXT:    xscvdpspn 35, 1
+; PC64LE9-NEXT:    xscvdpspn 34, 2
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    xscvdpspn 35, 0
 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
 ; PC64LE9-NEXT:    blr
 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>,
+           <3 x float> %x,
+           <3 x float> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <3 x float> %mul
 }
 
-define <3 x double> @constrained_vector_fmul_v3f64() #0 {
+define <3 x double> @constrained_vector_fmul_v3f64(<3 x double> %x, <3 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fmul_v3f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI13_2 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI13_3 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI13_2 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI13_3 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    lxvd2x 1, 0, 4
-; PC64LE-NEXT:    addis 3, 2, .LCPI13_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI13_1 at toc@ha
-; PC64LE-NEXT:    lfd 3, .LCPI13_0 at toc@l(3)
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE-NEXT:    # kill: def $f5 killed $f5 def $vsl5
+; PC64LE-NEXT:    # kill: def $f4 killed $f4 def $vsl4
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE-NEXT:    xxmrghd 0, 5, 4
+; PC64LE-NEXT:    xsmuldp 3, 3, 6
+; PC64LE-NEXT:    xxmrghd 1, 2, 1
 ; PC64LE-NEXT:    xvmuldp 2, 1, 0
-; PC64LE-NEXT:    lfs 0, .LCPI13_1 at toc@l(4)
-; PC64LE-NEXT:    xsmuldp 3, 3, 0
 ; PC64LE-NEXT:    xxswapd 1, 2
 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
@@ -746,17 +716,13 @@ define <3 x double> @constrained_vector_fmul_v3f64() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fmul_v3f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI13_0 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI13_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI13_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI13_1 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI13_2 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI13_2 at toc@l
-; PC64LE9-NEXT:    xsmuldp 3, 0, 1
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI13_3 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI13_3 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
+; PC64LE9-NEXT:    # kill: def $f5 killed $f5 def $vsl5
+; PC64LE9-NEXT:    # kill: def $f4 killed $f4 def $vsl4
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE9-NEXT:    xxmrghd 0, 5, 4
+; PC64LE9-NEXT:    xxmrghd 1, 2, 1
+; PC64LE9-NEXT:    xsmuldp 3, 3, 6
 ; PC64LE9-NEXT:    xvmuldp 2, 1, 0
 ; PC64LE9-NEXT:    xxswapd 1, 2
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
@@ -764,136 +730,95 @@ define <3 x double> @constrained_vector_fmul_v3f64() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %mul = call <3 x double> @llvm.experimental.constrained.fmul.v3f64(
-           <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
-                         double 0x7FEFFFFFFFFFFFFF>,
-           <3 x double> <double 1.000000e+00, double 1.000000e+01, double 1.000000e+02>,
+           <3 x double> %x,
+           <3 x double> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <3 x double> %mul
 }
 
-define <4 x double> @constrained_vector_fmul_v4f64() #0 {
+define <4 x double> @constrained_vector_fmul_v4f64(<4 x double> %x, <4 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fmul_v4f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI14_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI14_1 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI14_2 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI14_0 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI14_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    addi 3, 5, .LCPI14_2 at toc@l
-; PC64LE-NEXT:    lxvd2x 1, 0, 4
-; PC64LE-NEXT:    lxvd2x 2, 0, 3
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
-; PC64LE-NEXT:    xxswapd 2, 2
-; PC64LE-NEXT:    xvmuldp 35, 1, 0
-; PC64LE-NEXT:    xvmuldp 34, 1, 2
+; PC64LE-NEXT:    xvmuldp 35, 35, 37
+; PC64LE-NEXT:    xvmuldp 34, 34, 36
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fmul_v4f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI14_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI14_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI14_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI14_1 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI14_2 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI14_2 at toc@l
-; PC64LE9-NEXT:    xvmuldp 35, 1, 0
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    xvmuldp 34, 1, 0
+; PC64LE9-NEXT:    xvmuldp 35, 35, 37
+; PC64LE9-NEXT:    xvmuldp 34, 34, 36
 ; PC64LE9-NEXT:    blr
 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>,
+           <4 x double> %x,
+           <4 x double> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <4 x double> %mul
 }
 
-define <1 x float> @constrained_vector_fadd_v1f32() #0 {
+define <1 x float> @constrained_vector_fadd_v1f32(<1 x float> %x, <1 x float> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fadd_v1f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI15_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI15_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI15_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI15_1 at toc@l(4)
-; PC64LE-NEXT:    xsaddsp 1, 1, 0
+; PC64LE-NEXT:    xsaddsp 1, 1, 2
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fadd_v1f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI15_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI15_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI15_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI15_1 at toc@l(3)
-; PC64LE9-NEXT:    xsaddsp 1, 1, 0
+; PC64LE9-NEXT:    xsaddsp 1, 1, 2
 ; PC64LE9-NEXT:    blr
 entry:
   %add = call <1 x float> @llvm.experimental.constrained.fadd.v1f32(
-           <1 x float> <float 0x7FF0000000000000>,
-           <1 x float> <float 1.0>,
+           <1 x float> %x,
+           <1 x float> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <1 x float> %add
 }
 
-define <2 x double> @constrained_vector_fadd_v2f64() #0 {
+define <2 x double> @constrained_vector_fadd_v2f64(<2 x double> %x, <2 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fadd_v2f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI16_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI16_1 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI16_0 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI16_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    lxvd2x 1, 0, 4
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
-; PC64LE-NEXT:    xvadddp 34, 1, 0
+; PC64LE-NEXT:    xvadddp 34, 34, 35
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fadd_v2f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI16_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI16_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI16_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI16_1 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
-; PC64LE9-NEXT:    xvadddp 34, 1, 0
+; PC64LE9-NEXT:    xvadddp 34, 34, 35
 ; PC64LE9-NEXT:    blr
 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>,
+           <2 x double> %x,
+           <2 x double> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <2 x double> %add
 }
 
-define <3 x float> @constrained_vector_fadd_v3f32() #0 {
+define <3 x float> @constrained_vector_fadd_v3f32(<3 x float> %x, <3 x float> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fadd_v3f32:
 ; PC64LE:       # %bb.0: # %entry
+; PC64LE-NEXT:    xxsldwi 0, 35, 35, 3
+; PC64LE-NEXT:    xxsldwi 1, 34, 34, 3
 ; PC64LE-NEXT:    addis 3, 2, .LCPI17_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI17_2 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI17_1 at toc@ha
-; PC64LE-NEXT:    xxlxor 3, 3, 3
-; PC64LE-NEXT:    lfs 0, .LCPI17_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI17_2 at toc@l(4)
-; PC64LE-NEXT:    lfs 2, .LCPI17_1 at toc@l(5)
-; PC64LE-NEXT:    addis 3, 2, .LCPI17_3 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI17_3 at toc@l
-; PC64LE-NEXT:    xsaddsp 1, 0, 1
+; PC64LE-NEXT:    xxswapd 2, 35
+; PC64LE-NEXT:    xxswapd 3, 34
+; PC64LE-NEXT:    addi 3, 3, .LCPI17_0 at toc@l
+; PC64LE-NEXT:    xxsldwi 4, 35, 35, 1
 ; PC64LE-NEXT:    lvx 4, 0, 3
-; PC64LE-NEXT:    xsaddsp 2, 0, 2
-; PC64LE-NEXT:    xsaddsp 0, 0, 3
-; PC64LE-NEXT:    xscvdpspn 34, 1
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvspdpn 2, 2
+; PC64LE-NEXT:    xscvspdpn 3, 3
+; PC64LE-NEXT:    xscvspdpn 4, 4
+; PC64LE-NEXT:    xsaddsp 0, 1, 0
+; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
+; PC64LE-NEXT:    xsaddsp 2, 3, 2
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvdpspn 34, 0
 ; PC64LE-NEXT:    xscvdpspn 35, 2
+; PC64LE-NEXT:    xsaddsp 0, 1, 4
 ; PC64LE-NEXT:    vmrghw 2, 3, 2
 ; PC64LE-NEXT:    xscvdpspn 35, 0
 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
@@ -901,51 +826,50 @@ define <3 x float> @constrained_vector_fadd_v3f32() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fadd_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
+; PC64LE9-NEXT:    xxsldwi 0, 35, 35, 1
+; PC64LE9-NEXT:    xxsldwi 1, 34, 34, 1
 ; PC64LE9-NEXT:    addis 3, 2, .LCPI17_0 at toc@ha
-; PC64LE9-NEXT:    xxlxor 1, 1, 1
-; PC64LE9-NEXT:    lfs 0, .LCPI17_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI17_1 at toc@ha
-; PC64LE9-NEXT:    lfs 2, .LCPI17_1 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI17_2 at toc@ha
-; PC64LE9-NEXT:    lfs 3, .LCPI17_2 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI17_3 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI17_3 at toc@l
-; PC64LE9-NEXT:    xsaddsp 1, 0, 1
+; PC64LE9-NEXT:    addi 3, 3, .LCPI17_0 at toc@l
+; PC64LE9-NEXT:    xxswapd 2, 34
+; PC64LE9-NEXT:    xxsldwi 3, 34, 34, 3
+; PC64LE9-NEXT:    xscvspdpn 0, 0
+; PC64LE9-NEXT:    xscvspdpn 1, 1
+; PC64LE9-NEXT:    xscvspdpn 2, 2
+; PC64LE9-NEXT:    xscvspdpn 3, 3
 ; PC64LE9-NEXT:    lxvx 36, 0, 3
-; PC64LE9-NEXT:    xsaddsp 2, 0, 2
-; PC64LE9-NEXT:    xsaddsp 0, 0, 3
-; PC64LE9-NEXT:    xscvdpspn 35, 2
-; PC64LE9-NEXT:    xscvdpspn 34, 0
-; PC64LE9-NEXT:    vmrghw 2, 3, 2
+; PC64LE9-NEXT:    xsaddsp 0, 1, 0
+; PC64LE9-NEXT:    xxswapd 1, 35
+; PC64LE9-NEXT:    xscvspdpn 1, 1
+; PC64LE9-NEXT:    xsaddsp 1, 2, 1
+; PC64LE9-NEXT:    xxsldwi 2, 35, 35, 3
+; PC64LE9-NEXT:    xscvspdpn 2, 2
+; PC64LE9-NEXT:    xsaddsp 2, 3, 2
 ; PC64LE9-NEXT:    xscvdpspn 35, 1
+; PC64LE9-NEXT:    xscvdpspn 34, 2
+; PC64LE9-NEXT:    vmrghw 2, 3, 2
+; PC64LE9-NEXT:    xscvdpspn 35, 0
 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
 ; PC64LE9-NEXT:    blr
 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>,
+           <3 x float> %x,
+           <3 x float> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <3 x float> %add
 }
 
-define <3 x double> @constrained_vector_fadd_v3f64() #0 {
+define <3 x double> @constrained_vector_fadd_v3f64(<3 x double> %x, <3 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fadd_v3f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI18_1 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI18_2 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI18_1 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI18_2 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    lxvd2x 1, 0, 4
-; PC64LE-NEXT:    addis 3, 2, .LCPI18_0 at toc@ha
-; PC64LE-NEXT:    lfd 3, .LCPI18_0 at toc@l(3)
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE-NEXT:    # kill: def $f5 killed $f5 def $vsl5
+; PC64LE-NEXT:    # kill: def $f4 killed $f4 def $vsl4
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE-NEXT:    xxmrghd 0, 5, 4
+; PC64LE-NEXT:    xsadddp 3, 3, 6
+; PC64LE-NEXT:    xxmrghd 1, 2, 1
 ; PC64LE-NEXT:    xvadddp 2, 1, 0
-; PC64LE-NEXT:    xxlxor 0, 0, 0
-; PC64LE-NEXT:    xsadddp 3, 3, 0
 ; PC64LE-NEXT:    xxswapd 1, 2
 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
@@ -953,16 +877,13 @@ define <3 x double> @constrained_vector_fadd_v3f64() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fadd_v3f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI18_0 at toc@ha
-; PC64LE9-NEXT:    xxlxor 1, 1, 1
-; PC64LE9-NEXT:    lfd 0, .LCPI18_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI18_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI18_1 at toc@l
-; PC64LE9-NEXT:    xsadddp 3, 0, 1
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI18_2 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI18_2 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
+; PC64LE9-NEXT:    # kill: def $f5 killed $f5 def $vsl5
+; PC64LE9-NEXT:    # kill: def $f4 killed $f4 def $vsl4
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE9-NEXT:    xxmrghd 0, 5, 4
+; PC64LE9-NEXT:    xxmrghd 1, 2, 1
+; PC64LE9-NEXT:    xsadddp 3, 3, 6
 ; PC64LE9-NEXT:    xvadddp 2, 1, 0
 ; PC64LE9-NEXT:    xxswapd 1, 2
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
@@ -970,136 +891,95 @@ define <3 x double> @constrained_vector_fadd_v3f64() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %add = call <3 x double> @llvm.experimental.constrained.fadd.v3f64(
-           <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
-                         double 0x7FEFFFFFFFFFFFFF>,
-           <3 x double> <double 2.0, double 1.0, double 0.0>,
+           <3 x double> %x,
+           <3 x double> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <3 x double> %add
 }
 
-define <4 x double> @constrained_vector_fadd_v4f64() #0 {
+define <4 x double> @constrained_vector_fadd_v4f64(<4 x double> %x, <4 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fadd_v4f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI19_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI19_1 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI19_2 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI19_0 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI19_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    addi 3, 5, .LCPI19_2 at toc@l
-; PC64LE-NEXT:    lxvd2x 1, 0, 4
-; PC64LE-NEXT:    lxvd2x 2, 0, 3
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
-; PC64LE-NEXT:    xxswapd 2, 2
-; PC64LE-NEXT:    xvadddp 35, 1, 0
-; PC64LE-NEXT:    xvadddp 34, 1, 2
+; PC64LE-NEXT:    xvadddp 35, 35, 37
+; PC64LE-NEXT:    xvadddp 34, 34, 36
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fadd_v4f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI19_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI19_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI19_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI19_1 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI19_2 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI19_2 at toc@l
-; PC64LE9-NEXT:    xvadddp 35, 1, 0
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    xvadddp 34, 1, 0
+; PC64LE9-NEXT:    xvadddp 35, 35, 37
+; PC64LE9-NEXT:    xvadddp 34, 34, 36
 ; PC64LE9-NEXT:    blr
 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>,
+           <4 x double> %x,
+           <4 x double> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <4 x double> %add
 }
 
-define <1 x float> @constrained_vector_fsub_v1f32() #0 {
+define <1 x float> @constrained_vector_fsub_v1f32(<1 x float> %x, <1 x float> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fsub_v1f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI20_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI20_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI20_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI20_1 at toc@l(4)
-; PC64LE-NEXT:    xssubsp 1, 1, 0
+; PC64LE-NEXT:    xssubsp 1, 1, 2
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fsub_v1f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI20_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI20_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI20_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI20_1 at toc@l(3)
-; PC64LE9-NEXT:    xssubsp 1, 1, 0
+; PC64LE9-NEXT:    xssubsp 1, 1, 2
 ; PC64LE9-NEXT:    blr
 entry:
   %sub = call <1 x float> @llvm.experimental.constrained.fsub.v1f32(
-           <1 x float> <float 0x7FF0000000000000>,
-           <1 x float> <float 1.000000e+00>,
+           <1 x float> %x,
+           <1 x float> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <1 x float> %sub
 }
 
-define <2 x double> @constrained_vector_fsub_v2f64() #0 {
+define <2 x double> @constrained_vector_fsub_v2f64(<2 x double> %x, <2 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fsub_v2f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI21_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI21_1 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI21_0 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI21_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    lxvd2x 1, 0, 4
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
-; PC64LE-NEXT:    xvsubdp 34, 1, 0
+; PC64LE-NEXT:    xvsubdp 34, 34, 35
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fsub_v2f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI21_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI21_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI21_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI21_1 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
-; PC64LE9-NEXT:    xvsubdp 34, 1, 0
+; PC64LE9-NEXT:    xvsubdp 34, 34, 35
 ; PC64LE9-NEXT:    blr
 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>,
+           <2 x double> %x,
+           <2 x double> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <2 x double> %sub
 }
 
-define <3 x float> @constrained_vector_fsub_v3f32() #0 {
+define <3 x float> @constrained_vector_fsub_v3f32(<3 x float> %x, <3 x float> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fsub_v3f32:
 ; PC64LE:       # %bb.0: # %entry
+; PC64LE-NEXT:    xxsldwi 0, 35, 35, 3
+; PC64LE-NEXT:    xxsldwi 1, 34, 34, 3
 ; PC64LE-NEXT:    addis 3, 2, .LCPI22_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI22_2 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI22_1 at toc@ha
-; PC64LE-NEXT:    xxlxor 3, 3, 3
-; PC64LE-NEXT:    lfs 0, .LCPI22_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI22_2 at toc@l(4)
-; PC64LE-NEXT:    lfs 2, .LCPI22_1 at toc@l(5)
-; PC64LE-NEXT:    addis 3, 2, .LCPI22_3 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI22_3 at toc@l
-; PC64LE-NEXT:    xssubsp 1, 0, 1
+; PC64LE-NEXT:    xxswapd 2, 35
+; PC64LE-NEXT:    xxswapd 3, 34
+; PC64LE-NEXT:    addi 3, 3, .LCPI22_0 at toc@l
+; PC64LE-NEXT:    xxsldwi 4, 35, 35, 1
 ; PC64LE-NEXT:    lvx 4, 0, 3
-; PC64LE-NEXT:    xssubsp 2, 0, 2
-; PC64LE-NEXT:    xssubsp 0, 0, 3
-; PC64LE-NEXT:    xscvdpspn 34, 1
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvspdpn 2, 2
+; PC64LE-NEXT:    xscvspdpn 3, 3
+; PC64LE-NEXT:    xscvspdpn 4, 4
+; PC64LE-NEXT:    xssubsp 0, 1, 0
+; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
+; PC64LE-NEXT:    xssubsp 2, 3, 2
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvdpspn 34, 0
 ; PC64LE-NEXT:    xscvdpspn 35, 2
+; PC64LE-NEXT:    xssubsp 0, 1, 4
 ; PC64LE-NEXT:    vmrghw 2, 3, 2
 ; PC64LE-NEXT:    xscvdpspn 35, 0
 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
@@ -1107,51 +987,50 @@ define <3 x float> @constrained_vector_fsub_v3f32() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fsub_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
+; PC64LE9-NEXT:    xxsldwi 0, 35, 35, 1
+; PC64LE9-NEXT:    xxsldwi 1, 34, 34, 1
 ; PC64LE9-NEXT:    addis 3, 2, .LCPI22_0 at toc@ha
-; PC64LE9-NEXT:    xxlxor 1, 1, 1
-; PC64LE9-NEXT:    lfs 0, .LCPI22_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI22_1 at toc@ha
-; PC64LE9-NEXT:    lfs 2, .LCPI22_1 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI22_2 at toc@ha
-; PC64LE9-NEXT:    lfs 3, .LCPI22_2 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI22_3 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI22_3 at toc@l
-; PC64LE9-NEXT:    xssubsp 1, 0, 1
+; PC64LE9-NEXT:    addi 3, 3, .LCPI22_0 at toc@l
+; PC64LE9-NEXT:    xxswapd 2, 34
+; PC64LE9-NEXT:    xxsldwi 3, 34, 34, 3
+; PC64LE9-NEXT:    xscvspdpn 0, 0
+; PC64LE9-NEXT:    xscvspdpn 1, 1
+; PC64LE9-NEXT:    xscvspdpn 2, 2
+; PC64LE9-NEXT:    xscvspdpn 3, 3
 ; PC64LE9-NEXT:    lxvx 36, 0, 3
-; PC64LE9-NEXT:    xssubsp 2, 0, 2
-; PC64LE9-NEXT:    xssubsp 0, 0, 3
-; PC64LE9-NEXT:    xscvdpspn 35, 2
-; PC64LE9-NEXT:    xscvdpspn 34, 0
-; PC64LE9-NEXT:    vmrghw 2, 3, 2
+; PC64LE9-NEXT:    xssubsp 0, 1, 0
+; PC64LE9-NEXT:    xxswapd 1, 35
+; PC64LE9-NEXT:    xscvspdpn 1, 1
+; PC64LE9-NEXT:    xssubsp 1, 2, 1
+; PC64LE9-NEXT:    xxsldwi 2, 35, 35, 3
+; PC64LE9-NEXT:    xscvspdpn 2, 2
+; PC64LE9-NEXT:    xssubsp 2, 3, 2
 ; PC64LE9-NEXT:    xscvdpspn 35, 1
+; PC64LE9-NEXT:    xscvdpspn 34, 2
+; PC64LE9-NEXT:    vmrghw 2, 3, 2
+; PC64LE9-NEXT:    xscvdpspn 35, 0
 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
 ; PC64LE9-NEXT:    blr
 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>,
+           <3 x float> %x,
+           <3 x float> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <3 x float> %sub
 }
 
-define <3 x double> @constrained_vector_fsub_v3f64() #0 {
+define <3 x double> @constrained_vector_fsub_v3f64(<3 x double> %x, <3 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fsub_v3f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI23_1 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI23_2 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI23_1 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI23_2 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    lxvd2x 1, 0, 4
-; PC64LE-NEXT:    addis 3, 2, .LCPI23_0 at toc@ha
-; PC64LE-NEXT:    lfd 3, .LCPI23_0 at toc@l(3)
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE-NEXT:    # kill: def $f5 killed $f5 def $vsl5
+; PC64LE-NEXT:    # kill: def $f4 killed $f4 def $vsl4
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE-NEXT:    xxmrghd 0, 5, 4
+; PC64LE-NEXT:    xssubdp 3, 3, 6
+; PC64LE-NEXT:    xxmrghd 1, 2, 1
 ; PC64LE-NEXT:    xvsubdp 2, 1, 0
-; PC64LE-NEXT:    xxlxor 0, 0, 0
-; PC64LE-NEXT:    xssubdp 3, 3, 0
 ; PC64LE-NEXT:    xxswapd 1, 2
 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
@@ -1159,16 +1038,13 @@ define <3 x double> @constrained_vector_fsub_v3f64() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fsub_v3f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI23_0 at toc@ha
-; PC64LE9-NEXT:    xxlxor 1, 1, 1
-; PC64LE9-NEXT:    lfd 0, .LCPI23_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI23_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI23_1 at toc@l
-; PC64LE9-NEXT:    xssubdp 3, 0, 1
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI23_2 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI23_2 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
+; PC64LE9-NEXT:    # kill: def $f5 killed $f5 def $vsl5
+; PC64LE9-NEXT:    # kill: def $f4 killed $f4 def $vsl4
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE9-NEXT:    xxmrghd 0, 5, 4
+; PC64LE9-NEXT:    xxmrghd 1, 2, 1
+; PC64LE9-NEXT:    xssubdp 3, 3, 6
 ; PC64LE9-NEXT:    xvsubdp 2, 1, 0
 ; PC64LE9-NEXT:    xxswapd 1, 2
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
@@ -1176,119 +1052,84 @@ define <3 x double> @constrained_vector_fsub_v3f64() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %sub = call <3 x double> @llvm.experimental.constrained.fsub.v3f64(
-           <3 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF,
-                         double 0xFFEFFFFFFFFFFFFF>,
-           <3 x double> <double 2.0, double 1.0, double 0.0>,
+           <3 x double> %x,
+           <3 x double> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <3 x double> %sub
 }
 
-define <4 x double> @constrained_vector_fsub_v4f64() #0 {
+define <4 x double> @constrained_vector_fsub_v4f64(<4 x double> %x, <4 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_fsub_v4f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI24_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI24_1 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI24_2 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI24_0 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI24_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    addi 3, 5, .LCPI24_2 at toc@l
-; PC64LE-NEXT:    lxvd2x 1, 0, 4
-; PC64LE-NEXT:    lxvd2x 2, 0, 3
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
-; PC64LE-NEXT:    xxswapd 2, 2
-; PC64LE-NEXT:    xvsubdp 35, 1, 0
-; PC64LE-NEXT:    xvsubdp 34, 1, 2
+; PC64LE-NEXT:    xvsubdp 35, 35, 37
+; PC64LE-NEXT:    xvsubdp 34, 34, 36
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fsub_v4f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI24_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI24_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI24_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI24_1 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI24_2 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI24_2 at toc@l
-; PC64LE9-NEXT:    xvsubdp 35, 1, 0
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    xvsubdp 34, 1, 0
+; PC64LE9-NEXT:    xvsubdp 35, 35, 37
+; PC64LE9-NEXT:    xvsubdp 34, 34, 36
 ; PC64LE9-NEXT:    blr
 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>,
+           <4 x double> %x,
+           <4 x double> %y,
            metadata !"round.dynamic",
            metadata !"fpexcept.strict") #1
   ret <4 x double> %sub
 }
 
-define <1 x float> @constrained_vector_sqrt_v1f32() #0 {
+define <1 x float> @constrained_vector_sqrt_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_sqrt_v1f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI25_0 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI25_0 at toc@l(3)
-; PC64LE-NEXT:    xssqrtsp 1, 0
+; PC64LE-NEXT:    xssqrtsp 1, 1
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_sqrt_v1f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI25_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI25_0 at toc@l(3)
-; PC64LE9-NEXT:    xssqrtsp 1, 0
+; PC64LE9-NEXT:    xssqrtsp 1, 1
 ; PC64LE9-NEXT:    blr
 entry:
   %sqrt = call <1 x float> @llvm.experimental.constrained.sqrt.v1f32(
-                              <1 x float> <float 42.0>,
+                              <1 x float> %x,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <1 x float> %sqrt
 }
 
-define <2 x double> @constrained_vector_sqrt_v2f64() #0 {
+define <2 x double> @constrained_vector_sqrt_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_sqrt_v2f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI26_0 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI26_0 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xvsqrtdp 34, 0
+; PC64LE-NEXT:    xvsqrtdp 34, 34
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_sqrt_v2f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI26_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI26_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    xvsqrtdp 34, 0
+; PC64LE9-NEXT:    xvsqrtdp 34, 34
 ; PC64LE9-NEXT:    blr
 entry:
   %sqrt = call <2 x double> @llvm.experimental.constrained.sqrt.v2f64(
-                              <2 x double> <double 42.0, double 42.1>,
+                              <2 x double> %x,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <2 x double> %sqrt
 }
 
-define <3 x float> @constrained_vector_sqrt_v3f32() #0 {
+define <3 x float> @constrained_vector_sqrt_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_sqrt_v3f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI27_2 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI27_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI27_2 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI27_1 at toc@l(4)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xxswapd 1, 34
 ; PC64LE-NEXT:    addis 3, 2, .LCPI27_0 at toc@ha
+; PC64LE-NEXT:    xxsldwi 2, 34, 34, 1
+; PC64LE-NEXT:    addi 3, 3, .LCPI27_0 at toc@l
+; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    xssqrtsp 0, 0
-; PC64LE-NEXT:    lfs 2, .LCPI27_0 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI27_3 at toc@ha
 ; PC64LE-NEXT:    xssqrtsp 1, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI27_3 at toc@l
-; PC64LE-NEXT:    lvx 4, 0, 3
 ; PC64LE-NEXT:    xssqrtsp 2, 2
 ; PC64LE-NEXT:    xscvdpspn 34, 0
 ; PC64LE-NEXT:    xscvdpspn 35, 1
@@ -1299,42 +1140,39 @@ define <3 x float> @constrained_vector_sqrt_v3f32() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_sqrt_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
+; PC64LE9-NEXT:    xxswapd 1, 34
+; PC64LE9-NEXT:    xxsldwi 2, 34, 34, 3
 ; PC64LE9-NEXT:    addis 3, 2, .LCPI27_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI27_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI27_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI27_1 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI27_2 at toc@ha
-; PC64LE9-NEXT:    xssqrtsp 0, 0
-; PC64LE9-NEXT:    lfs 2, .LCPI27_2 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI27_3 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI27_3 at toc@l
+; PC64LE9-NEXT:    addi 3, 3, .LCPI27_0 at toc@l
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    xscvspdpn 1, 1
+; PC64LE9-NEXT:    xscvspdpn 2, 2
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xssqrtsp 1, 1
 ; PC64LE9-NEXT:    xssqrtsp 2, 2
-; PC64LE9-NEXT:    xscvdpspn 36, 0
-; PC64LE9-NEXT:    xscvdpspn 35, 1
+; PC64LE9-NEXT:    xssqrtsp 0, 0
 ; PC64LE9-NEXT:    xscvdpspn 34, 2
+; PC64LE9-NEXT:    xscvdpspn 35, 1
+; PC64LE9-NEXT:    xscvdpspn 36, 0
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    lxvx 35, 0, 3
 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
 ; PC64LE9-NEXT:    blr
 entry:
   %sqrt = call <3 x float> @llvm.experimental.constrained.sqrt.v3f32(
-                              <3 x float> <float 42.0, float 43.0, float 44.0>,
+                              <3 x float> %x,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <3 x float> %sqrt
 }
 
-define <3 x double> @constrained_vector_sqrt_v3f64() #0 {
+define <3 x double> @constrained_vector_sqrt_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_sqrt_v3f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI28_1 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI28_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    addis 3, 2, .LCPI28_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI28_0 at toc@l(3)
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xssqrtdp 3, 1
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE-NEXT:    xxmrghd 0, 2, 1
+; PC64LE-NEXT:    xssqrtdp 3, 3
 ; PC64LE-NEXT:    xvsqrtdp 2, 0
 ; PC64LE-NEXT:    xxswapd 1, 2
 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
@@ -1343,12 +1181,10 @@ define <3 x double> @constrained_vector_sqrt_v3f64() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_sqrt_v3f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI28_0 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI28_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI28_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI28_1 at toc@l
-; PC64LE9-NEXT:    xssqrtdp 3, 0
-; PC64LE9-NEXT:    lxvx 0, 0, 3
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE9-NEXT:    xxmrghd 0, 2, 1
+; PC64LE9-NEXT:    xssqrtdp 3, 3
 ; PC64LE9-NEXT:    xvsqrtdp 2, 0
 ; PC64LE9-NEXT:    xxswapd 1, 2
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
@@ -1356,57 +1192,38 @@ define <3 x double> @constrained_vector_sqrt_v3f64() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %sqrt = call <3 x double> @llvm.experimental.constrained.sqrt.v3f64(
-                          <3 x double> <double 42.0, double 42.1, double 42.2>,
+                          <3 x double> %x,
                           metadata !"round.dynamic",
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %sqrt
 }
 
-define <4 x double> @constrained_vector_sqrt_v4f64() #0 {
+define <4 x double> @constrained_vector_sqrt_v4f64(<4 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_sqrt_v4f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI29_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI29_1 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI29_0 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI29_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    lxvd2x 1, 0, 4
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
-; PC64LE-NEXT:    xvsqrtdp 35, 0
-; PC64LE-NEXT:    xvsqrtdp 34, 1
+; PC64LE-NEXT:    xvsqrtdp 35, 35
+; PC64LE-NEXT:    xvsqrtdp 34, 34
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_sqrt_v4f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI29_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI29_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI29_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI29_1 at toc@l
-; PC64LE9-NEXT:    xvsqrtdp 35, 0
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    xvsqrtdp 34, 0
+; PC64LE9-NEXT:    xvsqrtdp 35, 35
+; PC64LE9-NEXT:    xvsqrtdp 34, 34
 ; PC64LE9-NEXT:    blr
  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>,
+                              <4 x double> %x,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <4 x double> %sqrt
 }
 
-define <1 x float> @constrained_vector_pow_v1f32() #0 {
+define <1 x float> @constrained_vector_pow_v1f32(<1 x float> %x, <1 x float> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_pow_v1f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
 ; PC64LE-NEXT:    stdu 1, -32(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI30_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI30_1 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI30_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 2, .LCPI30_1 at toc@l(4)
 ; PC64LE-NEXT:    bl powf
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    addi 1, 1, 32
@@ -1419,10 +1236,6 @@ define <1 x float> @constrained_vector_pow_v1f32() #0 {
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
 ; PC64LE9-NEXT:    stdu 1, -32(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI30_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI30_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI30_1 at toc@ha
-; PC64LE9-NEXT:    lfs 2, .LCPI30_1 at toc@l(3)
 ; PC64LE9-NEXT:    bl powf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    addi 1, 1, 32
@@ -1431,41 +1244,47 @@ define <1 x float> @constrained_vector_pow_v1f32() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %pow = call <1 x float> @llvm.experimental.constrained.pow.v1f32(
-                             <1 x float> <float 42.0>,
-                             <1 x float> <float 3.0>,
+                             <1 x float> %x,
+                             <1 x float> %y,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <1 x float> %pow
 }
 
-define <2 x double> @constrained_vector_pow_v2f64() #0 {
+define <2 x double> @constrained_vector_pow_v2f64(<2 x double> %x, <2 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_pow_v2f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -80(1)
-; PC64LE-NEXT:    addis 4, 2, .LCPI31_1 at toc@ha
-; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stdu 1, -96(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stxvd2x 61, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 80
+; PC64LE-NEXT:    vmr 30, 2
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI31_0 at toc@ha
-; PC64LE-NEXT:    lfs 31, .LCPI31_1 at toc@l(4)
-; PC64LE-NEXT:    lfd 1, .LCPI31_0 at toc@l(3)
-; PC64LE-NEXT:    fmr 2, 31
+; PC64LE-NEXT:    vmr 31, 3
+; PC64LE-NEXT:    xxlor 1, 62, 62
+; PC64LE-NEXT:    xxlor 2, 63, 63
 ; PC64LE-NEXT:    bl pow
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI31_2 at toc@ha
-; PC64LE-NEXT:    fmr 2, 31
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfd 1, .LCPI31_2 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 62
+; PC64LE-NEXT:    xxswapd 2, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE-NEXT:    bl pow
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 80
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 34, 1, 63
-; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    xxmrghd 34, 61, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 80
+; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 61, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -1474,171 +1293,191 @@ define <2 x double> @constrained_vector_pow_v2f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -64(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI31_0 at toc@ha
-; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI31_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI31_1 at toc@ha
-; PC64LE9-NEXT:    lfs 31, .LCPI31_1 at toc@l(3)
-; PC64LE9-NEXT:    fmr 2, 31
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    stxv 62, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 64(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 3
+; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
+; PC64LE9-NEXT:    vmr 30, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 62, 62
+; PC64LE9-NEXT:    stxv 61, 32(1) # 16-byte Folded Spill
 ; PC64LE9-NEXT:    bl pow
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI31_2 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    fmr 2, 31
-; PC64LE9-NEXT:    lfd 1, .LCPI31_2 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 62
+; PC64LE9-NEXT:    xxswapd 2, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE9-NEXT:    bl pow
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 34, 1, 63
-; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 64
+; PC64LE9-NEXT:    xxmrghd 34, 61, 1
+; PC64LE9-NEXT:    lxv 63, 64(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 61, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 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>,
+                             <2 x double> %x,
+                             <2 x double> %y,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <2 x double> %pow
 }
 
-define <3 x float> @constrained_vector_pow_v3f32() #0 {
+define <3 x float> @constrained_vector_pow_v3f32(<3 x float> %x, <3 x float> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_pow_v3f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
-; PC64LE-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
-; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
-; PC64LE-NEXT:    addis 4, 2, .LCPI32_1 at toc@ha
-; PC64LE-NEXT:    addis 3, 2, .LCPI32_0 at toc@ha
-; PC64LE-NEXT:    lfs 31, .LCPI32_1 at toc@l(4)
-; PC64LE-NEXT:    lfs 1, .LCPI32_0 at toc@l(3)
-; PC64LE-NEXT:    fmr 2, 31
+; PC64LE-NEXT:    stdu 1, -96(1)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE-NEXT:    xxsldwi 2, 35, 35, 1
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    stfd 30, 80(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    xscvspdpn 1, 0
+; PC64LE-NEXT:    xscvspdpn 2, 2
+; PC64LE-NEXT:    vmr 31, 3
+; PC64LE-NEXT:    vmr 30, 2
 ; PC64LE-NEXT:    bl powf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI32_2 at toc@ha
-; PC64LE-NEXT:    fmr 2, 31
-; PC64LE-NEXT:    fmr 30, 1
-; PC64LE-NEXT:    lfs 1, .LCPI32_2 at toc@l(3)
+; PC64LE-NEXT:    xxswapd 0, 62
+; PC64LE-NEXT:    xxswapd 2, 63
+; PC64LE-NEXT:    fmr 31, 1
+; PC64LE-NEXT:    xscvspdpn 1, 0
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    bl powf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI32_3 at toc@ha
-; PC64LE-NEXT:    fmr 2, 31
-; PC64LE-NEXT:    fmr 29, 1
-; PC64LE-NEXT:    lfs 1, .LCPI32_3 at toc@l(3)
+; PC64LE-NEXT:    xxsldwi 0, 62, 62, 3
+; PC64LE-NEXT:    xxsldwi 2, 63, 63, 3
+; PC64LE-NEXT:    fmr 30, 1
+; PC64LE-NEXT:    xscvspdpn 1, 0
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    bl powf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    xscvdpspn 34, 29
-; PC64LE-NEXT:    addis 3, 2, .LCPI32_4 at toc@ha
+; PC64LE-NEXT:    xscvdpspn 34, 30
+; PC64LE-NEXT:    addis 3, 2, .LCPI32_0 at toc@ha
+; PC64LE-NEXT:    lfd 30, 80(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    xscvdpspn 35, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI32_4 at toc@l
+; PC64LE-NEXT:    addi 3, 3, .LCPI32_0 at toc@l
 ; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    vmrghw 2, 2, 3
-; PC64LE-NEXT:    xscvdpspn 35, 30
+; PC64LE-NEXT:    xscvdpspn 35, 31
+; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
-; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
-; PC64LE-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_pow_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
-; PC64LE9-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -64(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI32_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI32_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI32_1 at toc@ha
-; PC64LE9-NEXT:    lfs 31, .LCPI32_1 at toc@l(3)
-; PC64LE9-NEXT:    fmr 2, 31
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    xxsldwi 0, 35, 35, 1
+; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xscvspdpn 2, 0
+; PC64LE9-NEXT:    vmr 31, 3
+; PC64LE9-NEXT:    vmr 30, 2
 ; PC64LE9-NEXT:    bl powf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI32_2 at toc@ha
-; PC64LE9-NEXT:    fmr 30, 1
-; PC64LE9-NEXT:    fmr 2, 31
-; PC64LE9-NEXT:    lfs 1, .LCPI32_2 at toc@l(3)
+; PC64LE9-NEXT:    xxswapd 0, 62
+; PC64LE9-NEXT:    fmr 31, 1
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    xxswapd 0, 63
+; PC64LE9-NEXT:    xscvspdpn 2, 0
 ; PC64LE9-NEXT:    bl powf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI32_3 at toc@ha
-; PC64LE9-NEXT:    fmr 29, 1
-; PC64LE9-NEXT:    fmr 2, 31
-; PC64LE9-NEXT:    lfs 1, .LCPI32_3 at toc@l(3)
+; PC64LE9-NEXT:    xxsldwi 0, 62, 62, 3
+; PC64LE9-NEXT:    fmr 30, 1
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    xxsldwi 0, 63, 63, 3
+; PC64LE9-NEXT:    xscvspdpn 2, 0
 ; PC64LE9-NEXT:    bl powf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    xscvdpspn 34, 1
-; PC64LE9-NEXT:    xscvdpspn 35, 29
-; PC64LE9-NEXT:    addis 3, 2, .LCPI32_4 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI32_4 at toc@l
+; PC64LE9-NEXT:    xscvdpspn 35, 30
+; PC64LE9-NEXT:    addis 3, 2, .LCPI32_0 at toc@ha
+; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 3, 3, .LCPI32_0 at toc@l
 ; PC64LE9-NEXT:    lxvx 36, 0, 3
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
-; PC64LE9-NEXT:    xscvdpspn 35, 30
+; PC64LE9-NEXT:    xscvdpspn 35, 31
+; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
-; PC64LE9-NEXT:    addi 1, 1, 64
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
-; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    mtlr 0
-; PC64LE9-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    blr
 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>,
+                             <3 x float> %x,
+                             <3 x float> %y,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <3 x float> %pow
 }
 
-define <3 x double> @constrained_vector_pow_v3f64() #0 {
+define <3 x double> @constrained_vector_pow_v3f64(<3 x double> %x, <3 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_pow_v3f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -80(1)
-; PC64LE-NEXT:    addis 4, 2, .LCPI33_1 at toc@ha
-; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stdu 1, -96(1)
+; PC64LE-NEXT:    stfd 28, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    fmr 28, 2
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    fmr 2, 4
+; PC64LE-NEXT:    stfd 29, 72(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 30, 80(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI33_0 at toc@ha
-; PC64LE-NEXT:    lfs 31, .LCPI33_1 at toc@l(4)
-; PC64LE-NEXT:    lfs 1, .LCPI33_0 at toc@l(3)
-; PC64LE-NEXT:    fmr 2, 31
+; PC64LE-NEXT:    fmr 31, 6
+; PC64LE-NEXT:    fmr 30, 5
+; PC64LE-NEXT:    fmr 29, 3
 ; PC64LE-NEXT:    bl pow
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI33_2 at toc@ha
-; PC64LE-NEXT:    fmr 2, 31
 ; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfd 1, .LCPI33_2 at toc@l(3)
+; PC64LE-NEXT:    fmr 1, 28
+; PC64LE-NEXT:    fmr 2, 30
 ; PC64LE-NEXT:    bl pow
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI33_3 at toc@ha
-; PC64LE-NEXT:    fmr 2, 31
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
 ; PC64LE-NEXT:    xxmrghd 63, 1, 63
-; PC64LE-NEXT:    lfd 1, .LCPI33_3 at toc@l(3)
+; PC64LE-NEXT:    fmr 2, 31
+; PC64LE-NEXT:    fmr 1, 29
 ; PC64LE-NEXT:    bl pow
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    li 3, 48
 ; PC64LE-NEXT:    xxlor 2, 63, 63
-; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    lfd 30, 80(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    lfd 29, 72(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    fmr 3, 1
+; PC64LE-NEXT:    lfd 28, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    fmr 1, 0
-; PC64LE-NEXT:    addi 1, 1, 80
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -1647,94 +1486,110 @@ define <3 x double> @constrained_vector_pow_v3f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -64(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI33_0 at toc@ha
-; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    stfd 28, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    fmr 28, 2
 ; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfs 1, .LCPI33_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI33_1 at toc@ha
-; PC64LE9-NEXT:    lfs 31, .LCPI33_1 at toc@l(3)
-; PC64LE9-NEXT:    fmr 2, 31
+; PC64LE9-NEXT:    fmr 2, 4
+; PC64LE9-NEXT:    stfd 29, 56(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    fmr 31, 6
+; PC64LE9-NEXT:    fmr 30, 5
+; PC64LE9-NEXT:    fmr 29, 3
 ; PC64LE9-NEXT:    bl pow
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI33_2 at toc@ha
 ; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    fmr 2, 31
-; PC64LE9-NEXT:    lfd 1, .LCPI33_2 at toc@l(3)
+; PC64LE9-NEXT:    fmr 1, 28
+; PC64LE9-NEXT:    fmr 2, 30
 ; PC64LE9-NEXT:    bl pow
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI33_3 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
 ; PC64LE9-NEXT:    xxmrghd 63, 1, 63
+; PC64LE9-NEXT:    fmr 1, 29
 ; PC64LE9-NEXT:    fmr 2, 31
-; PC64LE9-NEXT:    lfd 1, .LCPI33_3 at toc@l(3)
 ; PC64LE9-NEXT:    bl pow
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    fmr 3, 1
 ; PC64LE9-NEXT:    xxswapd 1, 63
 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
 ; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
-; PC64LE9-NEXT:    addi 1, 1, 64
+; PC64LE9-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    lfd 29, 56(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    lfd 28, 48(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %pow = call <3 x double> @llvm.experimental.constrained.pow.v3f64(
-                          <3 x double> <double 42.0, double 42.1, double 42.2>,
-                          <3 x double> <double 3.0, double 3.0, double 3.0>,
+                          <3 x double> %x,
+                          <3 x double> %y,
                           metadata !"round.dynamic",
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %pow
 }
 
-define <4 x double> @constrained_vector_pow_v4f64() #0 {
+define <4 x double> @constrained_vector_pow_v4f64(<4 x double> %x, <4 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_pow_v4f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -96(1)
-; PC64LE-NEXT:    addis 4, 2, .LCPI34_1 at toc@ha
-; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stdu 1, -128(1)
 ; PC64LE-NEXT:    li 3, 48
-; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 59, 1, 3 # 16-byte Folded Spill
 ; PC64LE-NEXT:    li 3, 64
-; PC64LE-NEXT:    lfs 31, .LCPI34_1 at toc@l(4)
+; PC64LE-NEXT:    stxvd2x 60, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 80
+; PC64LE-NEXT:    vmr 28, 2
+; PC64LE-NEXT:    stxvd2x 61, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 96
+; PC64LE-NEXT:    vmr 29, 3
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 30, 4
+; PC64LE-NEXT:    li 3, 112
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI34_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI34_0 at toc@l(3)
-; PC64LE-NEXT:    fmr 2, 31
+; PC64LE-NEXT:    vmr 31, 5
+; PC64LE-NEXT:    xxlor 1, 60, 60
+; PC64LE-NEXT:    xxlor 2, 62, 62
 ; PC64LE-NEXT:    bl pow
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI34_2 at toc@ha
-; PC64LE-NEXT:    fmr 2, 31
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfd 1, .LCPI34_2 at toc@l(3)
+; PC64LE-NEXT:    xxlor 59, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 60
+; PC64LE-NEXT:    xxswapd 2, 62
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE-NEXT:    bl pow
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI34_3 at toc@ha
-; PC64LE-NEXT:    fmr 2, 31
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 1, 63
-; PC64LE-NEXT:    lfd 1, .LCPI34_3 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 62, 59, 1
+; PC64LE-NEXT:    xxlor 2, 63, 63
+; PC64LE-NEXT:    xxlor 1, 61, 61
 ; PC64LE-NEXT:    bl pow
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI34_4 at toc@ha
-; PC64LE-NEXT:    fmr 2, 31
-; PC64LE-NEXT:    xxlor 62, 1, 1
-; PC64LE-NEXT:    lfd 1, .LCPI34_4 at toc@l(3)
+; PC64LE-NEXT:    xxlor 60, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 61
+; PC64LE-NEXT:    xxswapd 2, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE-NEXT:    bl pow
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 64
-; PC64LE-NEXT:    vmr 2, 31
+; PC64LE-NEXT:    li 3, 112
+; PC64LE-NEXT:    vmr 2, 30
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 35, 1, 62
-; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    xxmrghd 35, 60, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 96
 ; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 96
+; PC64LE-NEXT:    li 3, 80
+; PC64LE-NEXT:    lxvd2x 61, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    lxvd2x 60, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 59, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 128
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -1743,66 +1598,68 @@ define <4 x double> @constrained_vector_pow_v4f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -80(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI34_0 at toc@ha
-; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI34_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI34_1 at toc@ha
-; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfs 31, .LCPI34_1 at toc@l(3)
-; PC64LE9-NEXT:    fmr 2, 31
+; PC64LE9-NEXT:    stdu 1, -112(1)
+; PC64LE9-NEXT:    stxv 60, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stxv 62, 80(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 30, 4
+; PC64LE9-NEXT:    xscpsgndp 2, 62, 62
+; PC64LE9-NEXT:    vmr 28, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 60, 60
+; PC64LE9-NEXT:    stxv 59, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stxv 61, 64(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 96(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 5
+; PC64LE9-NEXT:    vmr 29, 3
 ; PC64LE9-NEXT:    bl pow
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI34_2 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    fmr 2, 31
-; PC64LE9-NEXT:    lfd 1, .LCPI34_2 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 59, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 60
+; PC64LE9-NEXT:    xxswapd 2, 62
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE9-NEXT:    bl pow
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI34_3 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 1, 63
-; PC64LE9-NEXT:    fmr 2, 31
-; PC64LE9-NEXT:    lfd 1, .LCPI34_3 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 62, 59, 1
+; PC64LE9-NEXT:    xscpsgndp 1, 61, 61
+; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
 ; PC64LE9-NEXT:    bl pow
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI34_4 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
-; PC64LE9-NEXT:    fmr 2, 31
-; PC64LE9-NEXT:    lfd 1, .LCPI34_4 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 60, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 61
+; PC64LE9-NEXT:    xxswapd 2, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE9-NEXT:    bl pow
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 35, 1, 62
-; PC64LE9-NEXT:    vmr 2, 31
-; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 80
+; PC64LE9-NEXT:    xxmrghd 35, 60, 1
+; PC64LE9-NEXT:    vmr 2, 30
+; PC64LE9-NEXT:    lxv 63, 96(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 80(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 61, 64(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 60, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 59, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 112
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 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>,
+                             <4 x double> %x,
+                             <4 x double> %y,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <4 x double> %pow
 }
 
-define <1 x float> @constrained_vector_powi_v1f32() #0 {
+define <1 x float> @constrained_vector_powi_v1f32(<1 x float> %x, i32 %y) #0 {
 ; PC64LE-LABEL: constrained_vector_powi_v1f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
 ; PC64LE-NEXT:    stdu 1, -32(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI35_0 at toc@ha
-; PC64LE-NEXT:    li 4, 3
-; PC64LE-NEXT:    lfs 1, .LCPI35_0 at toc@l(3)
+; PC64LE-NEXT:    clrldi 4, 4, 32
 ; PC64LE-NEXT:    bl __powisf2
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    addi 1, 1, 32
@@ -1815,9 +1672,7 @@ define <1 x float> @constrained_vector_powi_v1f32() #0 {
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
 ; PC64LE9-NEXT:    stdu 1, -32(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI35_0 at toc@ha
-; PC64LE9-NEXT:    li 4, 3
-; PC64LE9-NEXT:    lfs 1, .LCPI35_0 at toc@l(3)
+; PC64LE9-NEXT:    clrldi 4, 4, 32
 ; PC64LE9-NEXT:    bl __powisf2
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    addi 1, 1, 32
@@ -1826,37 +1681,44 @@ define <1 x float> @constrained_vector_powi_v1f32() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %powi = call <1 x float> @llvm.experimental.constrained.powi.v1f32(
-                              <1 x float> <float 42.0>,
-                              i32 3,
+                              <1 x float> %x,
+                              i32 %y,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <1 x float> %powi
 }
 
-define <2 x double> @constrained_vector_powi_v2f64() #0 {
+define <2 x double> @constrained_vector_powi_v2f64(<2 x double> %x, i32 %y) #0 {
 ; PC64LE-LABEL: constrained_vector_powi_v2f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -96(1)
 ; PC64LE-NEXT:    li 3, 48
-; PC64LE-NEXT:    li 4, 3
+; PC64LE-NEXT:    std 30, 80(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    clrldi 30, 5, 32
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    mr 4, 30
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI36_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI36_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl __powidf2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI36_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    li 4, 3
-; PC64LE-NEXT:    lfd 1, .LCPI36_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 62, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    mr 4, 30
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl __powidf2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 34, 1, 63
+; PC64LE-NEXT:    xxmrghd 34, 62, 1
+; PC64LE-NEXT:    ld 30, 80(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -1865,157 +1727,181 @@ define <2 x double> @constrained_vector_powi_v2f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI36_0 at toc@ha
-; PC64LE9-NEXT:    li 4, 3
-; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI36_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    std 30, 64(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 2
+; PC64LE9-NEXT:    clrldi 30, 5, 32
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
+; PC64LE9-NEXT:    mr 4, 30
+; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
 ; PC64LE9-NEXT:    bl __powidf2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI36_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    li 4, 3
-; PC64LE9-NEXT:    lfd 1, .LCPI36_1 at toc@l(3)
+; PC64LE9-NEXT:    mr 4, 30
+; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl __powidf2
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 34, 1, 63
-; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    xxmrghd 34, 62, 1
+; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    ld 30, 64(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %powi = call <2 x double> @llvm.experimental.constrained.powi.v2f64(
-                              <2 x double> <double 42.1, double 42.2>,
-                              i32 3,
+                              <2 x double> %x,
+                              i32 %y,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <2 x double> %powi
 }
 
-define <3 x float> @constrained_vector_powi_v3f32() #0 {
+define <3 x float> @constrained_vector_powi_v3f32(<3 x float> %x, i32 %y) #0 {
 ;
 ;
 ; PC64LE-LABEL: constrained_vector_powi_v3f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
-; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -48(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI37_0 at toc@ha
-; PC64LE-NEXT:    li 4, 3
-; PC64LE-NEXT:    lfs 1, .LCPI37_0 at toc@l(3)
+; PC64LE-NEXT:    stdu 1, -96(1)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE-NEXT:    std 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    clrldi 30, 5, 32
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stfd 30, 80(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    mr 4, 30
+; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl __powisf2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI37_1 at toc@ha
+; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    fmr 31, 1
-; PC64LE-NEXT:    li 4, 3
-; PC64LE-NEXT:    lfs 1, .LCPI37_1 at toc@l(3)
+; PC64LE-NEXT:    mr 4, 30
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl __powisf2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI37_2 at toc@ha
+; PC64LE-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE-NEXT:    fmr 30, 1
-; PC64LE-NEXT:    li 4, 3
-; PC64LE-NEXT:    lfs 1, .LCPI37_2 at toc@l(3)
+; PC64LE-NEXT:    mr 4, 30
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl __powisf2
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xscvdpspn 34, 30
-; PC64LE-NEXT:    addis 3, 2, .LCPI37_3 at toc@ha
+; PC64LE-NEXT:    addis 3, 2, .LCPI37_0 at toc@ha
+; PC64LE-NEXT:    lfd 30, 80(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    ld 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    xscvdpspn 35, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI37_3 at toc@l
+; PC64LE-NEXT:    addi 3, 3, .LCPI37_0 at toc@l
 ; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    vmrghw 2, 2, 3
 ; PC64LE-NEXT:    xscvdpspn 35, 31
+; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
-; PC64LE-NEXT:    addi 1, 1, 48
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
-; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_powi_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
-; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI37_0 at toc@ha
-; PC64LE9-NEXT:    li 4, 3
-; PC64LE9-NEXT:    lfs 1, .LCPI37_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    std 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    clrldi 30, 5, 32
+; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 2
+; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    mr 4, 30
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl __powisf2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI37_1 at toc@ha
+; PC64LE9-NEXT:    xxswapd 0, 63
 ; PC64LE9-NEXT:    fmr 31, 1
-; PC64LE9-NEXT:    li 4, 3
-; PC64LE9-NEXT:    lfs 1, .LCPI37_1 at toc@l(3)
+; PC64LE9-NEXT:    mr 4, 30
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl __powisf2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI37_2 at toc@ha
+; PC64LE9-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE9-NEXT:    fmr 30, 1
-; PC64LE9-NEXT:    li 4, 3
-; PC64LE9-NEXT:    lfs 1, .LCPI37_2 at toc@l(3)
+; PC64LE9-NEXT:    mr 4, 30
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl __powisf2
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    xscvdpspn 34, 1
 ; PC64LE9-NEXT:    xscvdpspn 35, 30
-; PC64LE9-NEXT:    addis 3, 2, .LCPI37_3 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI37_3 at toc@l
+; PC64LE9-NEXT:    addis 3, 2, .LCPI37_0 at toc@ha
+; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    ld 30, 48(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 3, 3, .LCPI37_0 at toc@l
 ; PC64LE9-NEXT:    lxvx 36, 0, 3
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    xscvdpspn 35, 31
+; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
-; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 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,
+                              <3 x float> %x,
+                              i32 %y,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <3 x float> %powi
 }
 
-define <3 x double> @constrained_vector_powi_v3f64() #0 {
+define <3 x double> @constrained_vector_powi_v3f64(<3 x double> %x, i32 %y) #0 {
 ; PC64LE-LABEL: constrained_vector_powi_v3f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -96(1)
+; PC64LE-NEXT:    std 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    clrldi 30, 6, 32
 ; PC64LE-NEXT:    li 3, 48
-; PC64LE-NEXT:    li 4, 3
+; PC64LE-NEXT:    stfd 30, 80(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    fmr 30, 2
+; PC64LE-NEXT:    mr 4, 30
+; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    fmr 31, 3
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI38_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI38_0 at toc@l(3)
 ; PC64LE-NEXT:    bl __powidf2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI38_1 at toc@ha
 ; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    li 4, 3
-; PC64LE-NEXT:    lfs 1, .LCPI38_1 at toc@l(3)
+; PC64LE-NEXT:    fmr 1, 30
+; PC64LE-NEXT:    mr 4, 30
 ; PC64LE-NEXT:    bl __powidf2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI38_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 63, 1
-; PC64LE-NEXT:    li 4, 3
-; PC64LE-NEXT:    lfd 1, .LCPI38_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 63, 1, 63
+; PC64LE-NEXT:    mr 4, 30
+; PC64LE-NEXT:    fmr 1, 31
 ; PC64LE-NEXT:    bl __powidf2
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    li 3, 48
 ; PC64LE-NEXT:    xxlor 2, 63, 63
+; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    lfd 30, 80(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    ld 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    fmr 3, 1
 ; PC64LE-NEXT:    fmr 1, 0
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -2024,86 +1910,98 @@ define <3 x double> @constrained_vector_powi_v3f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI38_0 at toc@ha
-; PC64LE9-NEXT:    li 4, 3
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    std 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    clrldi 30, 6, 32
 ; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI38_0 at toc@l(3)
+; PC64LE9-NEXT:    mr 4, 30
+; PC64LE9-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    fmr 31, 3
+; PC64LE9-NEXT:    fmr 30, 2
 ; PC64LE9-NEXT:    bl __powidf2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI38_1 at toc@ha
 ; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    li 4, 3
-; PC64LE9-NEXT:    lfs 1, .LCPI38_1 at toc@l(3)
+; PC64LE9-NEXT:    fmr 1, 30
+; PC64LE9-NEXT:    mr 4, 30
 ; PC64LE9-NEXT:    bl __powidf2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI38_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 63, 1
-; PC64LE9-NEXT:    li 4, 3
-; PC64LE9-NEXT:    lfd 1, .LCPI38_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 63, 1, 63
+; PC64LE9-NEXT:    fmr 1, 31
+; PC64LE9-NEXT:    mr 4, 30
 ; PC64LE9-NEXT:    bl __powidf2
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    fmr 3, 1
 ; PC64LE9-NEXT:    xxswapd 1, 63
 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
 ; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    ld 30, 48(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %powi = call <3 x double> @llvm.experimental.constrained.powi.v3f64(
-                          <3 x double> <double 42.0, double 42.1, double 42.2>,
-                          i32 3,
+                          <3 x double> %x,
+                          i32 %y,
                           metadata !"round.dynamic",
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %powi
 }
 
-define <4 x double> @constrained_vector_powi_v4f64() #0 {
+define <4 x double> @constrained_vector_powi_v4f64(<4 x double> %x, i32 %y) #0 {
 ; PC64LE-LABEL: constrained_vector_powi_v4f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -80(1)
+; PC64LE-NEXT:    stdu 1, -112(1)
 ; PC64LE-NEXT:    li 3, 48
-; PC64LE-NEXT:    li 4, 3
-; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    std 30, 96(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    clrldi 30, 7, 32
+; PC64LE-NEXT:    stxvd2x 61, 1, 3 # 16-byte Folded Spill
 ; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    mr 4, 30
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 30, 2
+; PC64LE-NEXT:    li 3, 80
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI39_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI39_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 3
+; PC64LE-NEXT:    xxlor 1, 62, 62
 ; PC64LE-NEXT:    bl __powidf2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI39_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    li 4, 3
-; PC64LE-NEXT:    lfd 1, .LCPI39_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 62
+; PC64LE-NEXT:    mr 4, 30
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl __powidf2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI39_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 1, 63
-; PC64LE-NEXT:    li 4, 3
-; PC64LE-NEXT:    lfd 1, .LCPI39_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 62, 61, 1
+; PC64LE-NEXT:    mr 4, 30
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl __powidf2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI39_3 at toc@ha
-; PC64LE-NEXT:    xxlor 62, 1, 1
-; PC64LE-NEXT:    li 4, 3
-; PC64LE-NEXT:    lfd 1, .LCPI39_3 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    mr 4, 30
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl __powidf2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 64
-; PC64LE-NEXT:    vmr 2, 31
+; PC64LE-NEXT:    li 3, 80
+; PC64LE-NEXT:    vmr 2, 30
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 35, 1, 62
+; PC64LE-NEXT:    xxmrghd 35, 61, 1
+; PC64LE-NEXT:    ld 30, 96(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 80
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 61, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 112
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -2112,60 +2010,62 @@ define <4 x double> @constrained_vector_powi_v4f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -64(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI39_0 at toc@ha
-; PC64LE9-NEXT:    li 4, 3
-; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI39_0 at toc@l(3)
-; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stdu 1, -96(1)
+; PC64LE9-NEXT:    std 30, 80(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stxv 62, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 30, 2
+; PC64LE9-NEXT:    clrldi 30, 7, 32
+; PC64LE9-NEXT:    xscpsgndp 1, 62, 62
+; PC64LE9-NEXT:    mr 4, 30
+; PC64LE9-NEXT:    stxv 61, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 64(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 3
 ; PC64LE9-NEXT:    bl __powidf2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI39_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    li 4, 3
-; PC64LE9-NEXT:    lfd 1, .LCPI39_1 at toc@l(3)
+; PC64LE9-NEXT:    mr 4, 30
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 62
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl __powidf2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI39_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 1, 63
-; PC64LE9-NEXT:    li 4, 3
-; PC64LE9-NEXT:    lfd 1, .LCPI39_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 62, 61, 1
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
+; PC64LE9-NEXT:    mr 4, 30
 ; PC64LE9-NEXT:    bl __powidf2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI39_3 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
-; PC64LE9-NEXT:    li 4, 3
-; PC64LE9-NEXT:    lfd 1, .LCPI39_3 at toc@l(3)
+; PC64LE9-NEXT:    mr 4, 30
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl __powidf2
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 35, 1, 62
-; PC64LE9-NEXT:    vmr 2, 31
-; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 64
+; PC64LE9-NEXT:    xxmrghd 35, 61, 1
+; PC64LE9-NEXT:    vmr 2, 30
+; PC64LE9-NEXT:    lxv 63, 64(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 61, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    ld 30, 80(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 96
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 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,
+                              <4 x double> %x,
+                              i32 %y,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <4 x double> %powi
 }
 
-define <1 x float> @constrained_vector_sin_v1f32() #0 {
+define <1 x float> @constrained_vector_sin_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_sin_v1f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
 ; PC64LE-NEXT:    stdu 1, -32(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI40_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI40_0 at toc@l(3)
 ; PC64LE-NEXT:    bl sinf
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    addi 1, 1, 32
@@ -2178,8 +2078,6 @@ define <1 x float> @constrained_vector_sin_v1f32() #0 {
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
 ; PC64LE9-NEXT:    stdu 1, -32(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI40_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI40_0 at toc@l(3)
 ; PC64LE9-NEXT:    bl sinf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    addi 1, 1, 32
@@ -2188,34 +2086,38 @@ define <1 x float> @constrained_vector_sin_v1f32() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %sin = call <1 x float> @llvm.experimental.constrained.sin.v1f32(
-                             <1 x float> <float 42.0>,
+                             <1 x float> %x,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <1 x float> %sin
 }
 
-define <2 x double> @constrained_vector_sin_v2f64() #0 {
+define <2 x double> @constrained_vector_sin_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_sin_v2f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -80(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI41_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI41_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl sin
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI41_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI41_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 62, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl sin
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 34, 63, 1
+; PC64LE-NEXT:    xxmrghd 34, 62, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -2224,142 +2126,154 @@ define <2 x double> @constrained_vector_sin_v2f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI41_0 at toc@ha
-; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI41_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
+; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
 ; PC64LE9-NEXT:    bl sin
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI41_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI41_1 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl sin
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 34, 63, 1
-; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    xxmrghd 34, 62, 1
+; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %sin = call <2 x double> @llvm.experimental.constrained.sin.v2f64(
-                             <2 x double> <double 42.0, double 42.1>,
+                             <2 x double> %x,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <2 x double> %sin
 }
 
-define <3 x float> @constrained_vector_sin_v3f32() #0 {
+define <3 x float> @constrained_vector_sin_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_sin_v3f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
-; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -48(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI42_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI42_0 at toc@l(3)
+; PC64LE-NEXT:    stdu 1, -80(1)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl sinf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI42_1 at toc@ha
+; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    fmr 31, 1
-; PC64LE-NEXT:    lfs 1, .LCPI42_1 at toc@l(3)
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl sinf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI42_2 at toc@ha
+; PC64LE-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE-NEXT:    fmr 30, 1
-; PC64LE-NEXT:    lfs 1, .LCPI42_2 at toc@l(3)
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl sinf
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xscvdpspn 34, 30
-; PC64LE-NEXT:    addis 3, 2, .LCPI42_3 at toc@ha
+; PC64LE-NEXT:    addis 3, 2, .LCPI42_0 at toc@ha
+; PC64LE-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    xscvdpspn 35, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI42_3 at toc@l
+; PC64LE-NEXT:    addi 3, 3, .LCPI42_0 at toc@l
 ; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    vmrghw 2, 2, 3
 ; PC64LE-NEXT:    xscvdpspn 35, 31
+; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
-; PC64LE-NEXT:    addi 1, 1, 48
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
-; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_sin_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
-; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI42_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI42_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    stfd 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    vmr 31, 2
 ; PC64LE9-NEXT:    bl sinf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI42_1 at toc@ha
+; PC64LE9-NEXT:    xxswapd 0, 63
 ; PC64LE9-NEXT:    fmr 31, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI42_1 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl sinf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI42_2 at toc@ha
+; PC64LE9-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE9-NEXT:    fmr 30, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI42_2 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl sinf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    xscvdpspn 34, 1
 ; PC64LE9-NEXT:    xscvdpspn 35, 30
-; PC64LE9-NEXT:    addis 3, 2, .LCPI42_3 at toc@ha
+; PC64LE9-NEXT:    addis 3, 2, .LCPI42_0 at toc@ha
 ; PC64LE9-NEXT:    xscvdpspn 36, 31
-; PC64LE9-NEXT:    addi 3, 3, .LCPI42_3 at toc@l
+; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 3, 3, .LCPI42_0 at toc@l
+; PC64LE9-NEXT:    lfd 30, 48(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    lxvx 35, 0, 3
 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
-; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %sin = call <3 x float> @llvm.experimental.constrained.sin.v3f32(
-                              <3 x float> <float 42.0, float 43.0, float 44.0>,
+                              <3 x float> %x,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <3 x float> %sin
 }
 
-define <3 x double> @constrained_vector_sin_v3f64() #0 {
+define <3 x double> @constrained_vector_sin_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_sin_v3f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -80(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI43_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI43_0 at toc@l(3)
+; PC64LE-NEXT:    fmr 31, 3
+; PC64LE-NEXT:    fmr 30, 2
 ; PC64LE-NEXT:    bl sin
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI43_1 at toc@ha
 ; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI43_1 at toc@l(3)
+; PC64LE-NEXT:    fmr 1, 30
 ; PC64LE-NEXT:    bl sin
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI43_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 63, 1
-; PC64LE-NEXT:    lfd 1, .LCPI43_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 63, 1, 63
+; PC64LE-NEXT:    fmr 1, 31
 ; PC64LE-NEXT:    bl sin
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    li 3, 48
 ; PC64LE-NEXT:    xxlor 2, 63, 63
+; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    fmr 3, 1
 ; PC64LE-NEXT:    fmr 1, 0
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -2368,78 +2282,84 @@ define <3 x double> @constrained_vector_sin_v3f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI43_0 at toc@ha
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    stfd 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI43_0 at toc@l(3)
+; PC64LE9-NEXT:    fmr 31, 3
+; PC64LE9-NEXT:    fmr 30, 2
 ; PC64LE9-NEXT:    bl sin
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI43_1 at toc@ha
 ; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI43_1 at toc@l(3)
+; PC64LE9-NEXT:    fmr 1, 30
 ; PC64LE9-NEXT:    bl sin
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI43_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 63, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI43_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 63, 1, 63
+; PC64LE9-NEXT:    fmr 1, 31
 ; PC64LE9-NEXT:    bl sin
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    fmr 3, 1
 ; PC64LE9-NEXT:    xxswapd 1, 63
 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
 ; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    lfd 30, 48(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %sin = call <3 x double> @llvm.experimental.constrained.sin.v3f64(
-                          <3 x double> <double 42.0, double 42.1, double 42.2>,
+                          <3 x double> %x,
                           metadata !"round.dynamic",
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %sin
 }
 
-define <4 x double> @constrained_vector_sin_v4f64() #0 {
+define <4 x double> @constrained_vector_sin_v4f64(<4 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_sin_v4f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -80(1)
+; PC64LE-NEXT:    stdu 1, -96(1)
 ; PC64LE-NEXT:    li 3, 48
-; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 61, 1, 3 # 16-byte Folded Spill
 ; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 30, 2
+; PC64LE-NEXT:    li 3, 80
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI44_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI44_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 3
+; PC64LE-NEXT:    xxlor 1, 62, 62
 ; PC64LE-NEXT:    bl sin
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI44_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfd 1, .LCPI44_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 62
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl sin
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI44_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 1, 63
-; PC64LE-NEXT:    lfd 1, .LCPI44_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 62, 61, 1
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl sin
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI44_3 at toc@ha
-; PC64LE-NEXT:    xxlor 62, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI44_3 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl sin
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 64
-; PC64LE-NEXT:    vmr 3, 31
+; PC64LE-NEXT:    li 3, 80
+; PC64LE-NEXT:    vmr 2, 30
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 34, 62, 1
+; PC64LE-NEXT:    xxmrghd 35, 61, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 80
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 61, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -2448,55 +2368,54 @@ define <4 x double> @constrained_vector_sin_v4f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -64(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI44_0 at toc@ha
-; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI44_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    stxv 62, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 30, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 62, 62
+; PC64LE9-NEXT:    stxv 61, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 64(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 3
 ; PC64LE9-NEXT:    bl sin
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI44_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI44_1 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 62
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl sin
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI44_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 1, 63
-; PC64LE9-NEXT:    lfd 1, .LCPI44_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 62, 61, 1
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
 ; PC64LE9-NEXT:    bl sin
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI44_3 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI44_3 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl sin
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 34, 62, 1
-; PC64LE9-NEXT:    vmr 3, 31
-; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 64
+; PC64LE9-NEXT:    xxmrghd 35, 61, 1
+; PC64LE9-NEXT:    vmr 2, 30
+; PC64LE9-NEXT:    lxv 63, 64(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 61, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 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>,
+                             <4 x double> %x,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <4 x double> %sin
 }
 
-define <1 x float> @constrained_vector_cos_v1f32() #0 {
+define <1 x float> @constrained_vector_cos_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_cos_v1f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
 ; PC64LE-NEXT:    stdu 1, -32(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI45_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI45_0 at toc@l(3)
 ; PC64LE-NEXT:    bl cosf
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    addi 1, 1, 32
@@ -2509,8 +2428,6 @@ define <1 x float> @constrained_vector_cos_v1f32() #0 {
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
 ; PC64LE9-NEXT:    stdu 1, -32(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI45_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI45_0 at toc@l(3)
 ; PC64LE9-NEXT:    bl cosf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    addi 1, 1, 32
@@ -2519,34 +2436,38 @@ define <1 x float> @constrained_vector_cos_v1f32() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %cos = call <1 x float> @llvm.experimental.constrained.cos.v1f32(
-                             <1 x float> <float 42.0>,
+                             <1 x float> %x,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <1 x float> %cos
 }
 
-define <2 x double> @constrained_vector_cos_v2f64() #0 {
+define <2 x double> @constrained_vector_cos_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_cos_v2f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -80(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI46_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI46_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl cos
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI46_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI46_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 62, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl cos
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 34, 63, 1
+; PC64LE-NEXT:    xxmrghd 34, 62, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -2555,142 +2476,154 @@ define <2 x double> @constrained_vector_cos_v2f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI46_0 at toc@ha
-; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI46_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
+; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
 ; PC64LE9-NEXT:    bl cos
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI46_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI46_1 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl cos
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 34, 63, 1
-; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    xxmrghd 34, 62, 1
+; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %cos = call <2 x double> @llvm.experimental.constrained.cos.v2f64(
-                             <2 x double> <double 42.0, double 42.1>,
+                             <2 x double> %x,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <2 x double> %cos
 }
 
-define <3 x float> @constrained_vector_cos_v3f32() #0 {
+define <3 x float> @constrained_vector_cos_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_cos_v3f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
-; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -48(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI47_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI47_0 at toc@l(3)
+; PC64LE-NEXT:    stdu 1, -80(1)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl cosf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI47_1 at toc@ha
+; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    fmr 31, 1
-; PC64LE-NEXT:    lfs 1, .LCPI47_1 at toc@l(3)
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl cosf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI47_2 at toc@ha
+; PC64LE-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE-NEXT:    fmr 30, 1
-; PC64LE-NEXT:    lfs 1, .LCPI47_2 at toc@l(3)
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl cosf
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xscvdpspn 34, 30
-; PC64LE-NEXT:    addis 3, 2, .LCPI47_3 at toc@ha
+; PC64LE-NEXT:    addis 3, 2, .LCPI47_0 at toc@ha
+; PC64LE-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    xscvdpspn 35, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI47_3 at toc@l
+; PC64LE-NEXT:    addi 3, 3, .LCPI47_0 at toc@l
 ; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    vmrghw 2, 2, 3
 ; PC64LE-NEXT:    xscvdpspn 35, 31
+; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
-; PC64LE-NEXT:    addi 1, 1, 48
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
-; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_cos_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
-; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI47_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI47_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    stfd 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    vmr 31, 2
 ; PC64LE9-NEXT:    bl cosf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI47_1 at toc@ha
+; PC64LE9-NEXT:    xxswapd 0, 63
 ; PC64LE9-NEXT:    fmr 31, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI47_1 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl cosf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI47_2 at toc@ha
+; PC64LE9-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE9-NEXT:    fmr 30, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI47_2 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl cosf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    xscvdpspn 34, 1
 ; PC64LE9-NEXT:    xscvdpspn 35, 30
-; PC64LE9-NEXT:    addis 3, 2, .LCPI47_3 at toc@ha
+; PC64LE9-NEXT:    addis 3, 2, .LCPI47_0 at toc@ha
 ; PC64LE9-NEXT:    xscvdpspn 36, 31
-; PC64LE9-NEXT:    addi 3, 3, .LCPI47_3 at toc@l
+; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 3, 3, .LCPI47_0 at toc@l
+; PC64LE9-NEXT:    lfd 30, 48(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    lxvx 35, 0, 3
 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
-; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %cos = call <3 x float> @llvm.experimental.constrained.cos.v3f32(
-                              <3 x float> <float 42.0, float 43.0, float 44.0>,
+                              <3 x float> %x,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <3 x float> %cos
 }
 
-define <3 x double> @constrained_vector_cos_v3f64() #0 {
+define <3 x double> @constrained_vector_cos_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_cos_v3f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -80(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI48_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI48_0 at toc@l(3)
+; PC64LE-NEXT:    fmr 31, 3
+; PC64LE-NEXT:    fmr 30, 2
 ; PC64LE-NEXT:    bl cos
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI48_1 at toc@ha
 ; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI48_1 at toc@l(3)
+; PC64LE-NEXT:    fmr 1, 30
 ; PC64LE-NEXT:    bl cos
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI48_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 63, 1
-; PC64LE-NEXT:    lfd 1, .LCPI48_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 63, 1, 63
+; PC64LE-NEXT:    fmr 1, 31
 ; PC64LE-NEXT:    bl cos
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    li 3, 48
 ; PC64LE-NEXT:    xxlor 2, 63, 63
+; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    fmr 3, 1
 ; PC64LE-NEXT:    fmr 1, 0
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -2699,78 +2632,84 @@ define <3 x double> @constrained_vector_cos_v3f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI48_0 at toc@ha
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    stfd 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI48_0 at toc@l(3)
+; PC64LE9-NEXT:    fmr 31, 3
+; PC64LE9-NEXT:    fmr 30, 2
 ; PC64LE9-NEXT:    bl cos
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI48_1 at toc@ha
 ; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI48_1 at toc@l(3)
+; PC64LE9-NEXT:    fmr 1, 30
 ; PC64LE9-NEXT:    bl cos
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI48_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 63, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI48_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 63, 1, 63
+; PC64LE9-NEXT:    fmr 1, 31
 ; PC64LE9-NEXT:    bl cos
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    fmr 3, 1
 ; PC64LE9-NEXT:    xxswapd 1, 63
 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
 ; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    lfd 30, 48(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %cos = call <3 x double> @llvm.experimental.constrained.cos.v3f64(
-                          <3 x double> <double 42.0, double 42.1, double 42.2>,
+                          <3 x double> %x,
                           metadata !"round.dynamic",
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %cos
 }
 
-define <4 x double> @constrained_vector_cos_v4f64() #0 {
+define <4 x double> @constrained_vector_cos_v4f64(<4 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_cos_v4f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -80(1)
+; PC64LE-NEXT:    stdu 1, -96(1)
 ; PC64LE-NEXT:    li 3, 48
-; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 61, 1, 3 # 16-byte Folded Spill
 ; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 30, 2
+; PC64LE-NEXT:    li 3, 80
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI49_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI49_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 3
+; PC64LE-NEXT:    xxlor 1, 62, 62
 ; PC64LE-NEXT:    bl cos
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI49_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfd 1, .LCPI49_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 62
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl cos
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI49_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 1, 63
-; PC64LE-NEXT:    lfd 1, .LCPI49_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 62, 61, 1
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl cos
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI49_3 at toc@ha
-; PC64LE-NEXT:    xxlor 62, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI49_3 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl cos
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 64
-; PC64LE-NEXT:    vmr 3, 31
+; PC64LE-NEXT:    li 3, 80
+; PC64LE-NEXT:    vmr 2, 30
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 34, 62, 1
+; PC64LE-NEXT:    xxmrghd 35, 61, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 80
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 61, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -2779,55 +2718,54 @@ define <4 x double> @constrained_vector_cos_v4f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -64(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI49_0 at toc@ha
-; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI49_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    stxv 62, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 30, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 62, 62
+; PC64LE9-NEXT:    stxv 61, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 64(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 3
 ; PC64LE9-NEXT:    bl cos
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI49_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI49_1 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 62
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl cos
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI49_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 1, 63
-; PC64LE9-NEXT:    lfd 1, .LCPI49_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 62, 61, 1
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
 ; PC64LE9-NEXT:    bl cos
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI49_3 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI49_3 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl cos
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 34, 62, 1
-; PC64LE9-NEXT:    vmr 3, 31
-; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 64
+; PC64LE9-NEXT:    xxmrghd 35, 61, 1
+; PC64LE9-NEXT:    vmr 2, 30
+; PC64LE9-NEXT:    lxv 63, 64(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 61, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 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>,
+                             <4 x double> %x,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <4 x double> %cos
 }
 
-define <1 x float> @constrained_vector_exp_v1f32() #0 {
+define <1 x float> @constrained_vector_exp_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_exp_v1f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
 ; PC64LE-NEXT:    stdu 1, -32(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI50_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI50_0 at toc@l(3)
 ; PC64LE-NEXT:    bl expf
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    addi 1, 1, 32
@@ -2840,8 +2778,6 @@ define <1 x float> @constrained_vector_exp_v1f32() #0 {
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
 ; PC64LE9-NEXT:    stdu 1, -32(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI50_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI50_0 at toc@l(3)
 ; PC64LE9-NEXT:    bl expf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    addi 1, 1, 32
@@ -2850,34 +2786,38 @@ define <1 x float> @constrained_vector_exp_v1f32() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %exp = call <1 x float> @llvm.experimental.constrained.exp.v1f32(
-                             <1 x float> <float 42.0>,
+                             <1 x float> %x,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <1 x float> %exp
 }
 
-define <2 x double> @constrained_vector_exp_v2f64() #0 {
+define <2 x double> @constrained_vector_exp_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_exp_v2f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -80(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI51_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI51_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl exp
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI51_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI51_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 62, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl exp
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 34, 63, 1
+; PC64LE-NEXT:    xxmrghd 34, 62, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -2886,142 +2826,154 @@ define <2 x double> @constrained_vector_exp_v2f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI51_0 at toc@ha
-; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI51_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
+; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
 ; PC64LE9-NEXT:    bl exp
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI51_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI51_1 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl exp
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 34, 63, 1
-; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    xxmrghd 34, 62, 1
+; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %exp = call <2 x double> @llvm.experimental.constrained.exp.v2f64(
-                             <2 x double> <double 42.0, double 42.1>,
+                             <2 x double> %x,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <2 x double> %exp
 }
 
-define <3 x float> @constrained_vector_exp_v3f32() #0 {
+define <3 x float> @constrained_vector_exp_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_exp_v3f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
-; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -48(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI52_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI52_0 at toc@l(3)
+; PC64LE-NEXT:    stdu 1, -80(1)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl expf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI52_1 at toc@ha
+; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    fmr 31, 1
-; PC64LE-NEXT:    lfs 1, .LCPI52_1 at toc@l(3)
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl expf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI52_2 at toc@ha
+; PC64LE-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE-NEXT:    fmr 30, 1
-; PC64LE-NEXT:    lfs 1, .LCPI52_2 at toc@l(3)
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl expf
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xscvdpspn 34, 30
-; PC64LE-NEXT:    addis 3, 2, .LCPI52_3 at toc@ha
+; PC64LE-NEXT:    addis 3, 2, .LCPI52_0 at toc@ha
+; PC64LE-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    xscvdpspn 35, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI52_3 at toc@l
+; PC64LE-NEXT:    addi 3, 3, .LCPI52_0 at toc@l
 ; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    vmrghw 2, 2, 3
 ; PC64LE-NEXT:    xscvdpspn 35, 31
+; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
-; PC64LE-NEXT:    addi 1, 1, 48
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
-; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_exp_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
-; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI52_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI52_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    stfd 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    vmr 31, 2
 ; PC64LE9-NEXT:    bl expf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI52_1 at toc@ha
+; PC64LE9-NEXT:    xxswapd 0, 63
 ; PC64LE9-NEXT:    fmr 31, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI52_1 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl expf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI52_2 at toc@ha
+; PC64LE9-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE9-NEXT:    fmr 30, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI52_2 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl expf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    xscvdpspn 34, 1
 ; PC64LE9-NEXT:    xscvdpspn 35, 30
-; PC64LE9-NEXT:    addis 3, 2, .LCPI52_3 at toc@ha
+; PC64LE9-NEXT:    addis 3, 2, .LCPI52_0 at toc@ha
 ; PC64LE9-NEXT:    xscvdpspn 36, 31
-; PC64LE9-NEXT:    addi 3, 3, .LCPI52_3 at toc@l
+; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 3, 3, .LCPI52_0 at toc@l
+; PC64LE9-NEXT:    lfd 30, 48(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    lxvx 35, 0, 3
 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
-; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %exp = call <3 x float> @llvm.experimental.constrained.exp.v3f32(
-                              <3 x float> <float 42.0, float 43.0, float 44.0>,
+                              <3 x float> %x,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <3 x float> %exp
 }
 
-define <3 x double> @constrained_vector_exp_v3f64() #0 {
+define <3 x double> @constrained_vector_exp_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_exp_v3f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -80(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI53_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI53_0 at toc@l(3)
+; PC64LE-NEXT:    fmr 31, 3
+; PC64LE-NEXT:    fmr 30, 2
 ; PC64LE-NEXT:    bl exp
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI53_1 at toc@ha
 ; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI53_1 at toc@l(3)
+; PC64LE-NEXT:    fmr 1, 30
 ; PC64LE-NEXT:    bl exp
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI53_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 63, 1
-; PC64LE-NEXT:    lfd 1, .LCPI53_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 63, 1, 63
+; PC64LE-NEXT:    fmr 1, 31
 ; PC64LE-NEXT:    bl exp
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    li 3, 48
 ; PC64LE-NEXT:    xxlor 2, 63, 63
+; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    fmr 3, 1
 ; PC64LE-NEXT:    fmr 1, 0
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -3030,78 +2982,84 @@ define <3 x double> @constrained_vector_exp_v3f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI53_0 at toc@ha
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    stfd 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI53_0 at toc@l(3)
+; PC64LE9-NEXT:    fmr 31, 3
+; PC64LE9-NEXT:    fmr 30, 2
 ; PC64LE9-NEXT:    bl exp
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI53_1 at toc@ha
 ; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI53_1 at toc@l(3)
+; PC64LE9-NEXT:    fmr 1, 30
 ; PC64LE9-NEXT:    bl exp
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI53_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 63, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI53_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 63, 1, 63
+; PC64LE9-NEXT:    fmr 1, 31
 ; PC64LE9-NEXT:    bl exp
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    fmr 3, 1
 ; PC64LE9-NEXT:    xxswapd 1, 63
 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
 ; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    lfd 30, 48(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %exp = call <3 x double> @llvm.experimental.constrained.exp.v3f64(
-                          <3 x double> <double 42.0, double 42.1, double 42.2>,
+                          <3 x double> %x,
                           metadata !"round.dynamic",
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %exp
 }
 
-define <4 x double> @constrained_vector_exp_v4f64() #0 {
+define <4 x double> @constrained_vector_exp_v4f64(<4 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_exp_v4f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -80(1)
+; PC64LE-NEXT:    stdu 1, -96(1)
 ; PC64LE-NEXT:    li 3, 48
-; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 61, 1, 3 # 16-byte Folded Spill
 ; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 30, 2
+; PC64LE-NEXT:    li 3, 80
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI54_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI54_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 3
+; PC64LE-NEXT:    xxlor 1, 62, 62
 ; PC64LE-NEXT:    bl exp
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI54_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfd 1, .LCPI54_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 62
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl exp
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI54_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 1, 63
-; PC64LE-NEXT:    lfd 1, .LCPI54_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 62, 61, 1
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl exp
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI54_3 at toc@ha
-; PC64LE-NEXT:    xxlor 62, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI54_3 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl exp
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 64
-; PC64LE-NEXT:    vmr 3, 31
+; PC64LE-NEXT:    li 3, 80
+; PC64LE-NEXT:    vmr 2, 30
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 34, 62, 1
+; PC64LE-NEXT:    xxmrghd 35, 61, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 80
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 61, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -3110,55 +3068,54 @@ define <4 x double> @constrained_vector_exp_v4f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -64(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI54_0 at toc@ha
-; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI54_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    stxv 62, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 30, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 62, 62
+; PC64LE9-NEXT:    stxv 61, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 64(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 3
 ; PC64LE9-NEXT:    bl exp
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI54_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI54_1 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 62
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl exp
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI54_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 1, 63
-; PC64LE9-NEXT:    lfd 1, .LCPI54_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 62, 61, 1
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
 ; PC64LE9-NEXT:    bl exp
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI54_3 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI54_3 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl exp
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 34, 62, 1
-; PC64LE9-NEXT:    vmr 3, 31
-; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 64
+; PC64LE9-NEXT:    xxmrghd 35, 61, 1
+; PC64LE9-NEXT:    vmr 2, 30
+; PC64LE9-NEXT:    lxv 63, 64(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 61, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 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>,
+                             <4 x double> %x,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <4 x double> %exp
 }
 
-define <1 x float> @constrained_vector_exp2_v1f32() #0 {
+define <1 x float> @constrained_vector_exp2_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_exp2_v1f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
 ; PC64LE-NEXT:    stdu 1, -32(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI55_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI55_0 at toc@l(3)
 ; PC64LE-NEXT:    bl exp2f
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    addi 1, 1, 32
@@ -3171,8 +3128,6 @@ define <1 x float> @constrained_vector_exp2_v1f32() #0 {
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
 ; PC64LE9-NEXT:    stdu 1, -32(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI55_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI55_0 at toc@l(3)
 ; PC64LE9-NEXT:    bl exp2f
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    addi 1, 1, 32
@@ -3181,34 +3136,38 @@ define <1 x float> @constrained_vector_exp2_v1f32() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %exp2 = call <1 x float> @llvm.experimental.constrained.exp2.v1f32(
-                             <1 x float> <float 42.0>,
+                             <1 x float> %x,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <1 x float> %exp2
 }
 
-define <2 x double> @constrained_vector_exp2_v2f64() #0 {
+define <2 x double> @constrained_vector_exp2_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_exp2_v2f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -80(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI56_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI56_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl exp2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI56_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI56_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 62, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl exp2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 34, 1, 63
+; PC64LE-NEXT:    xxmrghd 34, 62, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -3217,142 +3176,154 @@ define <2 x double> @constrained_vector_exp2_v2f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI56_0 at toc@ha
-; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI56_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
+; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
 ; PC64LE9-NEXT:    bl exp2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI56_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI56_1 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl exp2
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 34, 1, 63
-; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    xxmrghd 34, 62, 1
+; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %exp2 = call <2 x double> @llvm.experimental.constrained.exp2.v2f64(
-                              <2 x double> <double 42.1, double 42.0>,
+                              <2 x double> %x,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <2 x double> %exp2
 }
 
-define <3 x float> @constrained_vector_exp2_v3f32() #0 {
+define <3 x float> @constrained_vector_exp2_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_exp2_v3f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
-; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -48(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI57_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI57_0 at toc@l(3)
+; PC64LE-NEXT:    stdu 1, -80(1)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl exp2f
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI57_1 at toc@ha
+; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    fmr 31, 1
-; PC64LE-NEXT:    lfs 1, .LCPI57_1 at toc@l(3)
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl exp2f
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI57_2 at toc@ha
+; PC64LE-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE-NEXT:    fmr 30, 1
-; PC64LE-NEXT:    lfs 1, .LCPI57_2 at toc@l(3)
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl exp2f
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xscvdpspn 34, 30
-; PC64LE-NEXT:    addis 3, 2, .LCPI57_3 at toc@ha
+; PC64LE-NEXT:    addis 3, 2, .LCPI57_0 at toc@ha
+; PC64LE-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    xscvdpspn 35, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI57_3 at toc@l
+; PC64LE-NEXT:    addi 3, 3, .LCPI57_0 at toc@l
 ; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    vmrghw 2, 2, 3
 ; PC64LE-NEXT:    xscvdpspn 35, 31
+; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
-; PC64LE-NEXT:    addi 1, 1, 48
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
-; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_exp2_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
-; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI57_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI57_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    stfd 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    vmr 31, 2
 ; PC64LE9-NEXT:    bl exp2f
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI57_1 at toc@ha
+; PC64LE9-NEXT:    xxswapd 0, 63
 ; PC64LE9-NEXT:    fmr 31, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI57_1 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl exp2f
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI57_2 at toc@ha
+; PC64LE9-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE9-NEXT:    fmr 30, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI57_2 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl exp2f
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    xscvdpspn 34, 1
 ; PC64LE9-NEXT:    xscvdpspn 35, 30
-; PC64LE9-NEXT:    addis 3, 2, .LCPI57_3 at toc@ha
+; PC64LE9-NEXT:    addis 3, 2, .LCPI57_0 at toc@ha
 ; PC64LE9-NEXT:    xscvdpspn 36, 31
-; PC64LE9-NEXT:    addi 3, 3, .LCPI57_3 at toc@l
+; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 3, 3, .LCPI57_0 at toc@l
+; PC64LE9-NEXT:    lfd 30, 48(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    lxvx 35, 0, 3
 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
-; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %exp2 = call <3 x float> @llvm.experimental.constrained.exp2.v3f32(
-                              <3 x float> <float 42.0, float 43.0, float 44.0>,
+                              <3 x float> %x,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <3 x float> %exp2
 }
 
-define <3 x double> @constrained_vector_exp2_v3f64() #0 {
+define <3 x double> @constrained_vector_exp2_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_exp2_v3f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -80(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI58_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI58_0 at toc@l(3)
+; PC64LE-NEXT:    fmr 31, 3
+; PC64LE-NEXT:    fmr 30, 2
 ; PC64LE-NEXT:    bl exp2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI58_1 at toc@ha
 ; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI58_1 at toc@l(3)
+; PC64LE-NEXT:    fmr 1, 30
 ; PC64LE-NEXT:    bl exp2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI58_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 63, 1
-; PC64LE-NEXT:    lfd 1, .LCPI58_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 63, 1, 63
+; PC64LE-NEXT:    fmr 1, 31
 ; PC64LE-NEXT:    bl exp2
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    li 3, 48
 ; PC64LE-NEXT:    xxlor 2, 63, 63
+; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    fmr 3, 1
 ; PC64LE-NEXT:    fmr 1, 0
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -3361,78 +3332,84 @@ define <3 x double> @constrained_vector_exp2_v3f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI58_0 at toc@ha
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    stfd 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI58_0 at toc@l(3)
+; PC64LE9-NEXT:    fmr 31, 3
+; PC64LE9-NEXT:    fmr 30, 2
 ; PC64LE9-NEXT:    bl exp2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI58_1 at toc@ha
 ; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI58_1 at toc@l(3)
+; PC64LE9-NEXT:    fmr 1, 30
 ; PC64LE9-NEXT:    bl exp2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI58_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 63, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI58_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 63, 1, 63
+; PC64LE9-NEXT:    fmr 1, 31
 ; PC64LE9-NEXT:    bl exp2
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    fmr 3, 1
 ; PC64LE9-NEXT:    xxswapd 1, 63
 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
 ; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    lfd 30, 48(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %exp2 = call <3 x double> @llvm.experimental.constrained.exp2.v3f64(
-                          <3 x double> <double 42.0, double 42.1, double 42.2>,
+                          <3 x double> %x,
                           metadata !"round.dynamic",
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %exp2
 }
 
-define <4 x double> @constrained_vector_exp2_v4f64() #0 {
+define <4 x double> @constrained_vector_exp2_v4f64(<4 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_exp2_v4f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -80(1)
+; PC64LE-NEXT:    stdu 1, -96(1)
 ; PC64LE-NEXT:    li 3, 48
-; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 61, 1, 3 # 16-byte Folded Spill
 ; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 30, 2
+; PC64LE-NEXT:    li 3, 80
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI59_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI59_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 3
+; PC64LE-NEXT:    xxlor 1, 62, 62
 ; PC64LE-NEXT:    bl exp2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI59_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfd 1, .LCPI59_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 62
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl exp2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI59_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 1, 63
-; PC64LE-NEXT:    lfd 1, .LCPI59_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 62, 61, 1
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl exp2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI59_3 at toc@ha
-; PC64LE-NEXT:    xxlor 62, 1, 1
-; PC64LE-NEXT:    lfd 1, .LCPI59_3 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl exp2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 64
-; PC64LE-NEXT:    vmr 2, 31
+; PC64LE-NEXT:    li 3, 80
+; PC64LE-NEXT:    vmr 2, 30
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 35, 1, 62
+; PC64LE-NEXT:    xxmrghd 35, 61, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 80
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 61, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -3441,55 +3418,54 @@ define <4 x double> @constrained_vector_exp2_v4f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -64(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI59_0 at toc@ha
-; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI59_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    stxv 62, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 30, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 62, 62
+; PC64LE9-NEXT:    stxv 61, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 64(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 3
 ; PC64LE9-NEXT:    bl exp2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI59_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI59_1 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 62
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl exp2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI59_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 1, 63
-; PC64LE9-NEXT:    lfd 1, .LCPI59_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 62, 61, 1
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
 ; PC64LE9-NEXT:    bl exp2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI59_3 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI59_3 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl exp2
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 35, 1, 62
-; PC64LE9-NEXT:    vmr 2, 31
-; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 64
+; PC64LE9-NEXT:    xxmrghd 35, 61, 1
+; PC64LE9-NEXT:    vmr 2, 30
+; PC64LE9-NEXT:    lxv 63, 64(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 61, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 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>,
+                              <4 x double> %x,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <4 x double> %exp2
 }
 
-define <1 x float> @constrained_vector_log_v1f32() #0 {
+define <1 x float> @constrained_vector_log_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_log_v1f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
 ; PC64LE-NEXT:    stdu 1, -32(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI60_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI60_0 at toc@l(3)
 ; PC64LE-NEXT:    bl logf
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    addi 1, 1, 32
@@ -3502,8 +3478,6 @@ define <1 x float> @constrained_vector_log_v1f32() #0 {
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
 ; PC64LE9-NEXT:    stdu 1, -32(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI60_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI60_0 at toc@l(3)
 ; PC64LE9-NEXT:    bl logf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    addi 1, 1, 32
@@ -3512,34 +3486,38 @@ define <1 x float> @constrained_vector_log_v1f32() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %log = call <1 x float> @llvm.experimental.constrained.log.v1f32(
-                             <1 x float> <float 42.0>,
+                             <1 x float> %x,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <1 x float> %log
 }
 
-define <2 x double> @constrained_vector_log_v2f64() #0 {
+define <2 x double> @constrained_vector_log_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_log_v2f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -80(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI61_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI61_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl log
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI61_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI61_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 62, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl log
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 34, 63, 1
+; PC64LE-NEXT:    xxmrghd 34, 62, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -3548,142 +3526,154 @@ define <2 x double> @constrained_vector_log_v2f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI61_0 at toc@ha
-; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI61_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
+; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
 ; PC64LE9-NEXT:    bl log
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI61_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI61_1 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl log
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 34, 63, 1
-; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    xxmrghd 34, 62, 1
+; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %log = call <2 x double> @llvm.experimental.constrained.log.v2f64(
-                             <2 x double> <double 42.0, double 42.1>,
+                             <2 x double> %x,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <2 x double> %log
 }
 
-define <3 x float> @constrained_vector_log_v3f32() #0 {
+define <3 x float> @constrained_vector_log_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_log_v3f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
-; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -48(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI62_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI62_0 at toc@l(3)
+; PC64LE-NEXT:    stdu 1, -80(1)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl logf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI62_1 at toc@ha
+; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    fmr 31, 1
-; PC64LE-NEXT:    lfs 1, .LCPI62_1 at toc@l(3)
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl logf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI62_2 at toc@ha
+; PC64LE-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE-NEXT:    fmr 30, 1
-; PC64LE-NEXT:    lfs 1, .LCPI62_2 at toc@l(3)
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl logf
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xscvdpspn 34, 30
-; PC64LE-NEXT:    addis 3, 2, .LCPI62_3 at toc@ha
+; PC64LE-NEXT:    addis 3, 2, .LCPI62_0 at toc@ha
+; PC64LE-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    xscvdpspn 35, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI62_3 at toc@l
+; PC64LE-NEXT:    addi 3, 3, .LCPI62_0 at toc@l
 ; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    vmrghw 2, 2, 3
 ; PC64LE-NEXT:    xscvdpspn 35, 31
+; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
-; PC64LE-NEXT:    addi 1, 1, 48
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
-; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_log_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
-; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI62_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI62_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    stfd 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    vmr 31, 2
 ; PC64LE9-NEXT:    bl logf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI62_1 at toc@ha
+; PC64LE9-NEXT:    xxswapd 0, 63
 ; PC64LE9-NEXT:    fmr 31, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI62_1 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl logf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI62_2 at toc@ha
+; PC64LE9-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE9-NEXT:    fmr 30, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI62_2 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl logf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    xscvdpspn 34, 1
 ; PC64LE9-NEXT:    xscvdpspn 35, 30
-; PC64LE9-NEXT:    addis 3, 2, .LCPI62_3 at toc@ha
+; PC64LE9-NEXT:    addis 3, 2, .LCPI62_0 at toc@ha
 ; PC64LE9-NEXT:    xscvdpspn 36, 31
-; PC64LE9-NEXT:    addi 3, 3, .LCPI62_3 at toc@l
+; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 3, 3, .LCPI62_0 at toc@l
+; PC64LE9-NEXT:    lfd 30, 48(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    lxvx 35, 0, 3
 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
-; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %log = call <3 x float> @llvm.experimental.constrained.log.v3f32(
-                              <3 x float> <float 42.0, float 43.0, float 44.0>,
+                              <3 x float> %x,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <3 x float> %log
 }
 
-define <3 x double> @constrained_vector_log_v3f64() #0 {
+define <3 x double> @constrained_vector_log_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_log_v3f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -80(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI63_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI63_0 at toc@l(3)
+; PC64LE-NEXT:    fmr 31, 3
+; PC64LE-NEXT:    fmr 30, 2
 ; PC64LE-NEXT:    bl log
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI63_1 at toc@ha
 ; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI63_1 at toc@l(3)
+; PC64LE-NEXT:    fmr 1, 30
 ; PC64LE-NEXT:    bl log
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI63_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 63, 1
-; PC64LE-NEXT:    lfd 1, .LCPI63_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 63, 1, 63
+; PC64LE-NEXT:    fmr 1, 31
 ; PC64LE-NEXT:    bl log
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    li 3, 48
 ; PC64LE-NEXT:    xxlor 2, 63, 63
+; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    fmr 3, 1
 ; PC64LE-NEXT:    fmr 1, 0
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -3692,78 +3682,84 @@ define <3 x double> @constrained_vector_log_v3f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI63_0 at toc@ha
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    stfd 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI63_0 at toc@l(3)
+; PC64LE9-NEXT:    fmr 31, 3
+; PC64LE9-NEXT:    fmr 30, 2
 ; PC64LE9-NEXT:    bl log
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI63_1 at toc@ha
 ; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI63_1 at toc@l(3)
+; PC64LE9-NEXT:    fmr 1, 30
 ; PC64LE9-NEXT:    bl log
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI63_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 63, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI63_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 63, 1, 63
+; PC64LE9-NEXT:    fmr 1, 31
 ; PC64LE9-NEXT:    bl log
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    fmr 3, 1
 ; PC64LE9-NEXT:    xxswapd 1, 63
 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
 ; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    lfd 30, 48(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %log = call <3 x double> @llvm.experimental.constrained.log.v3f64(
-                          <3 x double> <double 42.0, double 42.1, double 42.2>,
+                          <3 x double> %x,
                           metadata !"round.dynamic",
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %log
 }
 
-define <4 x double> @constrained_vector_log_v4f64() #0 {
+define <4 x double> @constrained_vector_log_v4f64(<4 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_log_v4f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -80(1)
+; PC64LE-NEXT:    stdu 1, -96(1)
 ; PC64LE-NEXT:    li 3, 48
-; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 61, 1, 3 # 16-byte Folded Spill
 ; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 30, 2
+; PC64LE-NEXT:    li 3, 80
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI64_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI64_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 3
+; PC64LE-NEXT:    xxlor 1, 62, 62
 ; PC64LE-NEXT:    bl log
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI64_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfd 1, .LCPI64_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 62
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl log
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI64_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 1, 63
-; PC64LE-NEXT:    lfd 1, .LCPI64_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 62, 61, 1
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl log
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI64_3 at toc@ha
-; PC64LE-NEXT:    xxlor 62, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI64_3 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl log
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 64
-; PC64LE-NEXT:    vmr 3, 31
+; PC64LE-NEXT:    li 3, 80
+; PC64LE-NEXT:    vmr 2, 30
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 34, 62, 1
+; PC64LE-NEXT:    xxmrghd 35, 61, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 80
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 61, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -3772,55 +3768,54 @@ define <4 x double> @constrained_vector_log_v4f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -64(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI64_0 at toc@ha
-; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI64_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    stxv 62, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 30, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 62, 62
+; PC64LE9-NEXT:    stxv 61, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 64(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 3
 ; PC64LE9-NEXT:    bl log
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI64_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI64_1 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 62
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl log
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI64_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 1, 63
-; PC64LE9-NEXT:    lfd 1, .LCPI64_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 62, 61, 1
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
 ; PC64LE9-NEXT:    bl log
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI64_3 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI64_3 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl log
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 34, 62, 1
-; PC64LE9-NEXT:    vmr 3, 31
-; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 64
+; PC64LE9-NEXT:    xxmrghd 35, 61, 1
+; PC64LE9-NEXT:    vmr 2, 30
+; PC64LE9-NEXT:    lxv 63, 64(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 61, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 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>,
+                             <4 x double> %x,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <4 x double> %log
 }
 
-define <1 x float> @constrained_vector_log10_v1f32() #0 {
+define <1 x float> @constrained_vector_log10_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_log10_v1f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
 ; PC64LE-NEXT:    stdu 1, -32(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI65_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI65_0 at toc@l(3)
 ; PC64LE-NEXT:    bl log10f
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    addi 1, 1, 32
@@ -3833,8 +3828,6 @@ define <1 x float> @constrained_vector_log10_v1f32() #0 {
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
 ; PC64LE9-NEXT:    stdu 1, -32(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI65_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI65_0 at toc@l(3)
 ; PC64LE9-NEXT:    bl log10f
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    addi 1, 1, 32
@@ -3843,34 +3836,38 @@ define <1 x float> @constrained_vector_log10_v1f32() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %log10 = call <1 x float> @llvm.experimental.constrained.log10.v1f32(
-                             <1 x float> <float 42.0>,
+                             <1 x float> %x,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <1 x float> %log10
 }
 
-define <2 x double> @constrained_vector_log10_v2f64() #0 {
+define <2 x double> @constrained_vector_log10_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_log10_v2f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -80(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI66_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI66_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl log10
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI66_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI66_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 62, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl log10
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 34, 63, 1
+; PC64LE-NEXT:    xxmrghd 34, 62, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -3879,142 +3876,154 @@ define <2 x double> @constrained_vector_log10_v2f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI66_0 at toc@ha
-; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI66_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
+; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
 ; PC64LE9-NEXT:    bl log10
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI66_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI66_1 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl log10
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 34, 63, 1
-; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    xxmrghd 34, 62, 1
+; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %log10 = call <2 x double> @llvm.experimental.constrained.log10.v2f64(
-                               <2 x double> <double 42.0, double 42.1>,
+                               <2 x double> %x,
                                metadata !"round.dynamic",
                                metadata !"fpexcept.strict") #1
   ret <2 x double> %log10
 }
 
-define <3 x float> @constrained_vector_log10_v3f32() #0 {
+define <3 x float> @constrained_vector_log10_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_log10_v3f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
-; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -48(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI67_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI67_0 at toc@l(3)
+; PC64LE-NEXT:    stdu 1, -80(1)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl log10f
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI67_1 at toc@ha
+; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    fmr 31, 1
-; PC64LE-NEXT:    lfs 1, .LCPI67_1 at toc@l(3)
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl log10f
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI67_2 at toc@ha
+; PC64LE-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE-NEXT:    fmr 30, 1
-; PC64LE-NEXT:    lfs 1, .LCPI67_2 at toc@l(3)
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl log10f
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xscvdpspn 34, 30
-; PC64LE-NEXT:    addis 3, 2, .LCPI67_3 at toc@ha
+; PC64LE-NEXT:    addis 3, 2, .LCPI67_0 at toc@ha
+; PC64LE-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    xscvdpspn 35, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI67_3 at toc@l
+; PC64LE-NEXT:    addi 3, 3, .LCPI67_0 at toc@l
 ; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    vmrghw 2, 2, 3
 ; PC64LE-NEXT:    xscvdpspn 35, 31
+; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
-; PC64LE-NEXT:    addi 1, 1, 48
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
-; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_log10_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
-; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI67_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI67_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    stfd 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    vmr 31, 2
 ; PC64LE9-NEXT:    bl log10f
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI67_1 at toc@ha
+; PC64LE9-NEXT:    xxswapd 0, 63
 ; PC64LE9-NEXT:    fmr 31, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI67_1 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl log10f
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI67_2 at toc@ha
+; PC64LE9-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE9-NEXT:    fmr 30, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI67_2 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl log10f
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    xscvdpspn 34, 1
 ; PC64LE9-NEXT:    xscvdpspn 35, 30
-; PC64LE9-NEXT:    addis 3, 2, .LCPI67_3 at toc@ha
+; PC64LE9-NEXT:    addis 3, 2, .LCPI67_0 at toc@ha
 ; PC64LE9-NEXT:    xscvdpspn 36, 31
-; PC64LE9-NEXT:    addi 3, 3, .LCPI67_3 at toc@l
+; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 3, 3, .LCPI67_0 at toc@l
+; PC64LE9-NEXT:    lfd 30, 48(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    lxvx 35, 0, 3
 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
-; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %log10 = call <3 x float> @llvm.experimental.constrained.log10.v3f32(
-                              <3 x float> <float 42.0, float 43.0, float 44.0>,
+                              <3 x float> %x,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <3 x float> %log10
 }
 
-define <3 x double> @constrained_vector_log10_v3f64() #0 {
+define <3 x double> @constrained_vector_log10_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_log10_v3f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -80(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI68_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI68_0 at toc@l(3)
+; PC64LE-NEXT:    fmr 31, 3
+; PC64LE-NEXT:    fmr 30, 2
 ; PC64LE-NEXT:    bl log10
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI68_1 at toc@ha
 ; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI68_1 at toc@l(3)
+; PC64LE-NEXT:    fmr 1, 30
 ; PC64LE-NEXT:    bl log10
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI68_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 63, 1
-; PC64LE-NEXT:    lfd 1, .LCPI68_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 63, 1, 63
+; PC64LE-NEXT:    fmr 1, 31
 ; PC64LE-NEXT:    bl log10
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    li 3, 48
 ; PC64LE-NEXT:    xxlor 2, 63, 63
+; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    fmr 3, 1
 ; PC64LE-NEXT:    fmr 1, 0
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -4023,78 +4032,84 @@ define <3 x double> @constrained_vector_log10_v3f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI68_0 at toc@ha
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    stfd 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI68_0 at toc@l(3)
+; PC64LE9-NEXT:    fmr 31, 3
+; PC64LE9-NEXT:    fmr 30, 2
 ; PC64LE9-NEXT:    bl log10
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI68_1 at toc@ha
 ; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI68_1 at toc@l(3)
+; PC64LE9-NEXT:    fmr 1, 30
 ; PC64LE9-NEXT:    bl log10
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI68_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 63, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI68_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 63, 1, 63
+; PC64LE9-NEXT:    fmr 1, 31
 ; PC64LE9-NEXT:    bl log10
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    fmr 3, 1
 ; PC64LE9-NEXT:    xxswapd 1, 63
 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
 ; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    lfd 30, 48(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %log10 = call <3 x double> @llvm.experimental.constrained.log10.v3f64(
-                          <3 x double> <double 42.0, double 42.1, double 42.2>,
+                          <3 x double> %x,
                           metadata !"round.dynamic",
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %log10
 }
 
-define <4 x double> @constrained_vector_log10_v4f64() #0 {
+define <4 x double> @constrained_vector_log10_v4f64(<4 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_log10_v4f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -80(1)
+; PC64LE-NEXT:    stdu 1, -96(1)
 ; PC64LE-NEXT:    li 3, 48
-; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 61, 1, 3 # 16-byte Folded Spill
 ; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 30, 2
+; PC64LE-NEXT:    li 3, 80
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI69_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI69_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 3
+; PC64LE-NEXT:    xxlor 1, 62, 62
 ; PC64LE-NEXT:    bl log10
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI69_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfd 1, .LCPI69_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 62
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl log10
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI69_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 1, 63
-; PC64LE-NEXT:    lfd 1, .LCPI69_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 62, 61, 1
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl log10
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI69_3 at toc@ha
-; PC64LE-NEXT:    xxlor 62, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI69_3 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl log10
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 64
-; PC64LE-NEXT:    vmr 3, 31
+; PC64LE-NEXT:    li 3, 80
+; PC64LE-NEXT:    vmr 2, 30
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 34, 62, 1
+; PC64LE-NEXT:    xxmrghd 35, 61, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 80
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 61, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -4103,55 +4118,54 @@ define <4 x double> @constrained_vector_log10_v4f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -64(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI69_0 at toc@ha
-; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI69_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    stxv 62, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 30, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 62, 62
+; PC64LE9-NEXT:    stxv 61, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 64(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 3
 ; PC64LE9-NEXT:    bl log10
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI69_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI69_1 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 62
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl log10
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI69_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 1, 63
-; PC64LE9-NEXT:    lfd 1, .LCPI69_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 62, 61, 1
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
 ; PC64LE9-NEXT:    bl log10
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI69_3 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI69_3 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl log10
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 34, 62, 1
-; PC64LE9-NEXT:    vmr 3, 31
-; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 64
+; PC64LE9-NEXT:    xxmrghd 35, 61, 1
+; PC64LE9-NEXT:    vmr 2, 30
+; PC64LE9-NEXT:    lxv 63, 64(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 61, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 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>,
+                               <4 x double> %x,
                                metadata !"round.dynamic",
                                metadata !"fpexcept.strict") #1
   ret <4 x double> %log10
 }
 
-define <1 x float> @constrained_vector_log2_v1f32() #0 {
+define <1 x float> @constrained_vector_log2_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_log2_v1f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
 ; PC64LE-NEXT:    stdu 1, -32(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI70_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI70_0 at toc@l(3)
 ; PC64LE-NEXT:    bl log2f
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    addi 1, 1, 32
@@ -4164,8 +4178,6 @@ define <1 x float> @constrained_vector_log2_v1f32() #0 {
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
 ; PC64LE9-NEXT:    stdu 1, -32(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI70_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI70_0 at toc@l(3)
 ; PC64LE9-NEXT:    bl log2f
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    addi 1, 1, 32
@@ -4174,34 +4186,38 @@ define <1 x float> @constrained_vector_log2_v1f32() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %log2 = call <1 x float> @llvm.experimental.constrained.log2.v1f32(
-                             <1 x float> <float 42.0>,
+                             <1 x float> %x,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <1 x float> %log2
 }
 
-define <2 x double> @constrained_vector_log2_v2f64() #0 {
+define <2 x double> @constrained_vector_log2_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_log2_v2f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -80(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI71_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI71_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl log2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI71_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI71_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 62, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl log2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 34, 63, 1
+; PC64LE-NEXT:    xxmrghd 34, 62, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -4210,142 +4226,154 @@ define <2 x double> @constrained_vector_log2_v2f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI71_0 at toc@ha
-; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI71_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
+; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
 ; PC64LE9-NEXT:    bl log2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI71_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI71_1 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl log2
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 34, 63, 1
-; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    xxmrghd 34, 62, 1
+; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %log2 = call <2 x double> @llvm.experimental.constrained.log2.v2f64(
-                              <2 x double> <double 42.0, double 42.1>,
+                              <2 x double> %x,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <2 x double> %log2
 }
 
-define <3 x float> @constrained_vector_log2_v3f32() #0 {
+define <3 x float> @constrained_vector_log2_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_log2_v3f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
-; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -48(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI72_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI72_0 at toc@l(3)
+; PC64LE-NEXT:    stdu 1, -80(1)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl log2f
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI72_1 at toc@ha
+; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    fmr 31, 1
-; PC64LE-NEXT:    lfs 1, .LCPI72_1 at toc@l(3)
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl log2f
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI72_2 at toc@ha
+; PC64LE-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE-NEXT:    fmr 30, 1
-; PC64LE-NEXT:    lfs 1, .LCPI72_2 at toc@l(3)
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl log2f
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xscvdpspn 34, 30
-; PC64LE-NEXT:    addis 3, 2, .LCPI72_3 at toc@ha
+; PC64LE-NEXT:    addis 3, 2, .LCPI72_0 at toc@ha
+; PC64LE-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    xscvdpspn 35, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI72_3 at toc@l
+; PC64LE-NEXT:    addi 3, 3, .LCPI72_0 at toc@l
 ; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    vmrghw 2, 2, 3
 ; PC64LE-NEXT:    xscvdpspn 35, 31
+; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
-; PC64LE-NEXT:    addi 1, 1, 48
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
-; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_log2_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
-; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI72_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI72_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    stfd 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    vmr 31, 2
 ; PC64LE9-NEXT:    bl log2f
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI72_1 at toc@ha
+; PC64LE9-NEXT:    xxswapd 0, 63
 ; PC64LE9-NEXT:    fmr 31, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI72_1 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl log2f
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI72_2 at toc@ha
+; PC64LE9-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE9-NEXT:    fmr 30, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI72_2 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl log2f
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    xscvdpspn 34, 1
 ; PC64LE9-NEXT:    xscvdpspn 35, 30
-; PC64LE9-NEXT:    addis 3, 2, .LCPI72_3 at toc@ha
+; PC64LE9-NEXT:    addis 3, 2, .LCPI72_0 at toc@ha
 ; PC64LE9-NEXT:    xscvdpspn 36, 31
-; PC64LE9-NEXT:    addi 3, 3, .LCPI72_3 at toc@l
+; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 3, 3, .LCPI72_0 at toc@l
+; PC64LE9-NEXT:    lfd 30, 48(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    lxvx 35, 0, 3
 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
-; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %log2 = call <3 x float> @llvm.experimental.constrained.log2.v3f32(
-                              <3 x float> <float 42.0, float 43.0, float 44.0>,
+                              <3 x float> %x,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <3 x float> %log2
 }
 
-define <3 x double> @constrained_vector_log2_v3f64() #0 {
+define <3 x double> @constrained_vector_log2_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_log2_v3f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -80(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI73_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI73_0 at toc@l(3)
+; PC64LE-NEXT:    fmr 31, 3
+; PC64LE-NEXT:    fmr 30, 2
 ; PC64LE-NEXT:    bl log2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI73_1 at toc@ha
 ; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI73_1 at toc@l(3)
+; PC64LE-NEXT:    fmr 1, 30
 ; PC64LE-NEXT:    bl log2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI73_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 63, 1
-; PC64LE-NEXT:    lfd 1, .LCPI73_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 63, 1, 63
+; PC64LE-NEXT:    fmr 1, 31
 ; PC64LE-NEXT:    bl log2
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    li 3, 48
 ; PC64LE-NEXT:    xxlor 2, 63, 63
+; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    fmr 3, 1
 ; PC64LE-NEXT:    fmr 1, 0
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -4354,78 +4382,84 @@ define <3 x double> @constrained_vector_log2_v3f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI73_0 at toc@ha
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    stfd 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI73_0 at toc@l(3)
+; PC64LE9-NEXT:    fmr 31, 3
+; PC64LE9-NEXT:    fmr 30, 2
 ; PC64LE9-NEXT:    bl log2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI73_1 at toc@ha
 ; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI73_1 at toc@l(3)
+; PC64LE9-NEXT:    fmr 1, 30
 ; PC64LE9-NEXT:    bl log2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI73_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 63, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI73_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 63, 1, 63
+; PC64LE9-NEXT:    fmr 1, 31
 ; PC64LE9-NEXT:    bl log2
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    fmr 3, 1
 ; PC64LE9-NEXT:    xxswapd 1, 63
 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
 ; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    lfd 30, 48(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %log2 = call <3 x double> @llvm.experimental.constrained.log2.v3f64(
-                          <3 x double> <double 42.0, double 42.1, double 42.2>,
+                          <3 x double> %x,
                           metadata !"round.dynamic",
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %log2
 }
 
-define <4 x double> @constrained_vector_log2_v4f64() #0 {
+define <4 x double> @constrained_vector_log2_v4f64(<4 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_log2_v4f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -80(1)
+; PC64LE-NEXT:    stdu 1, -96(1)
 ; PC64LE-NEXT:    li 3, 48
-; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 61, 1, 3 # 16-byte Folded Spill
 ; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 30, 2
+; PC64LE-NEXT:    li 3, 80
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI74_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI74_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 3
+; PC64LE-NEXT:    xxlor 1, 62, 62
 ; PC64LE-NEXT:    bl log2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI74_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfd 1, .LCPI74_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 62
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl log2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI74_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 1, 63
-; PC64LE-NEXT:    lfd 1, .LCPI74_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 62, 61, 1
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl log2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI74_3 at toc@ha
-; PC64LE-NEXT:    xxlor 62, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI74_3 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl log2
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 64
-; PC64LE-NEXT:    vmr 3, 31
+; PC64LE-NEXT:    li 3, 80
+; PC64LE-NEXT:    vmr 2, 30
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 34, 62, 1
+; PC64LE-NEXT:    xxmrghd 35, 61, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 80
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 61, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -4434,108 +4468,98 @@ define <4 x double> @constrained_vector_log2_v4f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -64(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI74_0 at toc@ha
-; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI74_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    stxv 62, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 30, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 62, 62
+; PC64LE9-NEXT:    stxv 61, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 64(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 3
 ; PC64LE9-NEXT:    bl log2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI74_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI74_1 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 62
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl log2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI74_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 1, 63
-; PC64LE9-NEXT:    lfd 1, .LCPI74_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 62, 61, 1
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
 ; PC64LE9-NEXT:    bl log2
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI74_3 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI74_3 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl log2
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 34, 62, 1
-; PC64LE9-NEXT:    vmr 3, 31
-; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 64
+; PC64LE9-NEXT:    xxmrghd 35, 61, 1
+; PC64LE9-NEXT:    vmr 2, 30
+; PC64LE9-NEXT:    lxv 63, 64(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 61, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 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>,
+                              <4 x double> %x,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <4 x double> %log2
 }
 
-define <1 x float> @constrained_vector_rint_v1f32() #0 {
+define <1 x float> @constrained_vector_rint_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_rint_v1f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI75_0 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI75_0 at toc@l(3)
-; PC64LE-NEXT:    xsrdpic 1, 0
+; PC64LE-NEXT:    xsrdpic 1, 1
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_rint_v1f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI75_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI75_0 at toc@l(3)
-; PC64LE9-NEXT:    xsrdpic 1, 0
+; PC64LE9-NEXT:    xsrdpic 1, 1
 ; PC64LE9-NEXT:    blr
 entry:
   %rint = call <1 x float> @llvm.experimental.constrained.rint.v1f32(
-                             <1 x float> <float 42.0>,
+                             <1 x float> %x,
                              metadata !"round.dynamic",
                              metadata !"fpexcept.strict") #1
   ret <1 x float> %rint
 }
 
-define <2 x double> @constrained_vector_rint_v2f64() #0 {
+define <2 x double> @constrained_vector_rint_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_rint_v2f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI76_0 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI76_0 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xvrdpic 34, 0
+; PC64LE-NEXT:    xvrdpic 34, 34
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_rint_v2f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI76_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI76_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    xvrdpic 34, 0
+; PC64LE9-NEXT:    xvrdpic 34, 34
 ; PC64LE9-NEXT:    blr
 entry:
   %rint = call <2 x double> @llvm.experimental.constrained.rint.v2f64(
-                        <2 x double> <double 42.1, double 42.0>,
+                        <2 x double> %x,
                         metadata !"round.dynamic",
                         metadata !"fpexcept.strict") #1
   ret <2 x double> %rint
 }
 
-define <3 x float> @constrained_vector_rint_v3f32() #0 {
+define <3 x float> @constrained_vector_rint_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_rint_v3f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI77_2 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI77_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI77_2 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI77_1 at toc@l(4)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xxswapd 1, 34
 ; PC64LE-NEXT:    addis 3, 2, .LCPI77_0 at toc@ha
+; PC64LE-NEXT:    xxsldwi 2, 34, 34, 1
+; PC64LE-NEXT:    addi 3, 3, .LCPI77_0 at toc@l
+; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    xsrdpic 0, 0
-; PC64LE-NEXT:    lfs 2, .LCPI77_0 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI77_3 at toc@ha
 ; PC64LE-NEXT:    xsrdpic 1, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI77_3 at toc@l
-; PC64LE-NEXT:    lvx 4, 0, 3
 ; PC64LE-NEXT:    xscvdpspn 34, 0
 ; PC64LE-NEXT:    xscvdpspn 35, 1
 ; PC64LE-NEXT:    xsrdpic 0, 2
@@ -4546,42 +4570,39 @@ define <3 x float> @constrained_vector_rint_v3f32() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_rint_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
+; PC64LE9-NEXT:    xxswapd 1, 34
+; PC64LE9-NEXT:    xxsldwi 2, 34, 34, 3
 ; PC64LE9-NEXT:    addis 3, 2, .LCPI77_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI77_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI77_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI77_1 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI77_2 at toc@ha
-; PC64LE9-NEXT:    xsrdpic 0, 0
-; PC64LE9-NEXT:    lfs 2, .LCPI77_2 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI77_3 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI77_3 at toc@l
+; PC64LE9-NEXT:    addi 3, 3, .LCPI77_0 at toc@l
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    xscvspdpn 1, 1
+; PC64LE9-NEXT:    xscvspdpn 2, 2
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xsrdpic 1, 1
 ; PC64LE9-NEXT:    xsrdpic 2, 2
-; PC64LE9-NEXT:    xscvdpspn 36, 0
-; PC64LE9-NEXT:    xscvdpspn 35, 1
+; PC64LE9-NEXT:    xsrdpic 0, 0
 ; PC64LE9-NEXT:    xscvdpspn 34, 2
+; PC64LE9-NEXT:    xscvdpspn 35, 1
+; PC64LE9-NEXT:    xscvdpspn 36, 0
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    lxvx 35, 0, 3
 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
 ; PC64LE9-NEXT:    blr
  entry:
   %rint = call <3 x float> @llvm.experimental.constrained.rint.v3f32(
-                              <3 x float> <float 42.0, float 43.0, float 44.0>,
+                              <3 x float> %x,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <3 x float> %rint
 }
 
-define <3 x double> @constrained_vector_rint_v3f64() #0 {
+define <3 x double> @constrained_vector_rint_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_rint_v3f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI78_1 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI78_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    addis 3, 2, .LCPI78_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI78_0 at toc@l(3)
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xsrdpic 3, 1
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE-NEXT:    xxmrghd 0, 2, 1
+; PC64LE-NEXT:    xsrdpic 3, 3
 ; PC64LE-NEXT:    xvrdpic 2, 0
 ; PC64LE-NEXT:    xxswapd 1, 2
 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
@@ -4590,12 +4611,10 @@ define <3 x double> @constrained_vector_rint_v3f64() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_rint_v3f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI78_0 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI78_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI78_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI78_1 at toc@l
-; PC64LE9-NEXT:    xsrdpic 3, 0
-; PC64LE9-NEXT:    lxvx 0, 0, 3
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE9-NEXT:    xxmrghd 0, 2, 1
+; PC64LE9-NEXT:    xsrdpic 3, 3
 ; PC64LE9-NEXT:    xvrdpic 2, 0
 ; PC64LE9-NEXT:    xxswapd 1, 2
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
@@ -4603,55 +4622,38 @@ define <3 x double> @constrained_vector_rint_v3f64() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %rint = call <3 x double> @llvm.experimental.constrained.rint.v3f64(
-                          <3 x double> <double 42.0, double 42.1, double 42.2>,
+                          <3 x double> %x,
                           metadata !"round.dynamic",
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %rint
 }
 
-define <4 x double> @constrained_vector_rint_v4f64() #0 {
+define <4 x double> @constrained_vector_rint_v4f64(<4 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_rint_v4f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI79_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI79_1 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI79_0 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    addi 3, 4, .LCPI79_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 1, 0, 3
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
-; PC64LE-NEXT:    xvrdpic 34, 0
-; PC64LE-NEXT:    xvrdpic 35, 1
+; PC64LE-NEXT:    xvrdpic 34, 34
+; PC64LE-NEXT:    xvrdpic 35, 35
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_rint_v4f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI79_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI79_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI79_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI79_1 at toc@l
-; PC64LE9-NEXT:    xvrdpic 34, 0
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    xvrdpic 35, 0
+; PC64LE9-NEXT:    xvrdpic 34, 34
+; PC64LE9-NEXT:    xvrdpic 35, 35
 ; PC64LE9-NEXT:    blr
 entry:
   %rint = call <4 x double> @llvm.experimental.constrained.rint.v4f64(
-                        <4 x double> <double 42.1, double 42.2,
-                                      double 42.3, double 42.4>,
+                        <4 x double> %x,
                         metadata !"round.dynamic",
                         metadata !"fpexcept.strict") #1
   ret <4 x double> %rint
 }
 
-define <1 x float> @constrained_vector_nearbyint_v1f32() #0 {
+define <1 x float> @constrained_vector_nearbyint_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_nearbyint_v1f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
 ; PC64LE-NEXT:    stdu 1, -32(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI80_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI80_0 at toc@l(3)
 ; PC64LE-NEXT:    bl nearbyintf
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    addi 1, 1, 32
@@ -4664,8 +4666,6 @@ define <1 x float> @constrained_vector_nearbyint_v1f32() #0 {
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
 ; PC64LE9-NEXT:    stdu 1, -32(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI80_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI80_0 at toc@l(3)
 ; PC64LE9-NEXT:    bl nearbyintf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    addi 1, 1, 32
@@ -4674,34 +4674,38 @@ define <1 x float> @constrained_vector_nearbyint_v1f32() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %nearby = call <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(
-                               <1 x float> <float 42.0>,
+                               <1 x float> %x,
                                metadata !"round.dynamic",
                                metadata !"fpexcept.strict") #1
   ret <1 x float> %nearby
 }
 
-define <2 x double> @constrained_vector_nearbyint_v2f64() #0 {
+define <2 x double> @constrained_vector_nearbyint_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_nearbyint_v2f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -80(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI81_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI81_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl nearbyint
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI81_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI81_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 62, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl nearbyint
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 34, 1, 63
+; PC64LE-NEXT:    xxmrghd 34, 62, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -4710,142 +4714,154 @@ define <2 x double> @constrained_vector_nearbyint_v2f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI81_0 at toc@ha
-; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI81_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
+; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
 ; PC64LE9-NEXT:    bl nearbyint
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI81_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI81_1 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl nearbyint
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 34, 1, 63
-; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    xxmrghd 34, 62, 1
+; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %nearby = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(
-                                <2 x double> <double 42.1, double 42.0>,
+                                <2 x double> %x,
                                 metadata !"round.dynamic",
                                 metadata !"fpexcept.strict") #1
   ret <2 x double> %nearby
 }
 
-define <3 x float> @constrained_vector_nearbyint_v3f32() #0 {
+define <3 x float> @constrained_vector_nearbyint_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_nearbyint_v3f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
-; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -48(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI82_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI82_0 at toc@l(3)
+; PC64LE-NEXT:    stdu 1, -80(1)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 31, 2
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl nearbyintf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI82_1 at toc@ha
+; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    fmr 31, 1
-; PC64LE-NEXT:    lfs 1, .LCPI82_1 at toc@l(3)
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl nearbyintf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI82_2 at toc@ha
+; PC64LE-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE-NEXT:    fmr 30, 1
-; PC64LE-NEXT:    lfs 1, .LCPI82_2 at toc@l(3)
+; PC64LE-NEXT:    xscvspdpn 1, 0
 ; PC64LE-NEXT:    bl nearbyintf
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xscvdpspn 34, 30
-; PC64LE-NEXT:    addis 3, 2, .LCPI82_3 at toc@ha
+; PC64LE-NEXT:    addis 3, 2, .LCPI82_0 at toc@ha
+; PC64LE-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    xscvdpspn 35, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI82_3 at toc@l
+; PC64LE-NEXT:    addi 3, 3, .LCPI82_0 at toc@l
 ; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    vmrghw 2, 2, 3
 ; PC64LE-NEXT:    xscvdpspn 35, 31
+; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
-; PC64LE-NEXT:    addi 1, 1, 48
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
-; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_nearbyint_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
-; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI82_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI82_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    stfd 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    vmr 31, 2
 ; PC64LE9-NEXT:    bl nearbyintf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI82_1 at toc@ha
+; PC64LE9-NEXT:    xxswapd 0, 63
 ; PC64LE9-NEXT:    fmr 31, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI82_1 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl nearbyintf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI82_2 at toc@ha
+; PC64LE9-NEXT:    xxsldwi 0, 63, 63, 3
 ; PC64LE9-NEXT:    fmr 30, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI82_2 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    bl nearbyintf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    xscvdpspn 34, 1
 ; PC64LE9-NEXT:    xscvdpspn 35, 30
-; PC64LE9-NEXT:    addis 3, 2, .LCPI82_3 at toc@ha
+; PC64LE9-NEXT:    addis 3, 2, .LCPI82_0 at toc@ha
 ; PC64LE9-NEXT:    xscvdpspn 36, 31
-; PC64LE9-NEXT:    addi 3, 3, .LCPI82_3 at toc@l
+; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 3, 3, .LCPI82_0 at toc@l
+; PC64LE9-NEXT:    lfd 30, 48(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    lxvx 35, 0, 3
 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
-; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %nearby = call <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(
-                              <3 x float> <float 42.0, float 43.0, float 44.0>,
+                              <3 x float> %x,
                               metadata !"round.dynamic",
                               metadata !"fpexcept.strict") #1
   ret <3 x float> %nearby
 }
 
-define <3 x double> @constrained_vector_nearby_v3f64() #0 {
+define <3 x double> @constrained_vector_nearby_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_nearby_v3f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    stdu 1, -80(1)
 ; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI83_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI83_0 at toc@l(3)
+; PC64LE-NEXT:    fmr 31, 3
+; PC64LE-NEXT:    fmr 30, 2
 ; PC64LE-NEXT:    bl nearbyint
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI83_1 at toc@ha
 ; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfs 1, .LCPI83_1 at toc@l(3)
+; PC64LE-NEXT:    fmr 1, 30
 ; PC64LE-NEXT:    bl nearbyint
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI83_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 63, 1
-; PC64LE-NEXT:    lfd 1, .LCPI83_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 63, 1, 63
+; PC64LE-NEXT:    fmr 1, 31
 ; PC64LE-NEXT:    bl nearbyint
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    xxswapd 0, 63
 ; PC64LE-NEXT:    li 3, 48
 ; PC64LE-NEXT:    xxlor 2, 63, 63
+; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
+; PC64LE-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    fmr 3, 1
 ; PC64LE-NEXT:    fmr 1, 0
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    addi 1, 1, 80
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -4854,78 +4870,84 @@ define <3 x double> @constrained_vector_nearby_v3f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -48(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI83_0 at toc@ha
+; PC64LE9-NEXT:    stdu 1, -64(1)
+; PC64LE9-NEXT:    stfd 30, 48(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI83_0 at toc@l(3)
+; PC64LE9-NEXT:    fmr 31, 3
+; PC64LE9-NEXT:    fmr 30, 2
 ; PC64LE9-NEXT:    bl nearbyint
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI83_1 at toc@ha
 ; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI83_1 at toc@l(3)
+; PC64LE9-NEXT:    fmr 1, 30
 ; PC64LE9-NEXT:    bl nearbyint
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI83_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 63, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI83_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 63, 1, 63
+; PC64LE9-NEXT:    fmr 1, 31
 ; PC64LE9-NEXT:    bl nearbyint
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    fmr 3, 1
 ; PC64LE9-NEXT:    xxswapd 1, 63
 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
 ; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
-; PC64LE9-NEXT:    addi 1, 1, 48
+; PC64LE9-NEXT:    lfd 30, 48(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 64
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %nearby = call <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(
-                          <3 x double> <double 42.0, double 42.1, double 42.2>,
+                          <3 x double> %x,
                           metadata !"round.dynamic",
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %nearby
 }
 
-define <4 x double> @constrained_vector_nearbyint_v4f64() #0 {
+define <4 x double> @constrained_vector_nearbyint_v4f64(<4 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_nearbyint_v4f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -80(1)
+; PC64LE-NEXT:    stdu 1, -96(1)
 ; PC64LE-NEXT:    li 3, 48
-; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 61, 1, 3 # 16-byte Folded Spill
 ; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    vmr 30, 2
+; PC64LE-NEXT:    li 3, 80
 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
-; PC64LE-NEXT:    addis 3, 2, .LCPI84_0 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI84_0 at toc@l(3)
+; PC64LE-NEXT:    vmr 31, 3
+; PC64LE-NEXT:    xxlor 1, 62, 62
 ; PC64LE-NEXT:    bl nearbyint
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI84_1 at toc@ha
-; PC64LE-NEXT:    xxlor 63, 1, 1
-; PC64LE-NEXT:    lfd 1, .LCPI84_1 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 62
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl nearbyint
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI84_2 at toc@ha
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 63, 1, 63
-; PC64LE-NEXT:    lfd 1, .LCPI84_2 at toc@l(3)
+; PC64LE-NEXT:    xxmrghd 62, 61, 1
+; PC64LE-NEXT:    xxlor 1, 63, 63
 ; PC64LE-NEXT:    bl nearbyint
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI84_3 at toc@ha
-; PC64LE-NEXT:    xxlor 62, 1, 1
-; PC64LE-NEXT:    lfd 1, .LCPI84_3 at toc@l(3)
+; PC64LE-NEXT:    xxlor 61, 1, 1
+; PC64LE-NEXT:    xxswapd 1, 63
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    bl nearbyint
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    li 3, 64
-; PC64LE-NEXT:    vmr 2, 31
+; PC64LE-NEXT:    li 3, 80
+; PC64LE-NEXT:    vmr 2, 30
 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE-NEXT:    xxmrghd 35, 1, 62
+; PC64LE-NEXT:    xxmrghd 35, 61, 1
 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    li 3, 64
 ; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
-; PC64LE-NEXT:    addi 1, 1, 80
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 61, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -4934,57 +4956,54 @@ define <4 x double> @constrained_vector_nearbyint_v4f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -64(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI84_0 at toc@ha
-; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
-; PC64LE9-NEXT:    lfd 1, .LCPI84_0 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    stxv 62, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 30, 2
+; PC64LE9-NEXT:    xscpsgndp 1, 62, 62
+; PC64LE9-NEXT:    stxv 61, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    stxv 63, 64(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    vmr 31, 3
 ; PC64LE9-NEXT:    bl nearbyint
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI84_1 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI84_1 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 62
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl nearbyint
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI84_2 at toc@ha
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 63, 1, 63
-; PC64LE9-NEXT:    lfd 1, .LCPI84_2 at toc@l(3)
+; PC64LE9-NEXT:    xxmrghd 62, 61, 1
+; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
 ; PC64LE9-NEXT:    bl nearbyint
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI84_3 at toc@ha
-; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
-; PC64LE9-NEXT:    lfd 1, .LCPI84_3 at toc@l(3)
+; PC64LE9-NEXT:    xscpsgndp 61, 1, 1
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE9-NEXT:    bl nearbyint
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
-; PC64LE9-NEXT:    xxmrghd 35, 1, 62
-; PC64LE9-NEXT:    vmr 2, 31
-; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
-; PC64LE9-NEXT:    addi 1, 1, 64
+; PC64LE9-NEXT:    xxmrghd 35, 61, 1
+; PC64LE9-NEXT:    vmr 2, 30
+; PC64LE9-NEXT:    lxv 63, 64(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 61, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %nearby = call <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(
-                                <4 x double> <double 42.1, double 42.2,
-                                              double 42.3, double 42.4>,
+                                <4 x double> %x,
                                 metadata !"round.dynamic",
                                 metadata !"fpexcept.strict") #1
   ret <4 x double> %nearby
 }
 
-define <1 x float> @constrained_vector_maxnum_v1f32() #0 {
+define <1 x float> @constrained_vector_maxnum_v1f32(<1 x float> %x, <1 x float> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_maxnum_v1f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
 ; PC64LE-NEXT:    stdu 1, -32(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI85_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI85_1 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI85_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 2, .LCPI85_1 at toc@l(4)
 ; PC64LE-NEXT:    bl fmaxf
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    addi 1, 1, 32
@@ -4997,10 +5016,6 @@ define <1 x float> @constrained_vector_maxnum_v1f32() #0 {
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
 ; PC64LE9-NEXT:    stdu 1, -32(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI85_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI85_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI85_1 at toc@ha
-; PC64LE9-NEXT:    lfs 2, .LCPI85_1 at toc@l(3)
 ; PC64LE9-NEXT:    bl fmaxf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    addi 1, 1, 32
@@ -5009,165 +5024,163 @@ define <1 x float> @constrained_vector_maxnum_v1f32() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %max = call <1 x float> @llvm.experimental.constrained.maxnum.v1f32(
-                               <1 x float> <float 42.0>, <1 x float> <float 41.0>,
+                               <1 x float> %x, <1 x float> %y,
                                metadata !"fpexcept.strict") #1
   ret <1 x float> %max
 }
 
-define <2 x double> @constrained_vector_maxnum_v2f64() #0 {
+define <2 x double> @constrained_vector_maxnum_v2f64(<2 x double> %x, <2 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_maxnum_v2f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI86_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI86_1 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI86_0 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI86_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    lxvd2x 1, 0, 4
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
-; PC64LE-NEXT:    xvmaxdp 34, 1, 0
+; PC64LE-NEXT:    xvmaxdp 34, 34, 35
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_maxnum_v2f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI86_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI86_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI86_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI86_1 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
-; PC64LE9-NEXT:    xvmaxdp 34, 1, 0
+; PC64LE9-NEXT:    xvmaxdp 34, 34, 35
 ; PC64LE9-NEXT:    blr
 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>,
+                                <2 x double> %x,
+                                <2 x double> %y,
                                 metadata !"fpexcept.strict") #1
   ret <2 x double> %max
 }
 
-define <3 x float> @constrained_vector_maxnum_v3f32() #0 {
+define <3 x float> @constrained_vector_maxnum_v3f32(<3 x float> %x, <3 x float> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_maxnum_v3f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
-; PC64LE-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
-; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
-; PC64LE-NEXT:    addis 4, 2, .LCPI87_1 at toc@ha
-; PC64LE-NEXT:    addis 3, 2, .LCPI87_0 at toc@ha
-; PC64LE-NEXT:    lfs 31, .LCPI87_1 at toc@l(4)
-; PC64LE-NEXT:    lfs 1, .LCPI87_0 at toc@l(3)
-; PC64LE-NEXT:    fmr 2, 31
+; PC64LE-NEXT:    stdu 1, -96(1)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE-NEXT:    xxsldwi 2, 35, 35, 1
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    stfd 30, 80(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    xscvspdpn 1, 0
+; PC64LE-NEXT:    xscvspdpn 2, 2
+; PC64LE-NEXT:    vmr 31, 3
+; PC64LE-NEXT:    vmr 30, 2
 ; PC64LE-NEXT:    bl fmaxf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI87_2 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI87_3 at toc@ha
-; PC64LE-NEXT:    fmr 30, 1
-; PC64LE-NEXT:    lfs 1, .LCPI87_2 at toc@l(3)
-; PC64LE-NEXT:    lfs 2, .LCPI87_3 at toc@l(4)
+; PC64LE-NEXT:    xxswapd 0, 62
+; PC64LE-NEXT:    xxswapd 2, 63
+; PC64LE-NEXT:    fmr 31, 1
+; PC64LE-NEXT:    xscvspdpn 1, 0
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    bl fmaxf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    fmr 29, 1
-; PC64LE-NEXT:    addis 3, 2, .LCPI87_4 at toc@ha
-; PC64LE-NEXT:    fmr 1, 31
-; PC64LE-NEXT:    lfs 2, .LCPI87_4 at toc@l(3)
+; PC64LE-NEXT:    xxsldwi 0, 62, 62, 3
+; PC64LE-NEXT:    xxsldwi 2, 63, 63, 3
+; PC64LE-NEXT:    fmr 30, 1
+; PC64LE-NEXT:    xscvspdpn 1, 0
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    bl fmaxf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    xscvdpspn 34, 29
-; PC64LE-NEXT:    addis 3, 2, .LCPI87_5 at toc@ha
+; PC64LE-NEXT:    xscvdpspn 34, 30
+; PC64LE-NEXT:    addis 3, 2, .LCPI87_0 at toc@ha
+; PC64LE-NEXT:    lfd 30, 80(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    xscvdpspn 35, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI87_5 at toc@l
+; PC64LE-NEXT:    addi 3, 3, .LCPI87_0 at toc@l
 ; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    vmrghw 2, 2, 3
-; PC64LE-NEXT:    xscvdpspn 35, 30
+; PC64LE-NEXT:    xscvdpspn 35, 31
+; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
-; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
-; PC64LE-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_maxnum_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
-; PC64LE9-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -64(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI87_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI87_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI87_1 at toc@ha
-; PC64LE9-NEXT:    lfs 31, .LCPI87_1 at toc@l(3)
-; PC64LE9-NEXT:    fmr 2, 31
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    xxsldwi 0, 35, 35, 1
+; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xscvspdpn 2, 0
+; PC64LE9-NEXT:    vmr 31, 3
+; PC64LE9-NEXT:    vmr 30, 2
 ; PC64LE9-NEXT:    bl fmaxf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI87_2 at toc@ha
-; PC64LE9-NEXT:    fmr 30, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI87_2 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI87_3 at toc@ha
-; PC64LE9-NEXT:    lfs 2, .LCPI87_3 at toc@l(3)
+; PC64LE9-NEXT:    xxswapd 0, 62
+; PC64LE9-NEXT:    fmr 31, 1
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    xxswapd 0, 63
+; PC64LE9-NEXT:    xscvspdpn 2, 0
 ; PC64LE9-NEXT:    bl fmaxf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI87_4 at toc@ha
-; PC64LE9-NEXT:    fmr 29, 1
-; PC64LE9-NEXT:    fmr 1, 31
-; PC64LE9-NEXT:    lfs 2, .LCPI87_4 at toc@l(3)
+; PC64LE9-NEXT:    xxsldwi 0, 62, 62, 3
+; PC64LE9-NEXT:    fmr 30, 1
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    xxsldwi 0, 63, 63, 3
+; PC64LE9-NEXT:    xscvspdpn 2, 0
 ; PC64LE9-NEXT:    bl fmaxf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    xscvdpspn 34, 1
-; PC64LE9-NEXT:    xscvdpspn 35, 29
-; PC64LE9-NEXT:    addis 3, 2, .LCPI87_5 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI87_5 at toc@l
+; PC64LE9-NEXT:    xscvdpspn 35, 30
+; PC64LE9-NEXT:    addis 3, 2, .LCPI87_0 at toc@ha
+; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 3, 3, .LCPI87_0 at toc@l
 ; PC64LE9-NEXT:    lxvx 36, 0, 3
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
-; PC64LE9-NEXT:    xscvdpspn 35, 30
+; PC64LE9-NEXT:    xscvdpspn 35, 31
+; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
-; PC64LE9-NEXT:    addi 1, 1, 64
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
-; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    mtlr 0
-; PC64LE9-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    blr
 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>,
+                              <3 x float> %x,
+                              <3 x float> %y,
                               metadata !"fpexcept.strict") #1
   ret <3 x float> %max
 }
 
-define <3 x double> @constrained_vector_max_v3f64() #0 {
+define <3 x double> @constrained_vector_max_v3f64(<3 x double> %x, <3 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_max_v3f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -32(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI88_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI88_1 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI88_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 2, .LCPI88_1 at toc@l(4)
+; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE-NEXT:    # kill: def $f5 killed $f5 def $vsl5
+; PC64LE-NEXT:    # kill: def $f4 killed $f4 def $vsl4
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE-NEXT:    xxmrghd 0, 5, 4
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    xxmrghd 1, 2, 1
+; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    fmr 2, 6
+; PC64LE-NEXT:    xvmaxdp 63, 1, 0
+; PC64LE-NEXT:    fmr 1, 3
 ; PC64LE-NEXT:    bl fmax
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI88_2 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI88_3 at toc@ha
+; PC64LE-NEXT:    xxswapd 0, 63
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    xxlor 2, 63, 63
+; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    fmr 3, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI88_2 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI88_3 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    lxvd2x 2, 0, 4
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 2, 2
-; PC64LE-NEXT:    xvmaxdp 2, 2, 0
-; PC64LE-NEXT:    xxswapd 0, 2
-; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE-NEXT:    fmr 1, 0
-; PC64LE-NEXT:    addi 1, 1, 32
+; PC64LE-NEXT:    addi 1, 1, 64
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -5176,96 +5189,62 @@ define <3 x double> @constrained_vector_max_v3f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -32(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI88_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI88_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI88_1 at toc@ha
-; PC64LE9-NEXT:    lfs 2, .LCPI88_1 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -48(1)
+; PC64LE9-NEXT:    # kill: def $f5 killed $f5 def $vsl5
+; PC64LE9-NEXT:    # kill: def $f4 killed $f4 def $vsl4
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE9-NEXT:    xxmrghd 0, 5, 4
+; PC64LE9-NEXT:    xxmrghd 1, 2, 1
+; PC64LE9-NEXT:    fmr 2, 6
+; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xvmaxdp 63, 1, 0
+; PC64LE9-NEXT:    fmr 1, 3
 ; PC64LE9-NEXT:    bl fmax
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI88_2 at toc@ha
 ; PC64LE9-NEXT:    fmr 3, 1
-; PC64LE9-NEXT:    addi 3, 3, .LCPI88_2 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI88_3 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI88_3 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
-; PC64LE9-NEXT:    xvmaxdp 2, 1, 0
-; PC64LE9-NEXT:    xxswapd 1, 2
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
+; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
-; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
-; PC64LE9-NEXT:    addi 1, 1, 32
+; PC64LE9-NEXT:    addi 1, 1, 48
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
   %max = call <3 x double> @llvm.experimental.constrained.maxnum.v3f64(
-                          <3 x double> <double 43.0, double 44.0, double 45.0>,
-                          <3 x double> <double 40.0, double 41.0, double 42.0>,
+                          <3 x double> %x,
+                          <3 x double> %y,
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %max
 }
 
-define <4 x double> @constrained_vector_maxnum_v4f64() #0 {
+define <4 x double> @constrained_vector_maxnum_v4f64(<4 x double> %x, <4 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_maxnum_v4f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI89_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI89_1 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI89_2 at toc@ha
-; PC64LE-NEXT:    addis 6, 2, .LCPI89_3 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI89_0 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI89_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    lxvd2x 1, 0, 4
-; PC64LE-NEXT:    addi 3, 5, .LCPI89_2 at toc@l
-; PC64LE-NEXT:    addi 4, 6, .LCPI89_3 at toc@l
-; PC64LE-NEXT:    lxvd2x 2, 0, 3
-; PC64LE-NEXT:    lxvd2x 3, 0, 4
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
-; PC64LE-NEXT:    xxswapd 2, 2
-; PC64LE-NEXT:    xxswapd 3, 3
-; PC64LE-NEXT:    xvmaxdp 34, 1, 0
-; PC64LE-NEXT:    xvmaxdp 35, 3, 2
+; PC64LE-NEXT:    xvmaxdp 34, 34, 36
+; PC64LE-NEXT:    xvmaxdp 35, 35, 37
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_maxnum_v4f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI89_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI89_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI89_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI89_1 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI89_2 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI89_2 at toc@l
-; PC64LE9-NEXT:    xvmaxdp 34, 1, 0
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI89_3 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI89_3 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
-; PC64LE9-NEXT:    xvmaxdp 35, 1, 0
+; PC64LE9-NEXT:    xvmaxdp 34, 34, 36
+; PC64LE9-NEXT:    xvmaxdp 35, 35, 37
 ; PC64LE9-NEXT:    blr
 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>,
+                                <4 x double> %x,
+                                <4 x double> %y,
                                 metadata !"fpexcept.strict") #1
   ret <4 x double> %max
 }
 
-define <1 x float> @constrained_vector_minnum_v1f32() #0 {
+define <1 x float> @constrained_vector_minnum_v1f32(<1 x float> %x, <1 x float> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_minnum_v1f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
 ; PC64LE-NEXT:    stdu 1, -32(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI90_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI90_1 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI90_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 2, .LCPI90_1 at toc@l(4)
 ; PC64LE-NEXT:    bl fminf
 ; PC64LE-NEXT:    nop
 ; PC64LE-NEXT:    addi 1, 1, 32
@@ -5278,10 +5257,6 @@ define <1 x float> @constrained_vector_minnum_v1f32() #0 {
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
 ; PC64LE9-NEXT:    stdu 1, -32(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI90_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI90_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI90_1 at toc@ha
-; PC64LE9-NEXT:    lfs 2, .LCPI90_1 at toc@l(3)
 ; PC64LE9-NEXT:    bl fminf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    addi 1, 1, 32
@@ -5290,165 +5265,163 @@ define <1 x float> @constrained_vector_minnum_v1f32() #0 {
 ; PC64LE9-NEXT:    blr
  entry:
   %min = call <1 x float> @llvm.experimental.constrained.minnum.v1f32(
-                               <1 x float> <float 42.0>, <1 x float> <float 41.0>,
+                               <1 x float> %x, <1 x float> %y,
                                metadata !"fpexcept.strict") #1
   ret <1 x float> %min
 }
 
-define <2 x double> @constrained_vector_minnum_v2f64() #0 {
+define <2 x double> @constrained_vector_minnum_v2f64(<2 x double> %x, <2 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_minnum_v2f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI91_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI91_1 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI91_0 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI91_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    lxvd2x 1, 0, 4
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
-; PC64LE-NEXT:    xvmindp 34, 1, 0
+; PC64LE-NEXT:    xvmindp 34, 34, 35
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_minnum_v2f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI91_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI91_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI91_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI91_1 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
-; PC64LE9-NEXT:    xvmindp 34, 1, 0
+; PC64LE9-NEXT:    xvmindp 34, 34, 35
 ; PC64LE9-NEXT:    blr
 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>,
+                                <2 x double> %x,
+                                <2 x double> %y,
                                 metadata !"fpexcept.strict") #1
   ret <2 x double> %min
 }
 
-define <3 x float> @constrained_vector_minnum_v3f32() #0 {
+define <3 x float> @constrained_vector_minnum_v3f32(<3 x float> %x, <3 x float> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_minnum_v3f32:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
-; PC64LE-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
-; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -64(1)
-; PC64LE-NEXT:    addis 4, 2, .LCPI92_1 at toc@ha
-; PC64LE-NEXT:    addis 3, 2, .LCPI92_0 at toc@ha
-; PC64LE-NEXT:    lfs 31, .LCPI92_1 at toc@l(4)
-; PC64LE-NEXT:    lfs 1, .LCPI92_0 at toc@l(3)
-; PC64LE-NEXT:    fmr 2, 31
+; PC64LE-NEXT:    stdu 1, -96(1)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE-NEXT:    xxsldwi 2, 35, 35, 1
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    stfd 30, 80(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
+; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    xscvspdpn 1, 0
+; PC64LE-NEXT:    xscvspdpn 2, 2
+; PC64LE-NEXT:    vmr 31, 3
+; PC64LE-NEXT:    vmr 30, 2
 ; PC64LE-NEXT:    bl fminf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI92_2 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI92_3 at toc@ha
-; PC64LE-NEXT:    fmr 30, 1
-; PC64LE-NEXT:    lfs 1, .LCPI92_2 at toc@l(3)
-; PC64LE-NEXT:    lfs 2, .LCPI92_3 at toc@l(4)
+; PC64LE-NEXT:    xxswapd 0, 62
+; PC64LE-NEXT:    xxswapd 2, 63
+; PC64LE-NEXT:    fmr 31, 1
+; PC64LE-NEXT:    xscvspdpn 1, 0
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    bl fminf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    fmr 29, 1
-; PC64LE-NEXT:    addis 3, 2, .LCPI92_4 at toc@ha
-; PC64LE-NEXT:    fmr 1, 31
-; PC64LE-NEXT:    lfs 2, .LCPI92_4 at toc@l(3)
+; PC64LE-NEXT:    xxsldwi 0, 62, 62, 3
+; PC64LE-NEXT:    xxsldwi 2, 63, 63, 3
+; PC64LE-NEXT:    fmr 30, 1
+; PC64LE-NEXT:    xscvspdpn 1, 0
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    bl fminf
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    xscvdpspn 34, 29
-; PC64LE-NEXT:    addis 3, 2, .LCPI92_5 at toc@ha
+; PC64LE-NEXT:    xscvdpspn 34, 30
+; PC64LE-NEXT:    addis 3, 2, .LCPI92_0 at toc@ha
+; PC64LE-NEXT:    lfd 30, 80(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    xscvdpspn 35, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI92_5 at toc@l
+; PC64LE-NEXT:    addi 3, 3, .LCPI92_0 at toc@l
 ; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    li 3, 64
+; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    vmrghw 2, 2, 3
-; PC64LE-NEXT:    xscvdpspn 35, 30
+; PC64LE-NEXT:    xscvdpspn 35, 31
+; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
-; PC64LE-NEXT:    addi 1, 1, 64
+; PC64LE-NEXT:    addi 1, 1, 96
 ; PC64LE-NEXT:    ld 0, 16(1)
-; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
-; PC64LE-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_minnum_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
-; PC64LE9-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
-; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -64(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI92_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI92_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI92_1 at toc@ha
-; PC64LE9-NEXT:    lfs 31, .LCPI92_1 at toc@l(3)
-; PC64LE9-NEXT:    fmr 2, 31
+; PC64LE9-NEXT:    stdu 1, -80(1)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    stfd 30, 64(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
+; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    xxsldwi 0, 35, 35, 1
+; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xscvspdpn 2, 0
+; PC64LE9-NEXT:    vmr 31, 3
+; PC64LE9-NEXT:    vmr 30, 2
 ; PC64LE9-NEXT:    bl fminf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI92_2 at toc@ha
-; PC64LE9-NEXT:    fmr 30, 1
-; PC64LE9-NEXT:    lfs 1, .LCPI92_2 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI92_3 at toc@ha
-; PC64LE9-NEXT:    lfs 2, .LCPI92_3 at toc@l(3)
+; PC64LE9-NEXT:    xxswapd 0, 62
+; PC64LE9-NEXT:    fmr 31, 1
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    xxswapd 0, 63
+; PC64LE9-NEXT:    xscvspdpn 2, 0
 ; PC64LE9-NEXT:    bl fminf
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI92_4 at toc@ha
-; PC64LE9-NEXT:    fmr 29, 1
-; PC64LE9-NEXT:    fmr 1, 31
-; PC64LE9-NEXT:    lfs 2, .LCPI92_4 at toc@l(3)
+; PC64LE9-NEXT:    xxsldwi 0, 62, 62, 3
+; PC64LE9-NEXT:    fmr 30, 1
+; PC64LE9-NEXT:    xscvspdpn 1, 0
+; PC64LE9-NEXT:    xxsldwi 0, 63, 63, 3
+; PC64LE9-NEXT:    xscvspdpn 2, 0
 ; PC64LE9-NEXT:    bl fminf
 ; PC64LE9-NEXT:    nop
 ; PC64LE9-NEXT:    xscvdpspn 34, 1
-; PC64LE9-NEXT:    xscvdpspn 35, 29
-; PC64LE9-NEXT:    addis 3, 2, .LCPI92_5 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI92_5 at toc@l
+; PC64LE9-NEXT:    xscvdpspn 35, 30
+; PC64LE9-NEXT:    addis 3, 2, .LCPI92_0 at toc@ha
+; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
+; PC64LE9-NEXT:    lfd 30, 64(1) # 8-byte Folded Reload
+; PC64LE9-NEXT:    addi 3, 3, .LCPI92_0 at toc@l
 ; PC64LE9-NEXT:    lxvx 36, 0, 3
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
-; PC64LE9-NEXT:    xscvdpspn 35, 30
+; PC64LE9-NEXT:    xscvdpspn 35, 31
+; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
-; PC64LE9-NEXT:    addi 1, 1, 64
+; PC64LE9-NEXT:    addi 1, 1, 80
 ; PC64LE9-NEXT:    ld 0, 16(1)
-; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
-; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    mtlr 0
-; PC64LE9-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
 ; PC64LE9-NEXT:    blr
 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>,
+                              <3 x float> %x,
+                              <3 x float> %y,
                               metadata !"fpexcept.strict") #1
   ret <3 x float> %min
 }
 
-define <3 x double> @constrained_vector_min_v3f64() #0 {
+define <3 x double> @constrained_vector_min_v3f64(<3 x double> %x, <3 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_min_v3f64:
 ; PC64LE:       # %bb.0: # %entry
 ; PC64LE-NEXT:    mflr 0
 ; PC64LE-NEXT:    std 0, 16(1)
-; PC64LE-NEXT:    stdu 1, -32(1)
-; PC64LE-NEXT:    addis 3, 2, .LCPI93_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI93_1 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI93_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 2, .LCPI93_1 at toc@l(4)
+; PC64LE-NEXT:    stdu 1, -64(1)
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE-NEXT:    # kill: def $f5 killed $f5 def $vsl5
+; PC64LE-NEXT:    # kill: def $f4 killed $f4 def $vsl4
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE-NEXT:    xxmrghd 0, 5, 4
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    xxmrghd 1, 2, 1
+; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
+; PC64LE-NEXT:    fmr 2, 6
+; PC64LE-NEXT:    xvmindp 63, 1, 0
+; PC64LE-NEXT:    fmr 1, 3
 ; PC64LE-NEXT:    bl fmin
 ; PC64LE-NEXT:    nop
-; PC64LE-NEXT:    addis 3, 2, .LCPI93_2 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI93_3 at toc@ha
+; PC64LE-NEXT:    xxswapd 0, 63
+; PC64LE-NEXT:    li 3, 48
+; PC64LE-NEXT:    xxlor 2, 63, 63
+; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
 ; PC64LE-NEXT:    fmr 3, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI93_2 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI93_3 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    lxvd2x 2, 0, 4
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 2, 2
-; PC64LE-NEXT:    xvmindp 2, 2, 0
-; PC64LE-NEXT:    xxswapd 0, 2
-; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE-NEXT:    fmr 1, 0
-; PC64LE-NEXT:    addi 1, 1, 32
+; PC64LE-NEXT:    addi 1, 1, 64
 ; PC64LE-NEXT:    ld 0, 16(1)
 ; PC64LE-NEXT:    mtlr 0
 ; PC64LE-NEXT:    blr
@@ -5457,116 +5430,82 @@ define <3 x double> @constrained_vector_min_v3f64() #0 {
 ; PC64LE9:       # %bb.0: # %entry
 ; PC64LE9-NEXT:    mflr 0
 ; PC64LE9-NEXT:    std 0, 16(1)
-; PC64LE9-NEXT:    stdu 1, -32(1)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI93_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI93_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI93_1 at toc@ha
-; PC64LE9-NEXT:    lfs 2, .LCPI93_1 at toc@l(3)
+; PC64LE9-NEXT:    stdu 1, -48(1)
+; PC64LE9-NEXT:    # kill: def $f5 killed $f5 def $vsl5
+; PC64LE9-NEXT:    # kill: def $f4 killed $f4 def $vsl4
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE9-NEXT:    xxmrghd 0, 5, 4
+; PC64LE9-NEXT:    xxmrghd 1, 2, 1
+; PC64LE9-NEXT:    fmr 2, 6
+; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
+; PC64LE9-NEXT:    xvmindp 63, 1, 0
+; PC64LE9-NEXT:    fmr 1, 3
 ; PC64LE9-NEXT:    bl fmin
 ; PC64LE9-NEXT:    nop
-; PC64LE9-NEXT:    addis 3, 2, .LCPI93_2 at toc@ha
 ; PC64LE9-NEXT:    fmr 3, 1
-; PC64LE9-NEXT:    addi 3, 3, .LCPI93_2 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI93_3 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI93_3 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
-; PC64LE9-NEXT:    xvmindp 2, 1, 0
-; PC64LE9-NEXT:    xxswapd 1, 2
+; PC64LE9-NEXT:    xxswapd 1, 63
+; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
+; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
-; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
-; PC64LE9-NEXT:    addi 1, 1, 32
+; PC64LE9-NEXT:    addi 1, 1, 48
 ; PC64LE9-NEXT:    ld 0, 16(1)
 ; PC64LE9-NEXT:    mtlr 0
 ; PC64LE9-NEXT:    blr
 entry:
  %min = call <3 x double> @llvm.experimental.constrained.minnum.v3f64(
-                          <3 x double> <double 43.0, double 44.0, double 45.0>,
-                          <3 x double> <double 40.0, double 41.0, double 42.0>,
+                          <3 x double> %x,
+                          <3 x double> %y,
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %min
 }
 
-define <4 x double> @constrained_vector_minnum_v4f64() #0 {
+define <4 x double> @constrained_vector_minnum_v4f64(<4 x double> %x, <4 x double> %y) #0 {
 ; PC64LE-LABEL: constrained_vector_minnum_v4f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI94_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI94_1 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI94_2 at toc@ha
-; PC64LE-NEXT:    addis 6, 2, .LCPI94_3 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI94_0 at toc@l
-; PC64LE-NEXT:    addi 4, 4, .LCPI94_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    lxvd2x 1, 0, 4
-; PC64LE-NEXT:    addi 3, 5, .LCPI94_2 at toc@l
-; PC64LE-NEXT:    addi 4, 6, .LCPI94_3 at toc@l
-; PC64LE-NEXT:    lxvd2x 2, 0, 3
-; PC64LE-NEXT:    lxvd2x 3, 0, 4
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
-; PC64LE-NEXT:    xxswapd 2, 2
-; PC64LE-NEXT:    xxswapd 3, 3
-; PC64LE-NEXT:    xvmindp 34, 1, 0
-; PC64LE-NEXT:    xvmindp 35, 3, 2
+; PC64LE-NEXT:    xvmindp 34, 34, 36
+; PC64LE-NEXT:    xvmindp 35, 35, 37
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_minnum_v4f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI94_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI94_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI94_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI94_1 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI94_2 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI94_2 at toc@l
-; PC64LE9-NEXT:    xvmindp 34, 1, 0
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI94_3 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI94_3 at toc@l
-; PC64LE9-NEXT:    lxvx 1, 0, 3
-; PC64LE9-NEXT:    xvmindp 35, 1, 0
+; PC64LE9-NEXT:    xvmindp 34, 34, 36
+; PC64LE9-NEXT:    xvmindp 35, 35, 37
 ; PC64LE9-NEXT:    blr
 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>,
+                                <4 x double> %x,
+                                <4 x double> %y,
                                 metadata !"fpexcept.strict") #1
   ret <4 x double> %min
 }
 
-define <1 x i32> @constrained_vector_fptosi_v1i32_v1f32() #0 {
+define <1 x i32> @constrained_vector_fptosi_v1i32_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI95_0 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI95_0 at toc@l(3)
-; PC64LE-NEXT:    xscvdpsxws 0, 0
+; PC64LE-NEXT:    xscvdpsxws 0, 1
 ; PC64LE-NEXT:    mffprwz 3, 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI95_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI95_0 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpsxws 0, 0
+; PC64LE9-NEXT:    xscvdpsxws 0, 1
 ; PC64LE9-NEXT:    mffprwz 3, 0
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32(
-                               <1 x float><float 42.0>,
+                               <1 x float> %x,
                                metadata !"fpexcept.strict") #0
   ret <1 x i32> %result
 }
 
-define <2 x i32> @constrained_vector_fptosi_v2i32_v2f32() #0 {
+define <2 x i32> @constrained_vector_fptosi_v2i32_v2f32(<2 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI96_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI96_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI96_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI96_1 at toc@l(4)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xxswapd 1, 34
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
 ; PC64LE-NEXT:    xscvdpsxws 0, 0
 ; PC64LE-NEXT:    xscvdpsxws 1, 1
 ; PC64LE-NEXT:    mffprwz 3, 0
@@ -5578,43 +5517,43 @@ define <2 x i32> @constrained_vector_fptosi_v2i32_v2f32() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI96_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI96_0 at toc@l(3)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpsxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 3, 0
-; PC64LE9-NEXT:    mtvsrwz 34, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI96_1 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI96_1 at toc@l(3)
+; PC64LE9-NEXT:    xxswapd 0, 34
+; PC64LE9-NEXT:    mtvsrwz 35, 3
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpsxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 3, 0
-; PC64LE9-NEXT:    mtvsrwz 35, 3
-; PC64LE9-NEXT:    vmrghw 2, 3, 2
+; PC64LE9-NEXT:    mtvsrwz 34, 3
+; PC64LE9-NEXT:    vmrghw 2, 2, 3
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32(
-                                <2 x float><float 42.0, float 43.0>,
+                                <2 x float> %x,
                                 metadata !"fpexcept.strict") #0
   ret <2 x i32> %result
 }
 
-define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32() #0 {
+define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f32:
 ; PC64LE:       # %bb.0: # %entry
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xxswapd 1, 34
 ; PC64LE-NEXT:    addis 3, 2, .LCPI97_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI97_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI97_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI97_1 at toc@l(4)
-; PC64LE-NEXT:    addis 3, 2, .LCPI97_3 at toc@ha
-; PC64LE-NEXT:    lfs 2, .LCPI97_3 at toc@l(3)
+; PC64LE-NEXT:    xxsldwi 2, 34, 34, 1
+; PC64LE-NEXT:    addi 3, 3, .LCPI97_0 at toc@l
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    xscvdpsxws 0, 0
 ; PC64LE-NEXT:    xscvdpsxws 1, 1
 ; PC64LE-NEXT:    xscvdpsxws 2, 2
-; PC64LE-NEXT:    mffprwz 3, 0
-; PC64LE-NEXT:    mffprwz 4, 1
-; PC64LE-NEXT:    mtvsrwz 34, 3
-; PC64LE-NEXT:    addis 3, 2, .LCPI97_2 at toc@ha
-; PC64LE-NEXT:    mtvsrwz 35, 4
-; PC64LE-NEXT:    addi 3, 3, .LCPI97_2 at toc@l
+; PC64LE-NEXT:    mffprwz 4, 0
+; PC64LE-NEXT:    mffprwz 5, 1
+; PC64LE-NEXT:    mtvsrwz 34, 4
+; PC64LE-NEXT:    mtvsrwz 35, 5
 ; PC64LE-NEXT:    mffprwz 4, 2
 ; PC64LE-NEXT:    vmrghw 2, 3, 2
 ; PC64LE-NEXT:    lvx 3, 0, 3
@@ -5624,89 +5563,77 @@ define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI97_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI97_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI97_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI97_1 at toc@l(3)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpsxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 3, 0
-; PC64LE9-NEXT:    xscvdpsxws 0, 1
-; PC64LE9-NEXT:    mtvsrwz 34, 3
-; PC64LE9-NEXT:    mffprwz 3, 0
+; PC64LE9-NEXT:    xxswapd 0, 34
 ; PC64LE9-NEXT:    mtvsrwz 35, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI97_2 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI97_2 at toc@l
-; PC64LE9-NEXT:    vmrghw 2, 3, 2
-; PC64LE9-NEXT:    lxvx 35, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI97_3 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI97_3 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpsxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 3, 0
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
 ; PC64LE9-NEXT:    mtvsrwz 36, 3
-; PC64LE9-NEXT:    vperm 2, 4, 2, 3
+; PC64LE9-NEXT:    addis 3, 2, .LCPI97_0 at toc@ha
+; PC64LE9-NEXT:    xscvspdpn 0, 0
+; PC64LE9-NEXT:    addi 3, 3, .LCPI97_0 at toc@l
+; PC64LE9-NEXT:    vmrghw 3, 4, 3
+; PC64LE9-NEXT:    xscvdpsxws 0, 0
+; PC64LE9-NEXT:    lxvx 36, 0, 3
+; PC64LE9-NEXT:    mffprwz 3, 0
+; PC64LE9-NEXT:    mtvsrwz 34, 3
+; PC64LE9-NEXT:    vperm 2, 2, 3, 4
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32(
-                                <3 x float><float 42.0, float 43.0,
-                                            float 44.0>,
+                                <3 x float> %x,
                                 metadata !"fpexcept.strict") #0
   ret <3 x i32> %result
 }
 
-define <4 x i32> @constrained_vector_fptosi_v4i32_v4f32() #0 {
+define <4 x i32> @constrained_vector_fptosi_v4i32_v4f32(<4 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI98_0 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI98_0 at toc@l
-; PC64LE-NEXT:    lvx 2, 0, 3
 ; PC64LE-NEXT:    xvcvspsxws 34, 34
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI98_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI98_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    xvcvspsxws 34, 0
+; PC64LE9-NEXT:    xvcvspsxws 34, 34
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(
-                                <4 x float><float 42.0, float 43.0,
-                                            float 44.0, float 45.0>,
+                                <4 x float> %x,
                                 metadata !"fpexcept.strict") #0
   ret <4 x i32> %result
 }
 
-define <1 x i64> @constrained_vector_fptosi_v1i64_v1f32() #0 {
+define <1 x i64> @constrained_vector_fptosi_v1i64_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI99_0 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI99_0 at toc@l(3)
-; PC64LE-NEXT:    xscvdpsxds 0, 0
+; PC64LE-NEXT:    xscvdpsxds 0, 1
 ; PC64LE-NEXT:    mffprd 3, 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI99_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI99_0 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpsxds 0, 0
+; PC64LE9-NEXT:    xscvdpsxds 0, 1
 ; PC64LE9-NEXT:    mffprd 3, 0
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32(
-                               <1 x float><float 42.0>,
+                               <1 x float> %x,
                                metadata !"fpexcept.strict") #0
   ret <1 x i64> %result
 }
 
-define <2 x i64> @constrained_vector_fptosi_v2i64_v2f32() #0 {
+define <2 x i64> @constrained_vector_fptosi_v2i64_v2f32(<2 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI100_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI100_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI100_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI100_1 at toc@l(4)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xxswapd 1, 34
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
 ; PC64LE-NEXT:    xscvdpsxds 0, 0
 ; PC64LE-NEXT:    xscvdpsxds 1, 1
 ; PC64LE-NEXT:    mffprd 3, 0
@@ -5718,32 +5645,32 @@ define <2 x i64> @constrained_vector_fptosi_v2i64_v2f32() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI100_0 at toc@ha
-; PC64LE9-NEXT:    addis 4, 2, .LCPI100_1 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI100_0 at toc@l(3)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpsxds 0, 0
 ; PC64LE9-NEXT:    mffprd 3, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI100_1 at toc@l(4)
+; PC64LE9-NEXT:    xxswapd 0, 34
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpsxds 0, 0
 ; PC64LE9-NEXT:    mffprd 4, 0
 ; PC64LE9-NEXT:    mtvsrdd 34, 4, 3
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32(
-                                <2 x float><float 42.0, float 43.0>,
+                                <2 x float> %x,
                                 metadata !"fpexcept.strict") #0
   ret <2 x i64> %result
 }
 
-define <3 x i64> @constrained_vector_fptosi_v3i64_v3f32() #0 {
+define <3 x i64> @constrained_vector_fptosi_v3i64_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI101_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI101_1 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI101_2 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI101_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI101_1 at toc@l(4)
-; PC64LE-NEXT:    lfs 2, .LCPI101_2 at toc@l(5)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xxswapd 1, 34
+; PC64LE-NEXT:    xxsldwi 2, 34, 34, 1
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    xscvdpsxds 0, 0
 ; PC64LE-NEXT:    xscvdpsxds 1, 1
 ; PC64LE-NEXT:    xscvdpsxds 2, 2
@@ -5754,162 +5681,143 @@ define <3 x i64> @constrained_vector_fptosi_v3i64_v3f32() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI101_0 at toc@ha
-; PC64LE9-NEXT:    addis 4, 2, .LCPI101_1 at toc@ha
-; PC64LE9-NEXT:    addis 5, 2, .LCPI101_2 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI101_0 at toc@l(3)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpsxds 0, 0
 ; PC64LE9-NEXT:    mffprd 3, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI101_1 at toc@l(4)
+; PC64LE9-NEXT:    xxswapd 0, 34
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpsxds 0, 0
 ; PC64LE9-NEXT:    mffprd 4, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI101_2 at toc@l(5)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpsxds 0, 0
 ; PC64LE9-NEXT:    mffprd 5, 0
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32(
-                                <3 x float><float 42.0, float 43.0,
-                                            float 44.0>,
+                                <3 x float> %x,
                                 metadata !"fpexcept.strict") #0
   ret <3 x i64> %result
 }
 
-define <4 x i64> @constrained_vector_fptosi_v4i64_v4f32() #0 {
+define <4 x i64> @constrained_vector_fptosi_v4i64_v4f32(<4 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI102_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI102_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI102_0 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI102_2 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI102_1 at toc@l(4)
-; PC64LE-NEXT:    addis 4, 2, .LCPI102_3 at toc@ha
-; PC64LE-NEXT:    lfs 2, .LCPI102_2 at toc@l(3)
-; PC64LE-NEXT:    lfs 3, .LCPI102_3 at toc@l(4)
-; PC64LE-NEXT:    xscvdpsxds 0, 0
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xscvspdpn 1, 34
+; PC64LE-NEXT:    xxswapd 2, 34
+; PC64LE-NEXT:    xxsldwi 3, 34, 34, 1
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 2, 2
+; PC64LE-NEXT:    xscvspdpn 3, 3
 ; PC64LE-NEXT:    xscvdpsxds 1, 1
+; PC64LE-NEXT:    xscvdpsxds 0, 0
 ; PC64LE-NEXT:    xscvdpsxds 2, 2
 ; PC64LE-NEXT:    xscvdpsxds 3, 3
+; PC64LE-NEXT:    mffprd 3, 1
+; PC64LE-NEXT:    mtfprd 1, 3
 ; PC64LE-NEXT:    mffprd 3, 0
-; PC64LE-NEXT:    mffprd 4, 1
+; PC64LE-NEXT:    mffprd 4, 2
 ; PC64LE-NEXT:    mtfprd 0, 3
-; PC64LE-NEXT:    mffprd 3, 2
-; PC64LE-NEXT:    mtfprd 1, 4
-; PC64LE-NEXT:    mffprd 4, 3
-; PC64LE-NEXT:    mtfprd 2, 3
-; PC64LE-NEXT:    xxmrghd 34, 1, 0
-; PC64LE-NEXT:    mtfprd 3, 4
-; PC64LE-NEXT:    xxmrghd 35, 3, 2
+; PC64LE-NEXT:    mffprd 3, 3
+; PC64LE-NEXT:    mtfprd 2, 4
+; PC64LE-NEXT:    mtfprd 3, 3
+; PC64LE-NEXT:    xxmrghd 34, 2, 0
+; PC64LE-NEXT:    xxmrghd 35, 1, 3
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI102_0 at toc@ha
-; PC64LE9-NEXT:    addis 4, 2, .LCPI102_1 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI102_0 at toc@l(3)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpsxds 0, 0
 ; PC64LE9-NEXT:    mffprd 3, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI102_1 at toc@l(4)
+; PC64LE9-NEXT:    xxswapd 0, 34
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpsxds 0, 0
 ; PC64LE9-NEXT:    mffprd 4, 0
-; PC64LE9-NEXT:    mtvsrdd 34, 4, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI102_2 at toc@ha
-; PC64LE9-NEXT:    addis 4, 2, .LCPI102_3 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI102_2 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 0, 34
+; PC64LE9-NEXT:    mtvsrdd 36, 4, 3
 ; PC64LE9-NEXT:    xscvdpsxds 0, 0
 ; PC64LE9-NEXT:    mffprd 3, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI102_3 at toc@l(4)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    vmr 2, 4
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpsxds 0, 0
 ; PC64LE9-NEXT:    mffprd 4, 0
-; PC64LE9-NEXT:    mtvsrdd 35, 4, 3
+; PC64LE9-NEXT:    mtvsrdd 35, 3, 4
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(
-                                <4 x float><float 42.0, float 43.0,
-                                            float 44.0, float 45.0>,
+                                <4 x float> %x,
                                 metadata !"fpexcept.strict") #0
   ret <4 x i64> %result
 }
 
-define <1 x i32> @constrained_vector_fptosi_v1i32_v1f64() #0 {
+define <1 x i32> @constrained_vector_fptosi_v1i32_v1f64(<1 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI103_0 at toc@ha
-; PC64LE-NEXT:    lfd 0, .LCPI103_0 at toc@l(3)
-; PC64LE-NEXT:    xscvdpsxws 0, 0
+; PC64LE-NEXT:    xscvdpsxws 0, 1
 ; PC64LE-NEXT:    mffprwz 3, 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI103_0 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI103_0 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpsxws 0, 0
+; PC64LE9-NEXT:    xscvdpsxws 0, 1
 ; PC64LE9-NEXT:    mffprwz 3, 0
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(
-                               <1 x double><double 42.1>,
+                               <1 x double> %x,
                                metadata !"fpexcept.strict") #0
   ret <1 x i32> %result
 }
 
 
-define <2 x i32> @constrained_vector_fptosi_v2i32_v2f64() #0 {
+define <2 x i32> @constrained_vector_fptosi_v2i32_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI104_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI104_1 at toc@ha
-; PC64LE-NEXT:    lfd 0, .LCPI104_0 at toc@l(3)
-; PC64LE-NEXT:    lfd 1, .LCPI104_1 at toc@l(4)
+; PC64LE-NEXT:    xxswapd 0, 34
+; PC64LE-NEXT:    xscvdpsxws 1, 34
 ; PC64LE-NEXT:    xscvdpsxws 0, 0
-; PC64LE-NEXT:    xscvdpsxws 1, 1
-; PC64LE-NEXT:    mffprwz 3, 0
-; PC64LE-NEXT:    mffprwz 4, 1
+; PC64LE-NEXT:    mffprwz 3, 1
 ; PC64LE-NEXT:    mtvsrwz 34, 3
+; PC64LE-NEXT:    mffprwz 4, 0
 ; PC64LE-NEXT:    mtvsrwz 35, 4
-; PC64LE-NEXT:    vmrghw 2, 3, 2
+; PC64LE-NEXT:    vmrghw 2, 2, 3
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI104_0 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI104_0 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpsxws 0, 0
+; PC64LE9-NEXT:    xscvdpsxws 0, 34
 ; PC64LE9-NEXT:    mffprwz 3, 0
-; PC64LE9-NEXT:    mtvsrwz 34, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI104_1 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI104_1 at toc@l(3)
+; PC64LE9-NEXT:    xxswapd 0, 34
+; PC64LE9-NEXT:    mtvsrwz 35, 3
 ; PC64LE9-NEXT:    xscvdpsxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 3, 0
-; PC64LE9-NEXT:    mtvsrwz 35, 3
+; PC64LE9-NEXT:    mtvsrwz 34, 3
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(
-                                <2 x double><double 42.1, double 42.2>,
+                                <2 x double> %x,
                                 metadata !"fpexcept.strict") #0
   ret <2 x i32> %result
 }
 
-define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64() #0 {
+define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f64:
 ; PC64LE:       # %bb.0: # %entry
+; PC64LE-NEXT:    xscvdpsxws 0, 1
 ; PC64LE-NEXT:    addis 3, 2, .LCPI105_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI105_1 at toc@ha
-; PC64LE-NEXT:    lfd 0, .LCPI105_0 at toc@l(3)
-; PC64LE-NEXT:    lfd 1, .LCPI105_1 at toc@l(4)
-; PC64LE-NEXT:    addis 3, 2, .LCPI105_3 at toc@ha
-; PC64LE-NEXT:    lfd 2, .LCPI105_3 at toc@l(3)
-; PC64LE-NEXT:    xscvdpsxws 0, 0
-; PC64LE-NEXT:    xscvdpsxws 1, 1
-; PC64LE-NEXT:    xscvdpsxws 2, 2
-; PC64LE-NEXT:    mffprwz 3, 0
-; PC64LE-NEXT:    mffprwz 4, 1
-; PC64LE-NEXT:    mtvsrwz 34, 3
-; PC64LE-NEXT:    addis 3, 2, .LCPI105_2 at toc@ha
-; PC64LE-NEXT:    mtvsrwz 35, 4
-; PC64LE-NEXT:    addi 3, 3, .LCPI105_2 at toc@l
+; PC64LE-NEXT:    xscvdpsxws 1, 2
+; PC64LE-NEXT:    addi 3, 3, .LCPI105_0 at toc@l
+; PC64LE-NEXT:    xscvdpsxws 2, 3
+; PC64LE-NEXT:    mffprwz 4, 0
+; PC64LE-NEXT:    mffprwz 5, 1
+; PC64LE-NEXT:    mtvsrwz 34, 4
+; PC64LE-NEXT:    mtvsrwz 35, 5
 ; PC64LE-NEXT:    mffprwz 4, 2
 ; PC64LE-NEXT:    vmrghw 2, 3, 2
 ; PC64LE-NEXT:    lvx 3, 0, 3
@@ -5919,78 +5827,59 @@ define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI105_0 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI105_0 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpsxws 0, 0
+; PC64LE9-NEXT:    xscvdpsxws 0, 1
 ; PC64LE9-NEXT:    mffprwz 3, 0
+; PC64LE9-NEXT:    xscvdpsxws 0, 2
 ; PC64LE9-NEXT:    mtvsrwz 34, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI105_1 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI105_1 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpsxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 3, 0
+; PC64LE9-NEXT:    xscvdpsxws 0, 3
 ; PC64LE9-NEXT:    mtvsrwz 35, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI105_2 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI105_2 at toc@l
+; PC64LE9-NEXT:    addis 3, 2, .LCPI105_0 at toc@ha
+; PC64LE9-NEXT:    addi 3, 3, .LCPI105_0 at toc@l
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    lxvx 35, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI105_3 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI105_3 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpsxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 3, 0
 ; PC64LE9-NEXT:    mtvsrwz 36, 3
 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64(
-                                <3 x double><double 42.1, double 42.2,
-                                             double 42.3>,
+                                <3 x double> %x,
                                 metadata !"fpexcept.strict") #0
   ret <3 x i32> %result
 }
 
-define <4 x i32> @constrained_vector_fptosi_v4i32_v4f64() #0 {
+define <4 x i32> @constrained_vector_fptosi_v4i32_v4f64(<4 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI106_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI106_1 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI106_2 at toc@ha
-; PC64LE-NEXT:    lfd 0, .LCPI106_0 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI106_3 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI106_1 at toc@l(4)
-; PC64LE-NEXT:    lfd 2, .LCPI106_2 at toc@l(5)
-; PC64LE-NEXT:    lfd 3, .LCPI106_3 at toc@l(3)
-; PC64LE-NEXT:    xscvdpsxws 0, 0
-; PC64LE-NEXT:    xscvdpsxws 1, 1
-; PC64LE-NEXT:    xscvdpsxws 2, 2
-; PC64LE-NEXT:    xscvdpsxws 3, 3
-; PC64LE-NEXT:    mffprwz 3, 0
-; PC64LE-NEXT:    mffprwz 4, 1
-; PC64LE-NEXT:    mffprwz 5, 2
-; PC64LE-NEXT:    mffprwz 6, 3
-; PC64LE-NEXT:    rldimi 4, 3, 32, 0
-; PC64LE-NEXT:    mtfprd 0, 4
-; PC64LE-NEXT:    rldimi 6, 5, 32, 0
+; PC64LE-NEXT:    xxswapd 0, 34
+; PC64LE-NEXT:    xxswapd 2, 35
+; PC64LE-NEXT:    xscvdpsxws 1, 34
+; PC64LE-NEXT:    xscvdpsxws 3, 35
+; PC64LE-NEXT:    xscvdpsxws 0, 0
+; PC64LE-NEXT:    xscvdpsxws 2, 2
+; PC64LE-NEXT:    mffprwz 3, 1
+; PC64LE-NEXT:    mffprwz 4, 3
+; PC64LE-NEXT:    mffprwz 5, 0
+; PC64LE-NEXT:    mffprwz 6, 2
+; PC64LE-NEXT:    rldimi 5, 3, 32, 0
+; PC64LE-NEXT:    rldimi 6, 4, 32, 0
+; PC64LE-NEXT:    mtfprd 0, 5
 ; PC64LE-NEXT:    mtfprd 1, 6
 ; PC64LE-NEXT:    xxmrghd 34, 1, 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI106_0 at toc@ha
-; PC64LE9-NEXT:    addis 4, 2, .LCPI106_1 at toc@ha
-; PC64LE9-NEXT:    addis 5, 2, .LCPI106_3 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI106_0 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpsxws 0, 0
+; PC64LE9-NEXT:    xscvdpsxws 0, 34
 ; PC64LE9-NEXT:    mffprwz 3, 0
-; PC64LE9-NEXT:    lfd 0, .LCPI106_1 at toc@l(4)
+; PC64LE9-NEXT:    xxswapd 0, 34
 ; PC64LE9-NEXT:    xscvdpsxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 4, 0
+; PC64LE9-NEXT:    xscvdpsxws 0, 35
 ; PC64LE9-NEXT:    rldimi 4, 3, 32, 0
-; PC64LE9-NEXT:    addis 3, 2, .LCPI106_2 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI106_2 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpsxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 3, 0
-; PC64LE9-NEXT:    lfd 0, .LCPI106_3 at toc@l(5)
+; PC64LE9-NEXT:    xxswapd 0, 35
 ; PC64LE9-NEXT:    xscvdpsxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 5, 0
 ; PC64LE9-NEXT:    rldimi 5, 3, 32, 0
@@ -5998,71 +5887,53 @@ define <4 x i32> @constrained_vector_fptosi_v4i32_v4f64() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64(
-                                <4 x double><double 42.1, double 42.2,
-                                             double 42.3, double 42.4>,
+                                <4 x double> %x,
                                 metadata !"fpexcept.strict") #0
   ret <4 x i32> %result
 }
 
-define <1 x i64> @constrained_vector_fptosi_v1i64_v1f64() #0 {
+define <1 x i64> @constrained_vector_fptosi_v1i64_v1f64(<1 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI107_0 at toc@ha
-; PC64LE-NEXT:    lfd 0, .LCPI107_0 at toc@l(3)
-; PC64LE-NEXT:    xscvdpsxds 0, 0
+; PC64LE-NEXT:    xscvdpsxds 0, 1
 ; PC64LE-NEXT:    mffprd 3, 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI107_0 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI107_0 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpsxds 0, 0
+; PC64LE9-NEXT:    xscvdpsxds 0, 1
 ; PC64LE9-NEXT:    mffprd 3, 0
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(
-                               <1 x double><double 42.1>,
+                               <1 x double> %x,
                                metadata !"fpexcept.strict") #0
   ret <1 x i64> %result
 }
 
-define <2 x i64> @constrained_vector_fptosi_v2i64_v2f64() #0 {
+define <2 x i64> @constrained_vector_fptosi_v2i64_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI108_0 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI108_0 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xvcvdpsxds 34, 0
+; PC64LE-NEXT:    xvcvdpsxds 34, 34
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI108_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI108_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    xvcvdpsxds 34, 0
+; PC64LE9-NEXT:    xvcvdpsxds 34, 34
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(
-                                <2 x double><double 42.1, double 42.2>,
+                                <2 x double> %x,
                                 metadata !"fpexcept.strict") #0
   ret <2 x i64> %result
 }
 
-define <3 x i64> @constrained_vector_fptosi_v3i64_v3f64() #0 {
+define <3 x i64> @constrained_vector_fptosi_v3i64_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI109_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI109_1 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI109_2 at toc@ha
-; PC64LE-NEXT:    lfd 0, .LCPI109_0 at toc@l(3)
-; PC64LE-NEXT:    lfd 1, .LCPI109_1 at toc@l(4)
-; PC64LE-NEXT:    lfd 2, .LCPI109_2 at toc@l(5)
-; PC64LE-NEXT:    xscvdpsxds 0, 0
-; PC64LE-NEXT:    xscvdpsxds 1, 1
-; PC64LE-NEXT:    xscvdpsxds 2, 2
+; PC64LE-NEXT:    xscvdpsxds 0, 1
+; PC64LE-NEXT:    xscvdpsxds 1, 2
+; PC64LE-NEXT:    xscvdpsxds 2, 3
 ; PC64LE-NEXT:    mffprd 3, 0
 ; PC64LE-NEXT:    mffprd 4, 1
 ; PC64LE-NEXT:    mffprd 5, 2
@@ -6070,91 +5941,65 @@ define <3 x i64> @constrained_vector_fptosi_v3i64_v3f64() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI109_0 at toc@ha
-; PC64LE9-NEXT:    addis 4, 2, .LCPI109_1 at toc@ha
-; PC64LE9-NEXT:    addis 5, 2, .LCPI109_2 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI109_0 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpsxds 0, 0
+; PC64LE9-NEXT:    xscvdpsxds 0, 1
 ; PC64LE9-NEXT:    mffprd 3, 0
-; PC64LE9-NEXT:    lfd 0, .LCPI109_1 at toc@l(4)
-; PC64LE9-NEXT:    xscvdpsxds 0, 0
+; PC64LE9-NEXT:    xscvdpsxds 0, 2
 ; PC64LE9-NEXT:    mffprd 4, 0
-; PC64LE9-NEXT:    lfd 0, .LCPI109_2 at toc@l(5)
-; PC64LE9-NEXT:    xscvdpsxds 0, 0
+; PC64LE9-NEXT:    xscvdpsxds 0, 3
 ; PC64LE9-NEXT:    mffprd 5, 0
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64(
-                                <3 x double><double 42.1, double 42.2,
-                                             double 42.3>,
+                                <3 x double> %x,
                                 metadata !"fpexcept.strict") #0
   ret <3 x i64> %result
 }
 
-define <4 x i64> @constrained_vector_fptosi_v4i64_v4f64() #0 {
+define <4 x i64> @constrained_vector_fptosi_v4i64_v4f64(<4 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI110_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI110_1 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI110_0 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    addi 3, 4, .LCPI110_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 1, 0, 3
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
-; PC64LE-NEXT:    xvcvdpsxds 35, 0
-; PC64LE-NEXT:    xvcvdpsxds 34, 1
+; PC64LE-NEXT:    xvcvdpsxds 35, 35
+; PC64LE-NEXT:    xvcvdpsxds 34, 34
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI110_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI110_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI110_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI110_1 at toc@l
-; PC64LE9-NEXT:    xvcvdpsxds 35, 0
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    xvcvdpsxds 34, 0
+; PC64LE9-NEXT:    xvcvdpsxds 35, 35
+; PC64LE9-NEXT:    xvcvdpsxds 34, 34
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64(
-                                <4 x double><double 42.1, double 42.2,
-                                             double 42.3, double 42.4>,
+                                <4 x double> %x,
                                 metadata !"fpexcept.strict") #0
   ret <4 x i64> %result
 }
 
-define <1 x i32> @constrained_vector_fptoui_v1i32_v1f32() #0 {
+define <1 x i32> @constrained_vector_fptoui_v1i32_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI111_0 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI111_0 at toc@l(3)
-; PC64LE-NEXT:    xscvdpuxws 0, 0
+; PC64LE-NEXT:    xscvdpuxws 0, 1
 ; PC64LE-NEXT:    mffprwz 3, 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI111_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI111_0 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpuxws 0, 0
+; PC64LE9-NEXT:    xscvdpuxws 0, 1
 ; PC64LE9-NEXT:    mffprwz 3, 0
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32(
-                               <1 x float><float 42.0>,
+                               <1 x float> %x,
                                metadata !"fpexcept.strict") #0
   ret <1 x i32> %result
 }
 
-define <2 x i32> @constrained_vector_fptoui_v2i32_v2f32() #0 {
+define <2 x i32> @constrained_vector_fptoui_v2i32_v2f32(<2 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI112_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI112_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI112_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI112_1 at toc@l(4)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xxswapd 1, 34
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
 ; PC64LE-NEXT:    xscvdpuxws 0, 0
 ; PC64LE-NEXT:    xscvdpuxws 1, 1
 ; PC64LE-NEXT:    mffprwz 3, 0
@@ -6166,43 +6011,43 @@ define <2 x i32> @constrained_vector_fptoui_v2i32_v2f32() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI112_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI112_0 at toc@l(3)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpuxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 3, 0
-; PC64LE9-NEXT:    mtvsrwz 34, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI112_1 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI112_1 at toc@l(3)
+; PC64LE9-NEXT:    xxswapd 0, 34
+; PC64LE9-NEXT:    mtvsrwz 35, 3
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpuxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 3, 0
-; PC64LE9-NEXT:    mtvsrwz 35, 3
-; PC64LE9-NEXT:    vmrghw 2, 3, 2
+; PC64LE9-NEXT:    mtvsrwz 34, 3
+; PC64LE9-NEXT:    vmrghw 2, 2, 3
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32(
-                                <2 x float><float 42.0, float 43.0>,
+                                <2 x float> %x,
                                 metadata !"fpexcept.strict") #0
   ret <2 x i32> %result
 }
 
-define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32() #0 {
+define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f32:
 ; PC64LE:       # %bb.0: # %entry
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xxswapd 1, 34
 ; PC64LE-NEXT:    addis 3, 2, .LCPI113_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI113_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI113_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI113_1 at toc@l(4)
-; PC64LE-NEXT:    addis 3, 2, .LCPI113_3 at toc@ha
-; PC64LE-NEXT:    lfs 2, .LCPI113_3 at toc@l(3)
+; PC64LE-NEXT:    xxsldwi 2, 34, 34, 1
+; PC64LE-NEXT:    addi 3, 3, .LCPI113_0 at toc@l
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    xscvdpuxws 0, 0
 ; PC64LE-NEXT:    xscvdpuxws 1, 1
 ; PC64LE-NEXT:    xscvdpuxws 2, 2
-; PC64LE-NEXT:    mffprwz 3, 0
-; PC64LE-NEXT:    mffprwz 4, 1
-; PC64LE-NEXT:    mtvsrwz 34, 3
-; PC64LE-NEXT:    addis 3, 2, .LCPI113_2 at toc@ha
-; PC64LE-NEXT:    mtvsrwz 35, 4
-; PC64LE-NEXT:    addi 3, 3, .LCPI113_2 at toc@l
+; PC64LE-NEXT:    mffprwz 4, 0
+; PC64LE-NEXT:    mffprwz 5, 1
+; PC64LE-NEXT:    mtvsrwz 34, 4
+; PC64LE-NEXT:    mtvsrwz 35, 5
 ; PC64LE-NEXT:    mffprwz 4, 2
 ; PC64LE-NEXT:    vmrghw 2, 3, 2
 ; PC64LE-NEXT:    lvx 3, 0, 3
@@ -6212,89 +6057,77 @@ define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI113_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI113_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI113_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI113_1 at toc@l(3)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpuxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 3, 0
-; PC64LE9-NEXT:    xscvdpuxws 0, 1
-; PC64LE9-NEXT:    mtvsrwz 34, 3
-; PC64LE9-NEXT:    mffprwz 3, 0
+; PC64LE9-NEXT:    xxswapd 0, 34
 ; PC64LE9-NEXT:    mtvsrwz 35, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI113_2 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI113_2 at toc@l
-; PC64LE9-NEXT:    vmrghw 2, 3, 2
-; PC64LE9-NEXT:    lxvx 35, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI113_3 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI113_3 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpuxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 3, 0
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
 ; PC64LE9-NEXT:    mtvsrwz 36, 3
-; PC64LE9-NEXT:    vperm 2, 4, 2, 3
+; PC64LE9-NEXT:    addis 3, 2, .LCPI113_0 at toc@ha
+; PC64LE9-NEXT:    xscvspdpn 0, 0
+; PC64LE9-NEXT:    addi 3, 3, .LCPI113_0 at toc@l
+; PC64LE9-NEXT:    vmrghw 3, 4, 3
+; PC64LE9-NEXT:    xscvdpuxws 0, 0
+; PC64LE9-NEXT:    lxvx 36, 0, 3
+; PC64LE9-NEXT:    mffprwz 3, 0
+; PC64LE9-NEXT:    mtvsrwz 34, 3
+; PC64LE9-NEXT:    vperm 2, 2, 3, 4
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32(
-                                <3 x float><float 42.0, float 43.0,
-                                            float 44.0>,
+                                <3 x float> %x,
                                 metadata !"fpexcept.strict") #0
   ret <3 x i32> %result
 }
 
-define <4 x i32> @constrained_vector_fptoui_v4i32_v4f32() #0 {
+define <4 x i32> @constrained_vector_fptoui_v4i32_v4f32(<4 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI114_0 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI114_0 at toc@l
-; PC64LE-NEXT:    lvx 2, 0, 3
 ; PC64LE-NEXT:    xvcvspuxws 34, 34
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI114_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI114_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    xvcvspuxws 34, 0
+; PC64LE9-NEXT:    xvcvspuxws 34, 34
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(
-                                <4 x float><float 42.0, float 43.0,
-                                            float 44.0, float 45.0>,
+                                <4 x float> %x,
                                 metadata !"fpexcept.strict") #0
   ret <4 x i32> %result
 }
 
-define <1 x i64> @constrained_vector_fptoui_v1i64_v1f32() #0 {
+define <1 x i64> @constrained_vector_fptoui_v1i64_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI115_0 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI115_0 at toc@l(3)
-; PC64LE-NEXT:    xscvdpuxds 0, 0
+; PC64LE-NEXT:    xscvdpuxds 0, 1
 ; PC64LE-NEXT:    mffprd 3, 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI115_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI115_0 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpuxds 0, 0
+; PC64LE9-NEXT:    xscvdpuxds 0, 1
 ; PC64LE9-NEXT:    mffprd 3, 0
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32(
-                               <1 x float><float 42.0>,
+                               <1 x float> %x,
                                metadata !"fpexcept.strict") #0
   ret <1 x i64> %result
 }
 
-define <2 x i64> @constrained_vector_fptoui_v2i64_v2f32() #0 {
+define <2 x i64> @constrained_vector_fptoui_v2i64_v2f32(<2 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI116_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI116_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI116_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI116_1 at toc@l(4)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xxswapd 1, 34
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
 ; PC64LE-NEXT:    xscvdpuxds 0, 0
 ; PC64LE-NEXT:    xscvdpuxds 1, 1
 ; PC64LE-NEXT:    mffprd 3, 0
@@ -6306,32 +6139,32 @@ define <2 x i64> @constrained_vector_fptoui_v2i64_v2f32() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI116_0 at toc@ha
-; PC64LE9-NEXT:    addis 4, 2, .LCPI116_1 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI116_0 at toc@l(3)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpuxds 0, 0
 ; PC64LE9-NEXT:    mffprd 3, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI116_1 at toc@l(4)
+; PC64LE9-NEXT:    xxswapd 0, 34
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpuxds 0, 0
 ; PC64LE9-NEXT:    mffprd 4, 0
 ; PC64LE9-NEXT:    mtvsrdd 34, 4, 3
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32(
-                                <2 x float><float 42.0, float 43.0>,
+                                <2 x float> %x,
                                 metadata !"fpexcept.strict") #0
   ret <2 x i64> %result
 }
 
-define <3 x i64> @constrained_vector_fptoui_v3i64_v3f32() #0 {
+define <3 x i64> @constrained_vector_fptoui_v3i64_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI117_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI117_1 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI117_2 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI117_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI117_1 at toc@l(4)
-; PC64LE-NEXT:    lfs 2, .LCPI117_2 at toc@l(5)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xxswapd 1, 34
+; PC64LE-NEXT:    xxsldwi 2, 34, 34, 1
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    xscvdpuxds 0, 0
 ; PC64LE-NEXT:    xscvdpuxds 1, 1
 ; PC64LE-NEXT:    xscvdpuxds 2, 2
@@ -6342,161 +6175,142 @@ define <3 x i64> @constrained_vector_fptoui_v3i64_v3f32() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI117_0 at toc@ha
-; PC64LE9-NEXT:    addis 4, 2, .LCPI117_1 at toc@ha
-; PC64LE9-NEXT:    addis 5, 2, .LCPI117_2 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI117_0 at toc@l(3)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpuxds 0, 0
 ; PC64LE9-NEXT:    mffprd 3, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI117_1 at toc@l(4)
+; PC64LE9-NEXT:    xxswapd 0, 34
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpuxds 0, 0
 ; PC64LE9-NEXT:    mffprd 4, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI117_2 at toc@l(5)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpuxds 0, 0
 ; PC64LE9-NEXT:    mffprd 5, 0
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32(
-                                <3 x float><float 42.0, float 43.0,
-                                            float 44.0>,
+                                <3 x float> %x,
                                 metadata !"fpexcept.strict") #0
   ret <3 x i64> %result
 }
 
-define <4 x i64> @constrained_vector_fptoui_v4i64_v4f32() #0 {
+define <4 x i64> @constrained_vector_fptoui_v4i64_v4f32(<4 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI118_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI118_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI118_0 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI118_2 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI118_1 at toc@l(4)
-; PC64LE-NEXT:    addis 4, 2, .LCPI118_3 at toc@ha
-; PC64LE-NEXT:    lfs 2, .LCPI118_2 at toc@l(3)
-; PC64LE-NEXT:    lfs 3, .LCPI118_3 at toc@l(4)
-; PC64LE-NEXT:    xscvdpuxds 0, 0
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xscvspdpn 1, 34
+; PC64LE-NEXT:    xxswapd 2, 34
+; PC64LE-NEXT:    xxsldwi 3, 34, 34, 1
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 2, 2
+; PC64LE-NEXT:    xscvspdpn 3, 3
 ; PC64LE-NEXT:    xscvdpuxds 1, 1
+; PC64LE-NEXT:    xscvdpuxds 0, 0
 ; PC64LE-NEXT:    xscvdpuxds 2, 2
 ; PC64LE-NEXT:    xscvdpuxds 3, 3
+; PC64LE-NEXT:    mffprd 3, 1
+; PC64LE-NEXT:    mtfprd 1, 3
 ; PC64LE-NEXT:    mffprd 3, 0
-; PC64LE-NEXT:    mffprd 4, 1
+; PC64LE-NEXT:    mffprd 4, 2
 ; PC64LE-NEXT:    mtfprd 0, 3
-; PC64LE-NEXT:    mffprd 3, 2
-; PC64LE-NEXT:    mtfprd 1, 4
-; PC64LE-NEXT:    mffprd 4, 3
-; PC64LE-NEXT:    mtfprd 2, 3
-; PC64LE-NEXT:    xxmrghd 34, 1, 0
-; PC64LE-NEXT:    mtfprd 3, 4
-; PC64LE-NEXT:    xxmrghd 35, 3, 2
+; PC64LE-NEXT:    mffprd 3, 3
+; PC64LE-NEXT:    mtfprd 2, 4
+; PC64LE-NEXT:    mtfprd 3, 3
+; PC64LE-NEXT:    xxmrghd 34, 2, 0
+; PC64LE-NEXT:    xxmrghd 35, 1, 3
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI118_0 at toc@ha
-; PC64LE9-NEXT:    addis 4, 2, .LCPI118_1 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI118_0 at toc@l(3)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpuxds 0, 0
 ; PC64LE9-NEXT:    mffprd 3, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI118_1 at toc@l(4)
+; PC64LE9-NEXT:    xxswapd 0, 34
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpuxds 0, 0
 ; PC64LE9-NEXT:    mffprd 4, 0
-; PC64LE9-NEXT:    mtvsrdd 34, 4, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI118_2 at toc@ha
-; PC64LE9-NEXT:    addis 4, 2, .LCPI118_3 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI118_2 at toc@l(3)
+; PC64LE9-NEXT:    xscvspdpn 0, 34
+; PC64LE9-NEXT:    mtvsrdd 36, 4, 3
 ; PC64LE9-NEXT:    xscvdpuxds 0, 0
 ; PC64LE9-NEXT:    mffprd 3, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI118_3 at toc@l(4)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    vmr 2, 4
+; PC64LE9-NEXT:    xscvspdpn 0, 0
 ; PC64LE9-NEXT:    xscvdpuxds 0, 0
 ; PC64LE9-NEXT:    mffprd 4, 0
-; PC64LE9-NEXT:    mtvsrdd 35, 4, 3
+; PC64LE9-NEXT:    mtvsrdd 35, 3, 4
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(
-                                <4 x float><float 42.0, float 43.0,
-                                            float 44.0, float 45.0>,
+                                <4 x float> %x,
                                 metadata !"fpexcept.strict") #0
   ret <4 x i64> %result
 }
 
-define <1 x i32> @constrained_vector_fptoui_v1i32_v1f64() #0 {
+define <1 x i32> @constrained_vector_fptoui_v1i32_v1f64(<1 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI119_0 at toc@ha
-; PC64LE-NEXT:    lfd 0, .LCPI119_0 at toc@l(3)
-; PC64LE-NEXT:    xscvdpuxws 0, 0
+; PC64LE-NEXT:    xscvdpuxws 0, 1
 ; PC64LE-NEXT:    mffprwz 3, 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI119_0 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI119_0 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpuxws 0, 0
+; PC64LE9-NEXT:    xscvdpuxws 0, 1
 ; PC64LE9-NEXT:    mffprwz 3, 0
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(
-                               <1 x double><double 42.1>,
+                               <1 x double> %x,
                                metadata !"fpexcept.strict") #0
   ret <1 x i32> %result
 }
 
-define <2 x i32> @constrained_vector_fptoui_v2i32_v2f64() #0 {
+define <2 x i32> @constrained_vector_fptoui_v2i32_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI120_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI120_1 at toc@ha
-; PC64LE-NEXT:    lfd 0, .LCPI120_0 at toc@l(3)
-; PC64LE-NEXT:    lfd 1, .LCPI120_1 at toc@l(4)
+; PC64LE-NEXT:    xxswapd 0, 34
+; PC64LE-NEXT:    xscvdpuxws 1, 34
 ; PC64LE-NEXT:    xscvdpuxws 0, 0
-; PC64LE-NEXT:    xscvdpuxws 1, 1
-; PC64LE-NEXT:    mffprwz 3, 0
-; PC64LE-NEXT:    mffprwz 4, 1
+; PC64LE-NEXT:    mffprwz 3, 1
 ; PC64LE-NEXT:    mtvsrwz 34, 3
+; PC64LE-NEXT:    mffprwz 4, 0
 ; PC64LE-NEXT:    mtvsrwz 35, 4
-; PC64LE-NEXT:    vmrghw 2, 3, 2
+; PC64LE-NEXT:    vmrghw 2, 2, 3
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI120_0 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI120_0 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpuxws 0, 0
+; PC64LE9-NEXT:    xscvdpuxws 0, 34
 ; PC64LE9-NEXT:    mffprwz 3, 0
-; PC64LE9-NEXT:    mtvsrwz 34, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI120_1 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI120_1 at toc@l(3)
+; PC64LE9-NEXT:    xxswapd 0, 34
+; PC64LE9-NEXT:    mtvsrwz 35, 3
 ; PC64LE9-NEXT:    xscvdpuxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 3, 0
-; PC64LE9-NEXT:    mtvsrwz 35, 3
+; PC64LE9-NEXT:    mtvsrwz 34, 3
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(
-                                <2 x double><double 42.1, double 42.2>,
+                                <2 x double> %x,
                                 metadata !"fpexcept.strict") #0
   ret <2 x i32> %result
 }
 
-define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64() #0 {
+define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f64:
 ; PC64LE:       # %bb.0: # %entry
+; PC64LE-NEXT:    xscvdpuxws 0, 1
 ; PC64LE-NEXT:    addis 3, 2, .LCPI121_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI121_1 at toc@ha
-; PC64LE-NEXT:    lfd 0, .LCPI121_0 at toc@l(3)
-; PC64LE-NEXT:    lfd 1, .LCPI121_1 at toc@l(4)
-; PC64LE-NEXT:    addis 3, 2, .LCPI121_3 at toc@ha
-; PC64LE-NEXT:    lfd 2, .LCPI121_3 at toc@l(3)
-; PC64LE-NEXT:    xscvdpuxws 0, 0
-; PC64LE-NEXT:    xscvdpuxws 1, 1
-; PC64LE-NEXT:    xscvdpuxws 2, 2
-; PC64LE-NEXT:    mffprwz 3, 0
-; PC64LE-NEXT:    mffprwz 4, 1
-; PC64LE-NEXT:    mtvsrwz 34, 3
-; PC64LE-NEXT:    addis 3, 2, .LCPI121_2 at toc@ha
-; PC64LE-NEXT:    mtvsrwz 35, 4
-; PC64LE-NEXT:    addi 3, 3, .LCPI121_2 at toc@l
+; PC64LE-NEXT:    xscvdpuxws 1, 2
+; PC64LE-NEXT:    addi 3, 3, .LCPI121_0 at toc@l
+; PC64LE-NEXT:    xscvdpuxws 2, 3
+; PC64LE-NEXT:    mffprwz 4, 0
+; PC64LE-NEXT:    mffprwz 5, 1
+; PC64LE-NEXT:    mtvsrwz 34, 4
+; PC64LE-NEXT:    mtvsrwz 35, 5
 ; PC64LE-NEXT:    mffprwz 4, 2
 ; PC64LE-NEXT:    vmrghw 2, 3, 2
 ; PC64LE-NEXT:    lvx 3, 0, 3
@@ -6506,78 +6320,59 @@ define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI121_0 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI121_0 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpuxws 0, 0
+; PC64LE9-NEXT:    xscvdpuxws 0, 1
 ; PC64LE9-NEXT:    mffprwz 3, 0
+; PC64LE9-NEXT:    xscvdpuxws 0, 2
 ; PC64LE9-NEXT:    mtvsrwz 34, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI121_1 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI121_1 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpuxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 3, 0
+; PC64LE9-NEXT:    xscvdpuxws 0, 3
 ; PC64LE9-NEXT:    mtvsrwz 35, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI121_2 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI121_2 at toc@l
+; PC64LE9-NEXT:    addis 3, 2, .LCPI121_0 at toc@ha
+; PC64LE9-NEXT:    addi 3, 3, .LCPI121_0 at toc@l
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    lxvx 35, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI121_3 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI121_3 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpuxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 3, 0
 ; PC64LE9-NEXT:    mtvsrwz 36, 3
 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64(
-                                <3 x double><double 42.1, double 42.2,
-                                             double 42.3>,
+                                <3 x double> %x,
                                 metadata !"fpexcept.strict") #0
   ret <3 x i32> %result
 }
 
-define <4 x i32> @constrained_vector_fptoui_v4i32_v4f64() #0 {
+define <4 x i32> @constrained_vector_fptoui_v4i32_v4f64(<4 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI122_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI122_1 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI122_2 at toc@ha
-; PC64LE-NEXT:    lfd 0, .LCPI122_0 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI122_3 at toc@ha
-; PC64LE-NEXT:    lfd 1, .LCPI122_1 at toc@l(4)
-; PC64LE-NEXT:    lfd 2, .LCPI122_2 at toc@l(5)
-; PC64LE-NEXT:    lfd 3, .LCPI122_3 at toc@l(3)
+; PC64LE-NEXT:    xxswapd 0, 34
+; PC64LE-NEXT:    xxswapd 2, 35
+; PC64LE-NEXT:    xscvdpuxws 1, 34
+; PC64LE-NEXT:    xscvdpuxws 3, 35
 ; PC64LE-NEXT:    xscvdpuxws 0, 0
-; PC64LE-NEXT:    xscvdpuxws 1, 1
 ; PC64LE-NEXT:    xscvdpuxws 2, 2
-; PC64LE-NEXT:    xscvdpuxws 3, 3
-; PC64LE-NEXT:    mffprwz 3, 0
-; PC64LE-NEXT:    mffprwz 4, 1
-; PC64LE-NEXT:    mffprwz 5, 2
-; PC64LE-NEXT:    mffprwz 6, 3
-; PC64LE-NEXT:    rldimi 4, 3, 32, 0
-; PC64LE-NEXT:    mtfprd 0, 4
-; PC64LE-NEXT:    rldimi 6, 5, 32, 0
+; PC64LE-NEXT:    mffprwz 3, 1
+; PC64LE-NEXT:    mffprwz 4, 3
+; PC64LE-NEXT:    mffprwz 5, 0
+; PC64LE-NEXT:    mffprwz 6, 2
+; PC64LE-NEXT:    rldimi 5, 3, 32, 0
+; PC64LE-NEXT:    rldimi 6, 4, 32, 0
+; PC64LE-NEXT:    mtfprd 0, 5
 ; PC64LE-NEXT:    mtfprd 1, 6
 ; PC64LE-NEXT:    xxmrghd 34, 1, 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI122_0 at toc@ha
-; PC64LE9-NEXT:    addis 4, 2, .LCPI122_1 at toc@ha
-; PC64LE9-NEXT:    addis 5, 2, .LCPI122_3 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI122_0 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpuxws 0, 0
+; PC64LE9-NEXT:    xscvdpuxws 0, 34
 ; PC64LE9-NEXT:    mffprwz 3, 0
-; PC64LE9-NEXT:    lfd 0, .LCPI122_1 at toc@l(4)
+; PC64LE9-NEXT:    xxswapd 0, 34
 ; PC64LE9-NEXT:    xscvdpuxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 4, 0
+; PC64LE9-NEXT:    xscvdpuxws 0, 35
 ; PC64LE9-NEXT:    rldimi 4, 3, 32, 0
-; PC64LE9-NEXT:    addis 3, 2, .LCPI122_2 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI122_2 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpuxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 3, 0
-; PC64LE9-NEXT:    lfd 0, .LCPI122_3 at toc@l(5)
+; PC64LE9-NEXT:    xxswapd 0, 35
 ; PC64LE9-NEXT:    xscvdpuxws 0, 0
 ; PC64LE9-NEXT:    mffprwz 5, 0
 ; PC64LE9-NEXT:    rldimi 5, 3, 32, 0
@@ -6585,71 +6380,53 @@ define <4 x i32> @constrained_vector_fptoui_v4i32_v4f64() #0 {
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(
-                                <4 x double><double 42.1, double 42.2,
-                                             double 42.3, double 42.4>,
+                                <4 x double> %x,
                                 metadata !"fpexcept.strict") #0
   ret <4 x i32> %result
 }
 
-define <1 x i64> @constrained_vector_fptoui_v1i64_v1f64() #0 {
+define <1 x i64> @constrained_vector_fptoui_v1i64_v1f64(<1 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI123_0 at toc@ha
-; PC64LE-NEXT:    lfd 0, .LCPI123_0 at toc@l(3)
-; PC64LE-NEXT:    xscvdpuxds 0, 0
+; PC64LE-NEXT:    xscvdpuxds 0, 1
 ; PC64LE-NEXT:    mffprd 3, 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI123_0 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI123_0 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpuxds 0, 0
+; PC64LE9-NEXT:    xscvdpuxds 0, 1
 ; PC64LE9-NEXT:    mffprd 3, 0
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(
-                               <1 x double><double 42.1>,
+                               <1 x double> %x,
                                metadata !"fpexcept.strict") #0
   ret <1 x i64> %result
 }
 
-define <2 x i64> @constrained_vector_fptoui_v2i64_v2f64() #0 {
+define <2 x i64> @constrained_vector_fptoui_v2i64_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI124_0 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI124_0 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xvcvdpuxds 34, 0
+; PC64LE-NEXT:    xvcvdpuxds 34, 34
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI124_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI124_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    xvcvdpuxds 34, 0
+; PC64LE9-NEXT:    xvcvdpuxds 34, 34
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(
-                                <2 x double><double 42.1, double 42.2>,
+                                <2 x double> %x,
                                 metadata !"fpexcept.strict") #0
   ret <2 x i64> %result
 }
 
-define <3 x i64> @constrained_vector_fptoui_v3i64_v3f64() #0 {
+define <3 x i64> @constrained_vector_fptoui_v3i64_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI125_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI125_1 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI125_2 at toc@ha
-; PC64LE-NEXT:    lfd 0, .LCPI125_0 at toc@l(3)
-; PC64LE-NEXT:    lfd 1, .LCPI125_1 at toc@l(4)
-; PC64LE-NEXT:    lfd 2, .LCPI125_2 at toc@l(5)
-; PC64LE-NEXT:    xscvdpuxds 0, 0
-; PC64LE-NEXT:    xscvdpuxds 1, 1
-; PC64LE-NEXT:    xscvdpuxds 2, 2
+; PC64LE-NEXT:    xscvdpuxds 0, 1
+; PC64LE-NEXT:    xscvdpuxds 1, 2
+; PC64LE-NEXT:    xscvdpuxds 2, 3
 ; PC64LE-NEXT:    mffprd 3, 0
 ; PC64LE-NEXT:    mffprd 4, 1
 ; PC64LE-NEXT:    mffprd 5, 2
@@ -6657,181 +6434,128 @@ define <3 x i64> @constrained_vector_fptoui_v3i64_v3f64() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI125_0 at toc@ha
-; PC64LE9-NEXT:    addis 4, 2, .LCPI125_1 at toc@ha
-; PC64LE9-NEXT:    addis 5, 2, .LCPI125_2 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI125_0 at toc@l(3)
-; PC64LE9-NEXT:    xscvdpuxds 0, 0
+; PC64LE9-NEXT:    xscvdpuxds 0, 1
 ; PC64LE9-NEXT:    mffprd 3, 0
-; PC64LE9-NEXT:    lfd 0, .LCPI125_1 at toc@l(4)
-; PC64LE9-NEXT:    xscvdpuxds 0, 0
+; PC64LE9-NEXT:    xscvdpuxds 0, 2
 ; PC64LE9-NEXT:    mffprd 4, 0
-; PC64LE9-NEXT:    lfd 0, .LCPI125_2 at toc@l(5)
-; PC64LE9-NEXT:    xscvdpuxds 0, 0
+; PC64LE9-NEXT:    xscvdpuxds 0, 3
 ; PC64LE9-NEXT:    mffprd 5, 0
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64(
-                                <3 x double><double 42.1, double 42.2,
-                                             double 42.3>,
+                                <3 x double> %x,
                                 metadata !"fpexcept.strict") #0
   ret <3 x i64> %result
 }
 
-define <4 x i64> @constrained_vector_fptoui_v4i64_v4f64() #0 {
+define <4 x i64> @constrained_vector_fptoui_v4i64_v4f64(<4 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI126_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI126_1 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI126_0 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    addi 3, 4, .LCPI126_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 1, 0, 3
-; PC64LE-NEXT:    xxswapd 0, 0
-; PC64LE-NEXT:    xxswapd 1, 1
-; PC64LE-NEXT:    xvcvdpuxds 35, 0
-; PC64LE-NEXT:    xvcvdpuxds 34, 1
+; PC64LE-NEXT:    xvcvdpuxds 35, 35
+; PC64LE-NEXT:    xvcvdpuxds 34, 34
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI126_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI126_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI126_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI126_1 at toc@l
-; PC64LE9-NEXT:    xvcvdpuxds 35, 0
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    xvcvdpuxds 34, 0
+; PC64LE9-NEXT:    xvcvdpuxds 35, 35
+; PC64LE9-NEXT:    xvcvdpuxds 34, 34
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64(
-                                <4 x double><double 42.1, double 42.2,
-                                             double 42.3, double 42.4>,
+                                <4 x double> %x,
                                 metadata !"fpexcept.strict") #0
   ret <4 x i64> %result
 }
 
-define <1 x float> @constrained_vector_fptrunc_v1f64() #0 {
+define <1 x float> @constrained_vector_fptrunc_v1f64(<1 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptrunc_v1f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI127_0 at toc@ha
-; PC64LE-NEXT:    lfd 0, .LCPI127_0 at toc@l(3)
-; PC64LE-NEXT:    xsrsp 1, 0
+; PC64LE-NEXT:    xsrsp 1, 1
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptrunc_v1f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI127_0 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI127_0 at toc@l(3)
-; PC64LE9-NEXT:    xsrsp 1, 0
+; PC64LE9-NEXT:    xsrsp 1, 1
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(
-                                <1 x double><double 42.1>,
+                                <1 x double> %x,
                                 metadata !"round.dynamic",
                                 metadata !"fpexcept.strict") #1
   ret <1 x float> %result
 }
 
-define <2 x float> @constrained_vector_fptrunc_v2f64() #0 {
+define <2 x float> @constrained_vector_fptrunc_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptrunc_v2f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI128_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI128_1 at toc@ha
-; PC64LE-NEXT:    lfd 0, .LCPI128_0 at toc@l(3)
-; PC64LE-NEXT:    lfd 1, .LCPI128_1 at toc@l(4)
+; PC64LE-NEXT:    xxswapd 0, 34
+; PC64LE-NEXT:    xsrsp 1, 34
 ; PC64LE-NEXT:    xsrsp 0, 0
-; PC64LE-NEXT:    xsrsp 1, 1
-; PC64LE-NEXT:    xscvdpspn 34, 0
-; PC64LE-NEXT:    xscvdpspn 35, 1
-; PC64LE-NEXT:    vmrghw 2, 3, 2
+; PC64LE-NEXT:    xscvdpspn 34, 1
+; PC64LE-NEXT:    xscvdpspn 35, 0
+; PC64LE-NEXT:    vmrghw 2, 2, 3
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptrunc_v2f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI128_0 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI128_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI128_1 at toc@ha
+; PC64LE9-NEXT:    xsrsp 0, 34
+; PC64LE9-NEXT:    xscvdpspn 35, 0
+; PC64LE9-NEXT:    xxswapd 0, 34
 ; PC64LE9-NEXT:    xsrsp 0, 0
 ; PC64LE9-NEXT:    xscvdpspn 34, 0
-; PC64LE9-NEXT:    lfd 0, .LCPI128_1 at toc@l(3)
-; PC64LE9-NEXT:    xsrsp 0, 0
-; PC64LE9-NEXT:    xscvdpspn 35, 0
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(
-                                <2 x double><double 42.1, double 42.2>,
+                                <2 x double> %x,
                                 metadata !"round.dynamic",
                                 metadata !"fpexcept.strict") #1
   ret <2 x float> %result
 }
 
-define <3 x float> @constrained_vector_fptrunc_v3f64() #0 {
+define <3 x float> @constrained_vector_fptrunc_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptrunc_v3f64:
 ; PC64LE:       # %bb.0: # %entry
+; PC64LE-NEXT:    xsrsp 0, 1
 ; PC64LE-NEXT:    addis 3, 2, .LCPI129_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI129_1 at toc@ha
-; PC64LE-NEXT:    lfd 0, .LCPI129_0 at toc@l(3)
-; PC64LE-NEXT:    lfd 1, .LCPI129_1 at toc@l(4)
-; PC64LE-NEXT:    addis 3, 2, .LCPI129_3 at toc@ha
-; PC64LE-NEXT:    xsrsp 0, 0
-; PC64LE-NEXT:    lfd 2, .LCPI129_3 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI129_2 at toc@ha
-; PC64LE-NEXT:    xsrsp 1, 1
-; PC64LE-NEXT:    addi 3, 3, .LCPI129_2 at toc@l
-; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    xsrsp 1, 2
+; PC64LE-NEXT:    addi 3, 3, .LCPI129_0 at toc@l
+; PC64LE-NEXT:    xsrsp 2, 3
 ; PC64LE-NEXT:    xscvdpspn 34, 0
 ; PC64LE-NEXT:    xscvdpspn 35, 1
-; PC64LE-NEXT:    xsrsp 0, 2
+; PC64LE-NEXT:    xscvdpspn 36, 2
 ; PC64LE-NEXT:    vmrghw 2, 3, 2
-; PC64LE-NEXT:    xscvdpspn 35, 0
-; PC64LE-NEXT:    vperm 2, 3, 2, 4
+; PC64LE-NEXT:    lvx 3, 0, 3
+; PC64LE-NEXT:    vperm 2, 4, 2, 3
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fptrunc_v3f64:
 ; PC64LE9:       # %bb.0: # %entry
+; PC64LE9-NEXT:    xsrsp 0, 1
 ; PC64LE9-NEXT:    addis 3, 2, .LCPI129_0 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI129_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI129_1 at toc@ha
-; PC64LE9-NEXT:    xsrsp 0, 0
+; PC64LE9-NEXT:    addi 3, 3, .LCPI129_0 at toc@l
 ; PC64LE9-NEXT:    xscvdpspn 34, 0
-; PC64LE9-NEXT:    lfd 0, .LCPI129_1 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI129_2 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI129_2 at toc@l
-; PC64LE9-NEXT:    xsrsp 0, 0
+; PC64LE9-NEXT:    xsrsp 0, 2
 ; PC64LE9-NEXT:    xscvdpspn 35, 0
+; PC64LE9-NEXT:    xsrsp 0, 3
+; PC64LE9-NEXT:    xscvdpspn 36, 0
 ; PC64LE9-NEXT:    vmrghw 2, 3, 2
 ; PC64LE9-NEXT:    lxvx 35, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI129_3 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI129_3 at toc@l(3)
-; PC64LE9-NEXT:    xsrsp 0, 0
-; PC64LE9-NEXT:    xscvdpspn 36, 0
 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(
-                                <3 x double><double 42.1, double 42.2,
-                                             double 42.3>,
+                                <3 x double> %x,
                                 metadata !"round.dynamic",
                                 metadata !"fpexcept.strict") #1
   ret <3 x float> %result
 }
 
-define <4 x float> @constrained_vector_fptrunc_v4f64() #0 {
+define <4 x float> @constrained_vector_fptrunc_v4f64(<4 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fptrunc_v4f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI130_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI130_1 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI130_2 at toc@ha
-; PC64LE-NEXT:    addis 6, 2, .LCPI130_3 at toc@ha
-; PC64LE-NEXT:    lfd 0, .LCPI130_0 at toc@l(3)
-; PC64LE-NEXT:    lfd 1, .LCPI130_1 at toc@l(4)
-; PC64LE-NEXT:    lfd 2, .LCPI130_2 at toc@l(5)
-; PC64LE-NEXT:    lfd 3, .LCPI130_3 at toc@l(6)
-; PC64LE-NEXT:    xxmrghd 0, 1, 0
-; PC64LE-NEXT:    xxmrghd 1, 3, 2
+; PC64LE-NEXT:    xxmrgld 0, 35, 34
+; PC64LE-NEXT:    xxmrghd 1, 35, 34
 ; PC64LE-NEXT:    xvcvdpsp 34, 0
 ; PC64LE-NEXT:    xvcvdpsp 35, 1
 ; PC64LE-NEXT:    vmrgew 2, 3, 2
@@ -6839,661 +6563,575 @@ define <4 x float> @constrained_vector_fptrunc_v4f64() #0 {
 ;
 ; PC64LE9-LABEL: constrained_vector_fptrunc_v4f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI130_0 at toc@ha
-; PC64LE9-NEXT:    lfd 0, .LCPI130_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI130_1 at toc@ha
-; PC64LE9-NEXT:    lfd 1, .LCPI130_1 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI130_2 at toc@ha
-; PC64LE9-NEXT:    xxmrghd 0, 1, 0
+; PC64LE9-NEXT:    xxmrgld 0, 35, 34
+; PC64LE9-NEXT:    xvcvdpsp 36, 0
+; PC64LE9-NEXT:    xxmrghd 0, 35, 34
 ; PC64LE9-NEXT:    xvcvdpsp 34, 0
-; PC64LE9-NEXT:    lfd 0, .LCPI130_2 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI130_3 at toc@ha
-; PC64LE9-NEXT:    lfd 1, .LCPI130_3 at toc@l(3)
-; PC64LE9-NEXT:    xxmrghd 0, 1, 0
-; PC64LE9-NEXT:    xvcvdpsp 35, 0
-; PC64LE9-NEXT:    vmrgew 2, 3, 2
+; PC64LE9-NEXT:    vmrgew 2, 2, 4
 ; PC64LE9-NEXT:    blr
 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>,
+                                <4 x double> %x,
                                 metadata !"round.dynamic",
                                 metadata !"fpexcept.strict") #1
   ret <4 x float> %result
 }
 
-define <1 x double> @constrained_vector_fpext_v1f32() #0 {
+define <1 x double> @constrained_vector_fpext_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fpext_v1f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI131_0 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI131_0 at toc@l(3)
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fpext_v1f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI131_0 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI131_0 at toc@l(3)
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(
-                                <1 x float><float 42.0>,
+                                <1 x float> %x,
                                 metadata !"fpexcept.strict") #1
   ret <1 x double> %result
 }
 
-define <2 x double> @constrained_vector_fpext_v2f32() #0 {
+define <2 x double> @constrained_vector_fpext_v2f32(<2 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fpext_v2f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI132_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI132_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI132_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI132_1 at toc@l(4)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xxswapd 1, 34
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
 ; PC64LE-NEXT:    xxmrghd 34, 1, 0
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fpext_v2f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI132_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI132_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI132_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI132_1 at toc@l(3)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE9-NEXT:    xxswapd 1, 34
+; PC64LE9-NEXT:    xscvspdpn 0, 0
+; PC64LE9-NEXT:    xscvspdpn 1, 1
 ; PC64LE9-NEXT:    xxmrghd 34, 1, 0
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(
-                                <2 x float><float 42.0, float 43.0>,
+                                <2 x float> %x,
                                 metadata !"fpexcept.strict") #1
   ret <2 x double> %result
 }
 
-define <3 x double> @constrained_vector_fpext_v3f32() #0 {
+define <3 x double> @constrained_vector_fpext_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fpext_v3f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI133_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI133_1 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI133_2 at toc@ha
-; PC64LE-NEXT:    lfs 3, .LCPI133_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 2, .LCPI133_1 at toc@l(4)
-; PC64LE-NEXT:    lfs 1, .LCPI133_2 at toc@l(5)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE-NEXT:    xxswapd 1, 34
+; PC64LE-NEXT:    xxsldwi 4, 34, 34, 3
+; PC64LE-NEXT:    xscvspdpn 3, 0
+; PC64LE-NEXT:    xscvspdpn 2, 1
+; PC64LE-NEXT:    xscvspdpn 1, 4
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fpext_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI133_0 at toc@ha
-; PC64LE9-NEXT:    lfs 3, .LCPI133_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI133_1 at toc@ha
-; PC64LE9-NEXT:    lfs 2, .LCPI133_1 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI133_2 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI133_2 at toc@l(3)
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    xscvspdpn 3, 0
+; PC64LE9-NEXT:    xxswapd 0, 34
+; PC64LE9-NEXT:    xscvspdpn 2, 0
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE9-NEXT:    xscvspdpn 1, 0
 ; PC64LE9-NEXT:    blr
 entry:
   %result = call <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(
-                                <3 x float><float 42.0, float 43.0,
-                                            float 44.0>,
+                                <3 x float> %x,
                                 metadata !"fpexcept.strict") #1
   ret <3 x double> %result
 }
 
-define <4 x double> @constrained_vector_fpext_v4f32() #0 {
+define <4 x double> @constrained_vector_fpext_v4f32(<4 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_fpext_v4f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI134_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI134_1 at toc@ha
-; PC64LE-NEXT:    addis 5, 2, .LCPI134_2 at toc@ha
-; PC64LE-NEXT:    addis 6, 2, .LCPI134_3 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI134_0 at toc@l(3)
-; PC64LE-NEXT:    lfs 1, .LCPI134_1 at toc@l(4)
-; PC64LE-NEXT:    lfs 2, .LCPI134_2 at toc@l(5)
-; PC64LE-NEXT:    lfs 3, .LCPI134_3 at toc@l(6)
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xxswapd 1, 34
+; PC64LE-NEXT:    xxsldwi 3, 34, 34, 1
+; PC64LE-NEXT:    xscvspdpn 2, 34
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvspdpn 3, 3
 ; PC64LE-NEXT:    xxmrghd 34, 1, 0
-; PC64LE-NEXT:    xxmrghd 35, 3, 2
+; PC64LE-NEXT:    xxmrghd 35, 2, 3
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_fpext_v4f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI134_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI134_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI134_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI134_1 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI134_2 at toc@ha
-; PC64LE9-NEXT:    xxmrghd 34, 1, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI134_2 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI134_3 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI134_3 at toc@l(3)
-; PC64LE9-NEXT:    xxmrghd 35, 1, 0
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE9-NEXT:    xxswapd 1, 34
+; PC64LE9-NEXT:    xscvspdpn 0, 0
+; PC64LE9-NEXT:    xscvspdpn 1, 1
+; PC64LE9-NEXT:    xxsldwi 2, 34, 34, 1
+; PC64LE9-NEXT:    xscvspdpn 2, 2
+; PC64LE9-NEXT:    xxmrghd 0, 1, 0
+; PC64LE9-NEXT:    xscvspdpn 1, 34
+; PC64LE9-NEXT:    xxmrghd 35, 1, 2
+; PC64LE9-NEXT:    xxlor 34, 0, 0
 ; PC64LE9-NEXT:    blr
 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>,
+                                <4 x float> %x,
                                 metadata !"fpexcept.strict") #1
   ret <4 x double> %result
 }
 
-define <1 x float> @constrained_vector_ceil_v1f32() #0 {
+define <1 x float> @constrained_vector_ceil_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_ceil_v1f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI135_0 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI135_0 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI135_1 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI135_1 at toc@l(3)
-; PC64LE-NEXT:    xsrdpip 0, 0
+; PC64LE-NEXT:    xsrdpip 1, 1
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_ceil_v1f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI135_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI135_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI135_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI135_1 at toc@l(3)
-; PC64LE9-NEXT:    xsrdpip 0, 0
+; PC64LE9-NEXT:    xsrdpip 1, 1
 ; PC64LE9-NEXT:    blr
 entry:
   %ceil = call <1 x float> @llvm.experimental.constrained.ceil.v1f32(
-                               <1 x float> <float 1.5>,
+                               <1 x float> %x,
                                metadata !"fpexcept.strict") #1
   ret <1 x float> %ceil
 }
 
-define <2 x double> @constrained_vector_ceil_v2f64() #0 {
+define <2 x double> @constrained_vector_ceil_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_ceil_v2f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI136_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI136_1 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI136_0 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    addi 3, 4, .LCPI136_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 1, 0, 3
-; PC64LE-NEXT:    xvrdpip 0, 0
-; PC64LE-NEXT:    xxswapd 34, 1
+; PC64LE-NEXT:    xvrdpip 34, 34
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_ceil_v2f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI136_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI136_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI136_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI136_1 at toc@l
-; PC64LE9-NEXT:    lxvx 34, 0, 3
-; PC64LE9-NEXT:    xvrdpip 0, 0
+; PC64LE9-NEXT:    xvrdpip 34, 34
 ; PC64LE9-NEXT:    blr
 entry:
   %ceil = call <2 x double> @llvm.experimental.constrained.ceil.v2f64(
-                                <2 x double> <double 1.1, double 1.9>,
+                                <2 x double> %x,
                                 metadata !"fpexcept.strict") #1
   ret <2 x double> %ceil
 }
 
-define <3 x float> @constrained_vector_ceil_v3f32() #0 {
+define <3 x float> @constrained_vector_ceil_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_ceil_v3f32:
 ; PC64LE:       # %bb.0: # %entry
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xxswapd 1, 34
 ; PC64LE-NEXT:    addis 3, 2, .LCPI137_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI137_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI137_0 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI137_2 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI137_1 at toc@l(4)
-; PC64LE-NEXT:    lfs 2, .LCPI137_2 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI137_3 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI137_3 at toc@l
+; PC64LE-NEXT:    xxsldwi 2, 34, 34, 1
+; PC64LE-NEXT:    addi 3, 3, .LCPI137_0 at toc@l
+; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    xsrdpip 0, 0
-; PC64LE-NEXT:    lvx 2, 0, 3
-; PC64LE-NEXT:    xsrdpip 0, 1
+; PC64LE-NEXT:    xsrdpip 1, 1
+; PC64LE-NEXT:    xscvdpspn 34, 0
+; PC64LE-NEXT:    xscvdpspn 35, 1
 ; PC64LE-NEXT:    xsrdpip 0, 2
+; PC64LE-NEXT:    vmrghw 2, 3, 2
+; PC64LE-NEXT:    xscvdpspn 35, 0
+; PC64LE-NEXT:    vperm 2, 3, 2, 4
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_ceil_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
+; PC64LE9-NEXT:    xxswapd 1, 34
+; PC64LE9-NEXT:    xxsldwi 2, 34, 34, 3
 ; PC64LE9-NEXT:    addis 3, 2, .LCPI137_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI137_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI137_1 at toc@ha
-; PC64LE9-NEXT:    xsrdpip 0, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI137_1 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI137_2 at toc@ha
-; PC64LE9-NEXT:    xsrdpip 0, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI137_2 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI137_3 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI137_3 at toc@l
-; PC64LE9-NEXT:    lxvx 34, 0, 3
+; PC64LE9-NEXT:    addi 3, 3, .LCPI137_0 at toc@l
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    xscvspdpn 1, 1
+; PC64LE9-NEXT:    xscvspdpn 2, 2
+; PC64LE9-NEXT:    xscvspdpn 0, 0
+; PC64LE9-NEXT:    xsrdpip 1, 1
+; PC64LE9-NEXT:    xsrdpip 2, 2
 ; PC64LE9-NEXT:    xsrdpip 0, 0
+; PC64LE9-NEXT:    xscvdpspn 34, 2
+; PC64LE9-NEXT:    xscvdpspn 35, 1
+; PC64LE9-NEXT:    xscvdpspn 36, 0
+; PC64LE9-NEXT:    vmrghw 2, 3, 2
+; PC64LE9-NEXT:    lxvx 35, 0, 3
+; PC64LE9-NEXT:    vperm 2, 4, 2, 3
 ; PC64LE9-NEXT:    blr
 entry:
   %ceil = call <3 x float> @llvm.experimental.constrained.ceil.v3f32(
-                              <3 x float> <float 1.5, float 2.5, float 3.5>,
+                              <3 x float> %x,
                               metadata !"fpexcept.strict") #1
   ret <3 x float> %ceil
 }
 
-define <3 x double> @constrained_vector_ceil_v3f64() #0 {
+define <3 x double> @constrained_vector_ceil_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_ceil_v3f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI138_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI138_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI138_0 at toc@l(3)
-; PC64LE-NEXT:    addi 3, 4, .LCPI138_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 1, 0, 3
-; PC64LE-NEXT:    addis 3, 2, .LCPI138_2 at toc@ha
-; PC64LE-NEXT:    xsrdpip 0, 0
-; PC64LE-NEXT:    xvrdpip 0, 1
-; PC64LE-NEXT:    lfs 1, .LCPI138_2 at toc@l(3)
-; PC64LE-NEXT:    fmr 2, 1
-; PC64LE-NEXT:    fmr 3, 1
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE-NEXT:    xxmrghd 0, 2, 1
+; PC64LE-NEXT:    xsrdpip 3, 3
+; PC64LE-NEXT:    xvrdpip 2, 0
+; PC64LE-NEXT:    xxswapd 1, 2
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_ceil_v3f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI138_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI138_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI138_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI138_1 at toc@l
-; PC64LE9-NEXT:    xsrdpip 0, 0
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI138_2 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI138_2 at toc@l(3)
-; PC64LE9-NEXT:    xvrdpip 0, 0
-; PC64LE9-NEXT:    fmr 2, 1
-; PC64LE9-NEXT:    fmr 3, 1
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE9-NEXT:    xxmrghd 0, 2, 1
+; PC64LE9-NEXT:    xsrdpip 3, 3
+; PC64LE9-NEXT:    xvrdpip 2, 0
+; PC64LE9-NEXT:    xxswapd 1, 2
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE9-NEXT:    blr
 entry:
   %ceil = call <3 x double> @llvm.experimental.constrained.ceil.v3f64(
-                          <3 x double> <double 1.1, double 1.9, double 1.5>,
+                          <3 x double> %x,
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %ceil
 }
 
-define <1 x float> @constrained_vector_floor_v1f32() #0 {
+define <1 x float> @constrained_vector_floor_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_floor_v1f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI139_0 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI139_0 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI139_1 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI139_1 at toc@l(3)
-; PC64LE-NEXT:    xsrdpim 0, 0
+; PC64LE-NEXT:    xsrdpim 1, 1
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_floor_v1f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI139_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI139_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI139_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI139_1 at toc@l(3)
-; PC64LE9-NEXT:    xsrdpim 0, 0
+; PC64LE9-NEXT:    xsrdpim 1, 1
 ; PC64LE9-NEXT:    blr
 entry:
   %floor = call <1 x float> @llvm.experimental.constrained.floor.v1f32(
-                               <1 x float> <float 1.5>,
+                               <1 x float> %x,
                                metadata !"fpexcept.strict") #1
   ret <1 x float> %floor
 }
 
 
-define <2 x double> @constrained_vector_floor_v2f64() #0 {
+define <2 x double> @constrained_vector_floor_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_floor_v2f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI140_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI140_1 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI140_0 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    addi 3, 4, .LCPI140_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 1, 0, 3
-; PC64LE-NEXT:    xvrdpim 0, 0
-; PC64LE-NEXT:    xxswapd 34, 1
+; PC64LE-NEXT:    xvrdpim 34, 34
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_floor_v2f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI140_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI140_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI140_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI140_1 at toc@l
-; PC64LE9-NEXT:    lxvx 34, 0, 3
-; PC64LE9-NEXT:    xvrdpim 0, 0
+; PC64LE9-NEXT:    xvrdpim 34, 34
 ; PC64LE9-NEXT:    blr
 entry:
   %floor = call <2 x double> @llvm.experimental.constrained.floor.v2f64(
-                                <2 x double> <double 1.1, double 1.9>,
+                                <2 x double> %x,
                                 metadata !"fpexcept.strict") #1
   ret <2 x double> %floor
 }
 
-define <3 x float> @constrained_vector_floor_v3f32() #0 {
+define <3 x float> @constrained_vector_floor_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_floor_v3f32:
 ; PC64LE:       # %bb.0: # %entry
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xxswapd 1, 34
 ; PC64LE-NEXT:    addis 3, 2, .LCPI141_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI141_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI141_0 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI141_2 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI141_1 at toc@l(4)
-; PC64LE-NEXT:    lfs 2, .LCPI141_2 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI141_3 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI141_3 at toc@l
+; PC64LE-NEXT:    xxsldwi 2, 34, 34, 1
+; PC64LE-NEXT:    addi 3, 3, .LCPI141_0 at toc@l
+; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    xsrdpim 0, 0
-; PC64LE-NEXT:    lvx 2, 0, 3
-; PC64LE-NEXT:    xsrdpim 0, 1
+; PC64LE-NEXT:    xsrdpim 1, 1
+; PC64LE-NEXT:    xscvdpspn 34, 0
+; PC64LE-NEXT:    xscvdpspn 35, 1
 ; PC64LE-NEXT:    xsrdpim 0, 2
+; PC64LE-NEXT:    vmrghw 2, 3, 2
+; PC64LE-NEXT:    xscvdpspn 35, 0
+; PC64LE-NEXT:    vperm 2, 3, 2, 4
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_floor_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
+; PC64LE9-NEXT:    xxswapd 1, 34
+; PC64LE9-NEXT:    xxsldwi 2, 34, 34, 3
 ; PC64LE9-NEXT:    addis 3, 2, .LCPI141_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI141_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI141_1 at toc@ha
-; PC64LE9-NEXT:    xsrdpim 0, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI141_1 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI141_2 at toc@ha
-; PC64LE9-NEXT:    xsrdpim 0, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI141_2 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI141_3 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI141_3 at toc@l
-; PC64LE9-NEXT:    lxvx 34, 0, 3
+; PC64LE9-NEXT:    addi 3, 3, .LCPI141_0 at toc@l
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    xscvspdpn 1, 1
+; PC64LE9-NEXT:    xscvspdpn 2, 2
+; PC64LE9-NEXT:    xscvspdpn 0, 0
+; PC64LE9-NEXT:    xsrdpim 1, 1
+; PC64LE9-NEXT:    xsrdpim 2, 2
 ; PC64LE9-NEXT:    xsrdpim 0, 0
+; PC64LE9-NEXT:    xscvdpspn 34, 2
+; PC64LE9-NEXT:    xscvdpspn 35, 1
+; PC64LE9-NEXT:    xscvdpspn 36, 0
+; PC64LE9-NEXT:    vmrghw 2, 3, 2
+; PC64LE9-NEXT:    lxvx 35, 0, 3
+; PC64LE9-NEXT:    vperm 2, 4, 2, 3
 ; PC64LE9-NEXT:    blr
 entry:
   %floor = call <3 x float> @llvm.experimental.constrained.floor.v3f32(
-                              <3 x float> <float 1.5, float 2.5, float 3.5>,
+                              <3 x float> %x,
                               metadata !"fpexcept.strict") #1
   ret <3 x float> %floor
 }
 
-define <3 x double> @constrained_vector_floor_v3f64() #0 {
+define <3 x double> @constrained_vector_floor_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_floor_v3f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI142_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI142_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI142_0 at toc@l(3)
-; PC64LE-NEXT:    addi 3, 4, .LCPI142_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 1, 0, 3
-; PC64LE-NEXT:    addis 3, 2, .LCPI142_2 at toc@ha
-; PC64LE-NEXT:    xsrdpim 0, 0
-; PC64LE-NEXT:    xvrdpim 0, 1
-; PC64LE-NEXT:    lfs 1, .LCPI142_2 at toc@l(3)
-; PC64LE-NEXT:    fmr 2, 1
-; PC64LE-NEXT:    fmr 3, 1
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE-NEXT:    xxmrghd 0, 2, 1
+; PC64LE-NEXT:    xsrdpim 3, 3
+; PC64LE-NEXT:    xvrdpim 2, 0
+; PC64LE-NEXT:    xxswapd 1, 2
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_floor_v3f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI142_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI142_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI142_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI142_1 at toc@l
-; PC64LE9-NEXT:    xsrdpim 0, 0
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI142_2 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI142_2 at toc@l(3)
-; PC64LE9-NEXT:    xvrdpim 0, 0
-; PC64LE9-NEXT:    fmr 2, 1
-; PC64LE9-NEXT:    fmr 3, 1
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE9-NEXT:    xxmrghd 0, 2, 1
+; PC64LE9-NEXT:    xsrdpim 3, 3
+; PC64LE9-NEXT:    xvrdpim 2, 0
+; PC64LE9-NEXT:    xxswapd 1, 2
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE9-NEXT:    blr
 entry:
   %floor = call <3 x double> @llvm.experimental.constrained.floor.v3f64(
-                          <3 x double> <double 1.1, double 1.9, double 1.5>,
+                          <3 x double> %x,
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %floor
 }
 
-define <1 x float> @constrained_vector_round_v1f32() #0 {
+define <1 x float> @constrained_vector_round_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_round_v1f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI143_0 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI143_0 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI143_1 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI143_1 at toc@l(3)
-; PC64LE-NEXT:    xsrdpi 0, 0
+; PC64LE-NEXT:    xsrdpi 1, 1
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_round_v1f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI143_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI143_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI143_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI143_1 at toc@l(3)
-; PC64LE9-NEXT:    xsrdpi 0, 0
+; PC64LE9-NEXT:    xsrdpi 1, 1
 ; PC64LE9-NEXT:    blr
 entry:
   %round = call <1 x float> @llvm.experimental.constrained.round.v1f32(
-                               <1 x float> <float 1.5>,
+                               <1 x float> %x,
                                metadata !"fpexcept.strict") #1
   ret <1 x float> %round
 }
 
-define <2 x double> @constrained_vector_round_v2f64() #0 {
+define <2 x double> @constrained_vector_round_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_round_v2f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI144_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI144_1 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI144_0 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    addi 3, 4, .LCPI144_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 1, 0, 3
-; PC64LE-NEXT:    xvrdpi 0, 0
-; PC64LE-NEXT:    xxswapd 34, 1
+; PC64LE-NEXT:    xvrdpi 34, 34
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_round_v2f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI144_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI144_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI144_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI144_1 at toc@l
-; PC64LE9-NEXT:    lxvx 34, 0, 3
-; PC64LE9-NEXT:    xvrdpi 0, 0
+; PC64LE9-NEXT:    xvrdpi 34, 34
 ; PC64LE9-NEXT:    blr
 entry:
   %round = call <2 x double> @llvm.experimental.constrained.round.v2f64(
-                                <2 x double> <double 1.1, double 1.9>,
+                                <2 x double> %x,
                                 metadata !"fpexcept.strict") #1
   ret <2 x double> %round
 }
 
-define <3 x float> @constrained_vector_round_v3f32() #0 {
+define <3 x float> @constrained_vector_round_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_round_v3f32:
 ; PC64LE:       # %bb.0: # %entry
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xxswapd 1, 34
 ; PC64LE-NEXT:    addis 3, 2, .LCPI145_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI145_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI145_0 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI145_2 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI145_1 at toc@l(4)
-; PC64LE-NEXT:    lfs 2, .LCPI145_2 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI145_3 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI145_3 at toc@l
+; PC64LE-NEXT:    xxsldwi 2, 34, 34, 1
+; PC64LE-NEXT:    addi 3, 3, .LCPI145_0 at toc@l
+; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    xsrdpi 0, 0
-; PC64LE-NEXT:    lvx 2, 0, 3
-; PC64LE-NEXT:    xsrdpi 0, 1
+; PC64LE-NEXT:    xsrdpi 1, 1
+; PC64LE-NEXT:    xscvdpspn 34, 0
+; PC64LE-NEXT:    xscvdpspn 35, 1
 ; PC64LE-NEXT:    xsrdpi 0, 2
+; PC64LE-NEXT:    vmrghw 2, 3, 2
+; PC64LE-NEXT:    xscvdpspn 35, 0
+; PC64LE-NEXT:    vperm 2, 3, 2, 4
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_round_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
+; PC64LE9-NEXT:    xxswapd 1, 34
+; PC64LE9-NEXT:    xxsldwi 2, 34, 34, 3
 ; PC64LE9-NEXT:    addis 3, 2, .LCPI145_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI145_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI145_1 at toc@ha
-; PC64LE9-NEXT:    xsrdpi 0, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI145_1 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI145_2 at toc@ha
-; PC64LE9-NEXT:    xsrdpi 0, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI145_2 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI145_3 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI145_3 at toc@l
-; PC64LE9-NEXT:    lxvx 34, 0, 3
+; PC64LE9-NEXT:    addi 3, 3, .LCPI145_0 at toc@l
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    xscvspdpn 1, 1
+; PC64LE9-NEXT:    xscvspdpn 2, 2
+; PC64LE9-NEXT:    xscvspdpn 0, 0
+; PC64LE9-NEXT:    xsrdpi 1, 1
+; PC64LE9-NEXT:    xsrdpi 2, 2
 ; PC64LE9-NEXT:    xsrdpi 0, 0
+; PC64LE9-NEXT:    xscvdpspn 34, 2
+; PC64LE9-NEXT:    xscvdpspn 35, 1
+; PC64LE9-NEXT:    xscvdpspn 36, 0
+; PC64LE9-NEXT:    vmrghw 2, 3, 2
+; PC64LE9-NEXT:    lxvx 35, 0, 3
+; PC64LE9-NEXT:    vperm 2, 4, 2, 3
 ; PC64LE9-NEXT:    blr
 entry:
   %round = call <3 x float> @llvm.experimental.constrained.round.v3f32(
-                              <3 x float> <float 1.5, float 2.5, float 3.5>,
+                              <3 x float> %x,
                               metadata !"fpexcept.strict") #1
   ret <3 x float> %round
 }
 
 
-define <3 x double> @constrained_vector_round_v3f64() #0 {
+define <3 x double> @constrained_vector_round_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_round_v3f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 4, 2, .LCPI146_1 at toc@ha
-; PC64LE-NEXT:    addis 3, 2, .LCPI146_0 at toc@ha
-; PC64LE-NEXT:    addi 4, 4, .LCPI146_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 1, 0, 4
-; PC64LE-NEXT:    addis 4, 2, .LCPI146_3 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI146_0 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI146_2 at toc@ha
-; PC64LE-NEXT:    lfs 2, .LCPI146_3 at toc@l(4)
-; PC64LE-NEXT:    xsrdpi 0, 0
-; PC64LE-NEXT:    xvrdpi 0, 1
-; PC64LE-NEXT:    lfs 1, .LCPI146_2 at toc@l(3)
-; PC64LE-NEXT:    fmr 3, 2
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE-NEXT:    xxmrghd 0, 2, 1
+; PC64LE-NEXT:    xsrdpi 3, 3
+; PC64LE-NEXT:    xvrdpi 2, 0
+; PC64LE-NEXT:    xxswapd 1, 2
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_round_v3f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI146_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI146_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI146_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI146_1 at toc@l
-; PC64LE9-NEXT:    xsrdpi 0, 0
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI146_2 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI146_2 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI146_3 at toc@ha
-; PC64LE9-NEXT:    lfs 2, .LCPI146_3 at toc@l(3)
-; PC64LE9-NEXT:    xvrdpi 0, 0
-; PC64LE9-NEXT:    fmr 3, 2
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE9-NEXT:    xxmrghd 0, 2, 1
+; PC64LE9-NEXT:    xsrdpi 3, 3
+; PC64LE9-NEXT:    xvrdpi 2, 0
+; PC64LE9-NEXT:    xxswapd 1, 2
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE9-NEXT:    blr
 entry:
   %round = call <3 x double> @llvm.experimental.constrained.round.v3f64(
-                          <3 x double> <double 1.1, double 1.9, double 1.5>,
+                          <3 x double> %x,
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %round
 }
 
-define <1 x float> @constrained_vector_trunc_v1f32() #0 {
+define <1 x float> @constrained_vector_trunc_v1f32(<1 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_trunc_v1f32:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI147_0 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI147_0 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI147_1 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI147_1 at toc@l(3)
-; PC64LE-NEXT:    xsrdpiz 0, 0
+; PC64LE-NEXT:    xsrdpiz 1, 1
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_trunc_v1f32:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI147_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI147_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI147_1 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI147_1 at toc@l(3)
-; PC64LE9-NEXT:    xsrdpiz 0, 0
+; PC64LE9-NEXT:    xsrdpiz 1, 1
 ; PC64LE9-NEXT:    blr
 entry:
   %trunc = call <1 x float> @llvm.experimental.constrained.trunc.v1f32(
-                               <1 x float> <float 1.5>,
+                               <1 x float> %x,
                                metadata !"fpexcept.strict") #1
   ret <1 x float> %trunc
 }
 
-define <2 x double> @constrained_vector_trunc_v2f64() #0 {
+define <2 x double> @constrained_vector_trunc_v2f64(<2 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_trunc_v2f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI148_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI148_1 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI148_0 at toc@l
-; PC64LE-NEXT:    lxvd2x 0, 0, 3
-; PC64LE-NEXT:    addi 3, 4, .LCPI148_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 1, 0, 3
-; PC64LE-NEXT:    xvrdpiz 0, 0
-; PC64LE-NEXT:    xxswapd 34, 1
+; PC64LE-NEXT:    xvrdpiz 34, 34
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_trunc_v2f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI148_0 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI148_0 at toc@l
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI148_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI148_1 at toc@l
-; PC64LE9-NEXT:    lxvx 34, 0, 3
-; PC64LE9-NEXT:    xvrdpiz 0, 0
+; PC64LE9-NEXT:    xvrdpiz 34, 34
 ; PC64LE9-NEXT:    blr
 entry:
   %trunc = call <2 x double> @llvm.experimental.constrained.trunc.v2f64(
-                                <2 x double> <double 1.1, double 1.9>,
+                                <2 x double> %x,
                                 metadata !"fpexcept.strict") #1
   ret <2 x double> %trunc
 }
 
-define <3 x float> @constrained_vector_trunc_v3f32() #0 {
+define <3 x float> @constrained_vector_trunc_v3f32(<3 x float> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_trunc_v3f32:
 ; PC64LE:       # %bb.0: # %entry
+; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
+; PC64LE-NEXT:    xxswapd 1, 34
 ; PC64LE-NEXT:    addis 3, 2, .LCPI149_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI149_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI149_0 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI149_2 at toc@ha
-; PC64LE-NEXT:    lfs 1, .LCPI149_1 at toc@l(4)
-; PC64LE-NEXT:    lfs 2, .LCPI149_2 at toc@l(3)
-; PC64LE-NEXT:    addis 3, 2, .LCPI149_3 at toc@ha
-; PC64LE-NEXT:    addi 3, 3, .LCPI149_3 at toc@l
+; PC64LE-NEXT:    xxsldwi 2, 34, 34, 1
+; PC64LE-NEXT:    addi 3, 3, .LCPI149_0 at toc@l
+; PC64LE-NEXT:    lvx 4, 0, 3
+; PC64LE-NEXT:    xscvspdpn 0, 0
+; PC64LE-NEXT:    xscvspdpn 1, 1
+; PC64LE-NEXT:    xscvspdpn 2, 2
 ; PC64LE-NEXT:    xsrdpiz 0, 0
-; PC64LE-NEXT:    lvx 2, 0, 3
-; PC64LE-NEXT:    xsrdpiz 0, 1
+; PC64LE-NEXT:    xsrdpiz 1, 1
+; PC64LE-NEXT:    xscvdpspn 34, 0
+; PC64LE-NEXT:    xscvdpspn 35, 1
 ; PC64LE-NEXT:    xsrdpiz 0, 2
+; PC64LE-NEXT:    vmrghw 2, 3, 2
+; PC64LE-NEXT:    xscvdpspn 35, 0
+; PC64LE-NEXT:    vperm 2, 3, 2, 4
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_trunc_v3f32:
 ; PC64LE9:       # %bb.0: # %entry
+; PC64LE9-NEXT:    xxswapd 1, 34
+; PC64LE9-NEXT:    xxsldwi 2, 34, 34, 3
 ; PC64LE9-NEXT:    addis 3, 2, .LCPI149_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI149_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI149_1 at toc@ha
-; PC64LE9-NEXT:    xsrdpiz 0, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI149_1 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI149_2 at toc@ha
-; PC64LE9-NEXT:    xsrdpiz 0, 0
-; PC64LE9-NEXT:    lfs 0, .LCPI149_2 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI149_3 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI149_3 at toc@l
-; PC64LE9-NEXT:    lxvx 34, 0, 3
+; PC64LE9-NEXT:    addi 3, 3, .LCPI149_0 at toc@l
+; PC64LE9-NEXT:    xxsldwi 0, 34, 34, 1
+; PC64LE9-NEXT:    xscvspdpn 1, 1
+; PC64LE9-NEXT:    xscvspdpn 2, 2
+; PC64LE9-NEXT:    xscvspdpn 0, 0
+; PC64LE9-NEXT:    xsrdpiz 1, 1
+; PC64LE9-NEXT:    xsrdpiz 2, 2
 ; PC64LE9-NEXT:    xsrdpiz 0, 0
+; PC64LE9-NEXT:    xscvdpspn 34, 2
+; PC64LE9-NEXT:    xscvdpspn 35, 1
+; PC64LE9-NEXT:    xscvdpspn 36, 0
+; PC64LE9-NEXT:    vmrghw 2, 3, 2
+; PC64LE9-NEXT:    lxvx 35, 0, 3
+; PC64LE9-NEXT:    vperm 2, 4, 2, 3
 ; PC64LE9-NEXT:    blr
 entry:
   %trunc = call <3 x float> @llvm.experimental.constrained.trunc.v3f32(
-                              <3 x float> <float 1.5, float 2.5, float 3.5>,
+                              <3 x float> %x,
                               metadata !"fpexcept.strict") #1
   ret <3 x float> %trunc
 }
 
-define <3 x double> @constrained_vector_trunc_v3f64() #0 {
+define <3 x double> @constrained_vector_trunc_v3f64(<3 x double> %x) #0 {
 ; PC64LE-LABEL: constrained_vector_trunc_v3f64:
 ; PC64LE:       # %bb.0: # %entry
-; PC64LE-NEXT:    addis 3, 2, .LCPI150_0 at toc@ha
-; PC64LE-NEXT:    addis 4, 2, .LCPI150_1 at toc@ha
-; PC64LE-NEXT:    lfs 0, .LCPI150_0 at toc@l(3)
-; PC64LE-NEXT:    addi 3, 4, .LCPI150_1 at toc@l
-; PC64LE-NEXT:    lxvd2x 1, 0, 3
-; PC64LE-NEXT:    addis 3, 2, .LCPI150_2 at toc@ha
-; PC64LE-NEXT:    xsrdpiz 0, 0
-; PC64LE-NEXT:    xvrdpiz 0, 1
-; PC64LE-NEXT:    lfs 1, .LCPI150_2 at toc@l(3)
-; PC64LE-NEXT:    fmr 2, 1
-; PC64LE-NEXT:    fmr 3, 1
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE-NEXT:    xxmrghd 0, 2, 1
+; PC64LE-NEXT:    xsrdpiz 3, 3
+; PC64LE-NEXT:    xvrdpiz 2, 0
+; PC64LE-NEXT:    xxswapd 1, 2
+; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
+; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
 ; PC64LE-NEXT:    blr
 ;
 ; PC64LE9-LABEL: constrained_vector_trunc_v3f64:
 ; PC64LE9:       # %bb.0: # %entry
-; PC64LE9-NEXT:    addis 3, 2, .LCPI150_0 at toc@ha
-; PC64LE9-NEXT:    lfs 0, .LCPI150_0 at toc@l(3)
-; PC64LE9-NEXT:    addis 3, 2, .LCPI150_1 at toc@ha
-; PC64LE9-NEXT:    addi 3, 3, .LCPI150_1 at toc@l
-; PC64LE9-NEXT:    xsrdpiz 0, 0
-; PC64LE9-NEXT:    lxvx 0, 0, 3
-; PC64LE9-NEXT:    addis 3, 2, .LCPI150_2 at toc@ha
-; PC64LE9-NEXT:    lfs 1, .LCPI150_2 at toc@l(3)
-; PC64LE9-NEXT:    xvrdpiz 0, 0
-; PC64LE9-NEXT:    fmr 2, 1
-; PC64LE9-NEXT:    fmr 3, 1
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 def $vsl2
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
+; PC64LE9-NEXT:    xxmrghd 0, 2, 1
+; PC64LE9-NEXT:    xsrdpiz 3, 3
+; PC64LE9-NEXT:    xvrdpiz 2, 0
+; PC64LE9-NEXT:    xxswapd 1, 2
+; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
+; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
 ; PC64LE9-NEXT:    blr
 entry:
   %trunc = call <3 x double> @llvm.experimental.constrained.trunc.v3f64(
-                          <3 x double> <double 1.1, double 1.9, double 1.5>,
+                          <3 x double> %x,
                           metadata !"fpexcept.strict") #1
   ret <3 x double> %trunc
 }


        


More information about the llvm-commits mailing list