1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -O3 -mtriple=powerpc64le-linux-gnu < %s | FileCheck --check-prefix=PC64LE %s 3; RUN: llc -O3 -mtriple=powerpc64le-linux-gnu -mcpu=pwr9 < %s | FileCheck --check-prefix=PC64LE9 %s 4 5define <1 x float> @constrained_vector_fdiv_v1f32() #0 { 6; PC64LE-LABEL: constrained_vector_fdiv_v1f32: 7; PC64LE: # %bb.0: # %entry 8; PC64LE-NEXT: addis 3, 2, .LCPI0_0@toc@ha 9; PC64LE-NEXT: addis 4, 2, .LCPI0_1@toc@ha 10; PC64LE-NEXT: lfs 0, .LCPI0_0@toc@l(3) 11; PC64LE-NEXT: lfs 1, .LCPI0_1@toc@l(4) 12; PC64LE-NEXT: xsdivsp 1, 1, 0 13; PC64LE-NEXT: blr 14; 15; PC64LE9-LABEL: constrained_vector_fdiv_v1f32: 16; PC64LE9: # %bb.0: # %entry 17; PC64LE9-NEXT: addis 3, 2, .LCPI0_0@toc@ha 18; PC64LE9-NEXT: lfs 0, .LCPI0_0@toc@l(3) 19; PC64LE9-NEXT: addis 3, 2, .LCPI0_1@toc@ha 20; PC64LE9-NEXT: lfs 1, .LCPI0_1@toc@l(3) 21; PC64LE9-NEXT: xsdivsp 1, 1, 0 22; PC64LE9-NEXT: blr 23entry: 24 %div = call <1 x float> @llvm.experimental.constrained.fdiv.v1f32( 25 <1 x float> <float 1.000000e+00>, 26 <1 x float> <float 1.000000e+01>, 27 metadata !"round.dynamic", 28 metadata !"fpexcept.strict") #1 29 ret <1 x float> %div 30} 31 32define <2 x double> @constrained_vector_fdiv_v2f64() #0 { 33; PC64LE-LABEL: constrained_vector_fdiv_v2f64: 34; PC64LE: # %bb.0: # %entry 35; PC64LE-NEXT: addis 3, 2, .LCPI1_0@toc@ha 36; PC64LE-NEXT: addis 4, 2, .LCPI1_1@toc@ha 37; PC64LE-NEXT: addi 3, 3, .LCPI1_0@toc@l 38; PC64LE-NEXT: addi 4, 4, .LCPI1_1@toc@l 39; PC64LE-NEXT: lxvd2x 0, 0, 3 40; PC64LE-NEXT: lxvd2x 1, 0, 4 41; PC64LE-NEXT: xxswapd 0, 0 42; PC64LE-NEXT: xxswapd 1, 1 43; PC64LE-NEXT: xvdivdp 34, 1, 0 44; PC64LE-NEXT: blr 45; 46; PC64LE9-LABEL: constrained_vector_fdiv_v2f64: 47; PC64LE9: # %bb.0: # %entry 48; PC64LE9-NEXT: addis 3, 2, .LCPI1_0@toc@ha 49; PC64LE9-NEXT: addi 3, 3, .LCPI1_0@toc@l 50; PC64LE9-NEXT: lxvx 0, 0, 3 51; PC64LE9-NEXT: addis 3, 2, .LCPI1_1@toc@ha 52; PC64LE9-NEXT: addi 3, 3, .LCPI1_1@toc@l 53; PC64LE9-NEXT: lxvx 1, 0, 3 54; PC64LE9-NEXT: xvdivdp 34, 1, 0 55; PC64LE9-NEXT: blr 56entry: 57 %div = call <2 x double> @llvm.experimental.constrained.fdiv.v2f64( 58 <2 x double> <double 1.000000e+00, double 2.000000e+00>, 59 <2 x double> <double 1.000000e+01, double 1.000000e+01>, 60 metadata !"round.dynamic", 61 metadata !"fpexcept.strict") #1 62 ret <2 x double> %div 63} 64 65define <3 x float> @constrained_vector_fdiv_v3f32() #0 { 66; PC64LE-LABEL: constrained_vector_fdiv_v3f32: 67; PC64LE: # %bb.0: # %entry 68; PC64LE-NEXT: addis 3, 2, .LCPI2_0@toc@ha 69; PC64LE-NEXT: addis 4, 2, .LCPI2_3@toc@ha 70; PC64LE-NEXT: addis 5, 2, .LCPI2_2@toc@ha 71; PC64LE-NEXT: lfs 0, .LCPI2_0@toc@l(3) 72; PC64LE-NEXT: lfs 1, .LCPI2_3@toc@l(4) 73; PC64LE-NEXT: lfs 2, .LCPI2_2@toc@l(5) 74; PC64LE-NEXT: addis 3, 2, .LCPI2_1@toc@ha 75; PC64LE-NEXT: xsdivsp 1, 1, 0 76; PC64LE-NEXT: lfs 3, .LCPI2_1@toc@l(3) 77; PC64LE-NEXT: addis 3, 2, .LCPI2_4@toc@ha 78; PC64LE-NEXT: xsdivsp 2, 2, 0 79; PC64LE-NEXT: addi 3, 3, .LCPI2_4@toc@l 80; PC64LE-NEXT: lvx 4, 0, 3 81; PC64LE-NEXT: xsdivsp 0, 3, 0 82; PC64LE-NEXT: xscvdpspn 1, 1 83; PC64LE-NEXT: xscvdpspn 2, 2 84; PC64LE-NEXT: xscvdpspn 0, 0 85; PC64LE-NEXT: xxsldwi 34, 1, 1, 3 86; PC64LE-NEXT: xxsldwi 35, 2, 2, 3 87; PC64LE-NEXT: vmrghw 2, 3, 2 88; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 89; PC64LE-NEXT: vperm 2, 3, 2, 4 90; PC64LE-NEXT: blr 91; 92; PC64LE9-LABEL: constrained_vector_fdiv_v3f32: 93; PC64LE9: # %bb.0: # %entry 94; PC64LE9-NEXT: addis 3, 2, .LCPI2_0@toc@ha 95; PC64LE9-NEXT: lfs 0, .LCPI2_0@toc@l(3) 96; PC64LE9-NEXT: addis 3, 2, .LCPI2_1@toc@ha 97; PC64LE9-NEXT: lfs 1, .LCPI2_1@toc@l(3) 98; PC64LE9-NEXT: addis 3, 2, .LCPI2_2@toc@ha 99; PC64LE9-NEXT: xsdivsp 1, 1, 0 100; PC64LE9-NEXT: lfs 2, .LCPI2_2@toc@l(3) 101; PC64LE9-NEXT: addis 3, 2, .LCPI2_3@toc@ha 102; PC64LE9-NEXT: lfs 3, .LCPI2_3@toc@l(3) 103; PC64LE9-NEXT: addis 3, 2, .LCPI2_4@toc@ha 104; PC64LE9-NEXT: addi 3, 3, .LCPI2_4@toc@l 105; PC64LE9-NEXT: lxvx 36, 0, 3 106; PC64LE9-NEXT: xsdivsp 2, 2, 0 107; PC64LE9-NEXT: xsdivsp 0, 3, 0 108; PC64LE9-NEXT: xscvdpspn 0, 0 109; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 110; PC64LE9-NEXT: xscvdpspn 0, 2 111; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 112; PC64LE9-NEXT: xscvdpspn 0, 1 113; PC64LE9-NEXT: vmrghw 2, 3, 2 114; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 115; PC64LE9-NEXT: vperm 2, 3, 2, 4 116; PC64LE9-NEXT: blr 117entry: 118 %div = call <3 x float> @llvm.experimental.constrained.fdiv.v3f32( 119 <3 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, 120 <3 x float> <float 1.000000e+01, float 1.000000e+01, float 1.000000e+01>, 121 metadata !"round.dynamic", 122 metadata !"fpexcept.strict") #1 123 ret <3 x float> %div 124} 125 126define <3 x double> @constrained_vector_fdiv_v3f64() #0 { 127; PC64LE-LABEL: constrained_vector_fdiv_v3f64: 128; PC64LE: # %bb.0: # %entry 129; PC64LE-NEXT: addis 3, 2, .LCPI3_2@toc@ha 130; PC64LE-NEXT: addis 4, 2, .LCPI3_3@toc@ha 131; PC64LE-NEXT: addi 3, 3, .LCPI3_2@toc@l 132; PC64LE-NEXT: addi 4, 4, .LCPI3_3@toc@l 133; PC64LE-NEXT: lxvd2x 0, 0, 3 134; PC64LE-NEXT: lxvd2x 1, 0, 4 135; PC64LE-NEXT: addis 3, 2, .LCPI3_0@toc@ha 136; PC64LE-NEXT: addis 4, 2, .LCPI3_1@toc@ha 137; PC64LE-NEXT: lfs 3, .LCPI3_0@toc@l(3) 138; PC64LE-NEXT: xxswapd 0, 0 139; PC64LE-NEXT: xxswapd 1, 1 140; PC64LE-NEXT: xvdivdp 2, 1, 0 141; PC64LE-NEXT: lfs 0, .LCPI3_1@toc@l(4) 142; PC64LE-NEXT: xsdivdp 3, 0, 3 143; PC64LE-NEXT: xxswapd 1, 2 144; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 145; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 146; PC64LE-NEXT: blr 147; 148; PC64LE9-LABEL: constrained_vector_fdiv_v3f64: 149; PC64LE9: # %bb.0: # %entry 150; PC64LE9-NEXT: addis 3, 2, .LCPI3_0@toc@ha 151; PC64LE9-NEXT: lfs 0, .LCPI3_0@toc@l(3) 152; PC64LE9-NEXT: addis 3, 2, .LCPI3_1@toc@ha 153; PC64LE9-NEXT: lfs 1, .LCPI3_1@toc@l(3) 154; PC64LE9-NEXT: addis 3, 2, .LCPI3_2@toc@ha 155; PC64LE9-NEXT: addi 3, 3, .LCPI3_2@toc@l 156; PC64LE9-NEXT: xsdivdp 3, 1, 0 157; PC64LE9-NEXT: lxvx 0, 0, 3 158; PC64LE9-NEXT: addis 3, 2, .LCPI3_3@toc@ha 159; PC64LE9-NEXT: addi 3, 3, .LCPI3_3@toc@l 160; PC64LE9-NEXT: lxvx 1, 0, 3 161; PC64LE9-NEXT: xvdivdp 2, 1, 0 162; PC64LE9-NEXT: xxswapd 1, 2 163; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 164; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 165; PC64LE9-NEXT: blr 166entry: 167 %div = call <3 x double> @llvm.experimental.constrained.fdiv.v3f64( 168 <3 x double> <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00>, 169 <3 x double> <double 1.000000e+01, double 1.000000e+01, double 1.000000e+01>, 170 metadata !"round.dynamic", 171 metadata !"fpexcept.strict") #1 172 ret <3 x double> %div 173} 174 175define <4 x double> @constrained_vector_fdiv_v4f64() #0 { 176; PC64LE-LABEL: constrained_vector_fdiv_v4f64: 177; PC64LE: # %bb.0: # %entry 178; PC64LE-NEXT: addis 3, 2, .LCPI4_0@toc@ha 179; PC64LE-NEXT: addis 4, 2, .LCPI4_1@toc@ha 180; PC64LE-NEXT: addis 5, 2, .LCPI4_2@toc@ha 181; PC64LE-NEXT: addi 3, 3, .LCPI4_0@toc@l 182; PC64LE-NEXT: lxvd2x 0, 0, 3 183; PC64LE-NEXT: addi 3, 4, .LCPI4_1@toc@l 184; PC64LE-NEXT: addi 4, 5, .LCPI4_2@toc@l 185; PC64LE-NEXT: lxvd2x 1, 0, 3 186; PC64LE-NEXT: lxvd2x 2, 0, 4 187; PC64LE-NEXT: xxswapd 0, 0 188; PC64LE-NEXT: xxswapd 1, 1 189; PC64LE-NEXT: xxswapd 2, 2 190; PC64LE-NEXT: xvdivdp 35, 1, 0 191; PC64LE-NEXT: xvdivdp 34, 2, 0 192; PC64LE-NEXT: blr 193; 194; PC64LE9-LABEL: constrained_vector_fdiv_v4f64: 195; PC64LE9: # %bb.0: # %entry 196; PC64LE9-NEXT: addis 3, 2, .LCPI4_0@toc@ha 197; PC64LE9-NEXT: addi 3, 3, .LCPI4_0@toc@l 198; PC64LE9-NEXT: lxvx 0, 0, 3 199; PC64LE9-NEXT: addis 3, 2, .LCPI4_1@toc@ha 200; PC64LE9-NEXT: addi 3, 3, .LCPI4_1@toc@l 201; PC64LE9-NEXT: lxvx 1, 0, 3 202; PC64LE9-NEXT: addis 3, 2, .LCPI4_2@toc@ha 203; PC64LE9-NEXT: addi 3, 3, .LCPI4_2@toc@l 204; PC64LE9-NEXT: xvdivdp 35, 1, 0 205; PC64LE9-NEXT: lxvx 1, 0, 3 206; PC64LE9-NEXT: xvdivdp 34, 1, 0 207; PC64LE9-NEXT: blr 208entry: 209 %div = call <4 x double> @llvm.experimental.constrained.fdiv.v4f64( 210 <4 x double> <double 1.000000e+00, double 2.000000e+00, 211 double 3.000000e+00, double 4.000000e+00>, 212 <4 x double> <double 1.000000e+01, double 1.000000e+01, 213 double 1.000000e+01, double 1.000000e+01>, 214 metadata !"round.dynamic", 215 metadata !"fpexcept.strict") #1 216 ret <4 x double> %div 217} 218 219define <1 x float> @constrained_vector_frem_v1f32() #0 { 220; PC64LE-LABEL: constrained_vector_frem_v1f32: 221; PC64LE: # %bb.0: # %entry 222; PC64LE-NEXT: mflr 0 223; PC64LE-NEXT: std 0, 16(1) 224; PC64LE-NEXT: stdu 1, -32(1) 225; PC64LE-NEXT: addis 3, 2, .LCPI5_0@toc@ha 226; PC64LE-NEXT: addis 4, 2, .LCPI5_1@toc@ha 227; PC64LE-NEXT: lfs 1, .LCPI5_0@toc@l(3) 228; PC64LE-NEXT: lfs 2, .LCPI5_1@toc@l(4) 229; PC64LE-NEXT: bl fmodf 230; PC64LE-NEXT: nop 231; PC64LE-NEXT: addi 1, 1, 32 232; PC64LE-NEXT: ld 0, 16(1) 233; PC64LE-NEXT: mtlr 0 234; PC64LE-NEXT: blr 235; 236; PC64LE9-LABEL: constrained_vector_frem_v1f32: 237; PC64LE9: # %bb.0: # %entry 238; PC64LE9-NEXT: mflr 0 239; PC64LE9-NEXT: std 0, 16(1) 240; PC64LE9-NEXT: stdu 1, -32(1) 241; PC64LE9-NEXT: addis 3, 2, .LCPI5_0@toc@ha 242; PC64LE9-NEXT: lfs 1, .LCPI5_0@toc@l(3) 243; PC64LE9-NEXT: addis 3, 2, .LCPI5_1@toc@ha 244; PC64LE9-NEXT: lfs 2, .LCPI5_1@toc@l(3) 245; PC64LE9-NEXT: bl fmodf 246; PC64LE9-NEXT: nop 247; PC64LE9-NEXT: addi 1, 1, 32 248; PC64LE9-NEXT: ld 0, 16(1) 249; PC64LE9-NEXT: mtlr 0 250; PC64LE9-NEXT: blr 251entry: 252 %rem = call <1 x float> @llvm.experimental.constrained.frem.v1f32( 253 <1 x float> <float 1.000000e+00>, 254 <1 x float> <float 1.000000e+01>, 255 metadata !"round.dynamic", 256 metadata !"fpexcept.strict") #1 257 ret <1 x float> %rem 258} 259 260define <2 x double> @constrained_vector_frem_v2f64() #0 { 261; PC64LE-LABEL: constrained_vector_frem_v2f64: 262; PC64LE: # %bb.0: # %entry 263; PC64LE-NEXT: mflr 0 264; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 265; PC64LE-NEXT: std 0, 16(1) 266; PC64LE-NEXT: stdu 1, -80(1) 267; PC64LE-NEXT: addis 4, 2, .LCPI6_1@toc@ha 268; PC64LE-NEXT: addis 3, 2, .LCPI6_0@toc@ha 269; PC64LE-NEXT: lfs 31, .LCPI6_1@toc@l(4) 270; PC64LE-NEXT: lfs 1, .LCPI6_0@toc@l(3) 271; PC64LE-NEXT: fmr 2, 31 272; PC64LE-NEXT: bl fmod 273; PC64LE-NEXT: nop 274; PC64LE-NEXT: li 3, 48 275; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 276; PC64LE-NEXT: fmr 2, 31 277; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 278; PC64LE-NEXT: addis 3, 2, .LCPI6_2@toc@ha 279; PC64LE-NEXT: lfs 1, .LCPI6_2@toc@l(3) 280; PC64LE-NEXT: bl fmod 281; PC64LE-NEXT: nop 282; PC64LE-NEXT: li 3, 48 283; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 284; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 285; PC64LE-NEXT: xxmrghd 34, 1, 0 286; PC64LE-NEXT: addi 1, 1, 80 287; PC64LE-NEXT: ld 0, 16(1) 288; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 289; PC64LE-NEXT: mtlr 0 290; PC64LE-NEXT: blr 291; 292; PC64LE9-LABEL: constrained_vector_frem_v2f64: 293; PC64LE9: # %bb.0: # %entry 294; PC64LE9-NEXT: mflr 0 295; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 296; PC64LE9-NEXT: std 0, 16(1) 297; PC64LE9-NEXT: stdu 1, -64(1) 298; PC64LE9-NEXT: addis 3, 2, .LCPI6_0@toc@ha 299; PC64LE9-NEXT: lfs 1, .LCPI6_0@toc@l(3) 300; PC64LE9-NEXT: addis 3, 2, .LCPI6_1@toc@ha 301; PC64LE9-NEXT: lfs 31, .LCPI6_1@toc@l(3) 302; PC64LE9-NEXT: fmr 2, 31 303; PC64LE9-NEXT: bl fmod 304; PC64LE9-NEXT: nop 305; PC64LE9-NEXT: addis 3, 2, .LCPI6_2@toc@ha 306; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 307; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 308; PC64LE9-NEXT: fmr 2, 31 309; PC64LE9-NEXT: lfs 1, .LCPI6_2@toc@l(3) 310; PC64LE9-NEXT: bl fmod 311; PC64LE9-NEXT: nop 312; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 313; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 314; PC64LE9-NEXT: xxmrghd 34, 1, 0 315; PC64LE9-NEXT: addi 1, 1, 64 316; PC64LE9-NEXT: ld 0, 16(1) 317; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 318; PC64LE9-NEXT: mtlr 0 319; PC64LE9-NEXT: blr 320entry: 321 %rem = call <2 x double> @llvm.experimental.constrained.frem.v2f64( 322 <2 x double> <double 1.000000e+00, double 2.000000e+00>, 323 <2 x double> <double 1.000000e+01, double 1.000000e+01>, 324 metadata !"round.dynamic", 325 metadata !"fpexcept.strict") #1 326 ret <2 x double> %rem 327} 328 329define <3 x float> @constrained_vector_frem_v3f32() #0 { 330; PC64LE-LABEL: constrained_vector_frem_v3f32: 331; PC64LE: # %bb.0: # %entry 332; PC64LE-NEXT: mflr 0 333; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 334; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 335; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 336; PC64LE-NEXT: std 0, 16(1) 337; PC64LE-NEXT: stdu 1, -64(1) 338; PC64LE-NEXT: addis 4, 2, .LCPI7_1@toc@ha 339; PC64LE-NEXT: addis 3, 2, .LCPI7_0@toc@ha 340; PC64LE-NEXT: lfs 31, .LCPI7_1@toc@l(4) 341; PC64LE-NEXT: lfs 1, .LCPI7_0@toc@l(3) 342; PC64LE-NEXT: fmr 2, 31 343; PC64LE-NEXT: bl fmodf 344; PC64LE-NEXT: nop 345; PC64LE-NEXT: addis 3, 2, .LCPI7_2@toc@ha 346; PC64LE-NEXT: fmr 2, 31 347; PC64LE-NEXT: fmr 30, 1 348; PC64LE-NEXT: lfs 1, .LCPI7_2@toc@l(3) 349; PC64LE-NEXT: bl fmodf 350; PC64LE-NEXT: nop 351; PC64LE-NEXT: addis 3, 2, .LCPI7_3@toc@ha 352; PC64LE-NEXT: fmr 2, 31 353; PC64LE-NEXT: fmr 29, 1 354; PC64LE-NEXT: lfs 1, .LCPI7_3@toc@l(3) 355; PC64LE-NEXT: bl fmodf 356; PC64LE-NEXT: nop 357; PC64LE-NEXT: xscvdpspn 0, 29 358; PC64LE-NEXT: addis 3, 2, .LCPI7_4@toc@ha 359; PC64LE-NEXT: xscvdpspn 1, 1 360; PC64LE-NEXT: addi 3, 3, .LCPI7_4@toc@l 361; PC64LE-NEXT: lvx 4, 0, 3 362; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 363; PC64LE-NEXT: xscvdpspn 0, 30 364; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 365; PC64LE-NEXT: vmrghw 2, 2, 3 366; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 367; PC64LE-NEXT: vperm 2, 3, 2, 4 368; PC64LE-NEXT: addi 1, 1, 64 369; PC64LE-NEXT: ld 0, 16(1) 370; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 371; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 372; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 373; PC64LE-NEXT: mtlr 0 374; PC64LE-NEXT: blr 375; 376; PC64LE9-LABEL: constrained_vector_frem_v3f32: 377; PC64LE9: # %bb.0: # %entry 378; PC64LE9-NEXT: mflr 0 379; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 380; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 381; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 382; PC64LE9-NEXT: std 0, 16(1) 383; PC64LE9-NEXT: stdu 1, -64(1) 384; PC64LE9-NEXT: addis 3, 2, .LCPI7_0@toc@ha 385; PC64LE9-NEXT: lfs 1, .LCPI7_0@toc@l(3) 386; PC64LE9-NEXT: addis 3, 2, .LCPI7_1@toc@ha 387; PC64LE9-NEXT: lfs 31, .LCPI7_1@toc@l(3) 388; PC64LE9-NEXT: fmr 2, 31 389; PC64LE9-NEXT: bl fmodf 390; PC64LE9-NEXT: nop 391; PC64LE9-NEXT: addis 3, 2, .LCPI7_2@toc@ha 392; PC64LE9-NEXT: fmr 30, 1 393; PC64LE9-NEXT: fmr 2, 31 394; PC64LE9-NEXT: lfs 1, .LCPI7_2@toc@l(3) 395; PC64LE9-NEXT: bl fmodf 396; PC64LE9-NEXT: nop 397; PC64LE9-NEXT: addis 3, 2, .LCPI7_3@toc@ha 398; PC64LE9-NEXT: fmr 29, 1 399; PC64LE9-NEXT: fmr 2, 31 400; PC64LE9-NEXT: lfs 1, .LCPI7_3@toc@l(3) 401; PC64LE9-NEXT: bl fmodf 402; PC64LE9-NEXT: nop 403; PC64LE9-NEXT: xscvdpspn 0, 1 404; PC64LE9-NEXT: addis 3, 2, .LCPI7_4@toc@ha 405; PC64LE9-NEXT: addi 3, 3, .LCPI7_4@toc@l 406; PC64LE9-NEXT: lxvx 36, 0, 3 407; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 408; PC64LE9-NEXT: xscvdpspn 0, 29 409; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 410; PC64LE9-NEXT: xscvdpspn 0, 30 411; PC64LE9-NEXT: vmrghw 2, 3, 2 412; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 413; PC64LE9-NEXT: vperm 2, 3, 2, 4 414; PC64LE9-NEXT: addi 1, 1, 64 415; PC64LE9-NEXT: ld 0, 16(1) 416; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 417; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 418; PC64LE9-NEXT: mtlr 0 419; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 420; PC64LE9-NEXT: blr 421entry: 422 %rem = call <3 x float> @llvm.experimental.constrained.frem.v3f32( 423 <3 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, 424 <3 x float> <float 1.000000e+01, float 1.000000e+01, float 1.000000e+01>, 425 metadata !"round.dynamic", 426 metadata !"fpexcept.strict") #1 427 ret <3 x float> %rem 428} 429 430define <3 x double> @constrained_vector_frem_v3f64() #0 { 431; PC64LE-LABEL: constrained_vector_frem_v3f64: 432; PC64LE: # %bb.0: # %entry 433; PC64LE-NEXT: mflr 0 434; PC64LE-NEXT: std 0, 16(1) 435; PC64LE-NEXT: stdu 1, -96(1) 436; PC64LE-NEXT: addis 4, 2, .LCPI8_1@toc@ha 437; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 438; PC64LE-NEXT: li 3, 64 439; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 440; PC64LE-NEXT: addis 3, 2, .LCPI8_0@toc@ha 441; PC64LE-NEXT: lfs 31, .LCPI8_1@toc@l(4) 442; PC64LE-NEXT: lfs 1, .LCPI8_0@toc@l(3) 443; PC64LE-NEXT: fmr 2, 31 444; PC64LE-NEXT: bl fmod 445; PC64LE-NEXT: nop 446; PC64LE-NEXT: li 3, 48 447; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 448; PC64LE-NEXT: fmr 2, 31 449; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 450; PC64LE-NEXT: addis 3, 2, .LCPI8_2@toc@ha 451; PC64LE-NEXT: lfs 1, .LCPI8_2@toc@l(3) 452; PC64LE-NEXT: bl fmod 453; PC64LE-NEXT: nop 454; PC64LE-NEXT: li 3, 48 455; PC64LE-NEXT: fmr 2, 31 456; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 457; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 458; PC64LE-NEXT: addis 3, 2, .LCPI8_3@toc@ha 459; PC64LE-NEXT: xxmrghd 63, 1, 0 460; PC64LE-NEXT: lfs 1, .LCPI8_3@toc@l(3) 461; PC64LE-NEXT: bl fmod 462; PC64LE-NEXT: nop 463; PC64LE-NEXT: xxswapd 0, 63 464; PC64LE-NEXT: li 3, 64 465; PC64LE-NEXT: xxlor 2, 63, 63 466; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 467; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 468; PC64LE-NEXT: fmr 3, 1 469; PC64LE-NEXT: fmr 1, 0 470; PC64LE-NEXT: addi 1, 1, 96 471; PC64LE-NEXT: ld 0, 16(1) 472; PC64LE-NEXT: mtlr 0 473; PC64LE-NEXT: blr 474; 475; PC64LE9-LABEL: constrained_vector_frem_v3f64: 476; PC64LE9: # %bb.0: # %entry 477; PC64LE9-NEXT: mflr 0 478; PC64LE9-NEXT: std 0, 16(1) 479; PC64LE9-NEXT: stdu 1, -80(1) 480; PC64LE9-NEXT: addis 3, 2, .LCPI8_0@toc@ha 481; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 482; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 483; PC64LE9-NEXT: lfs 1, .LCPI8_0@toc@l(3) 484; PC64LE9-NEXT: addis 3, 2, .LCPI8_1@toc@ha 485; PC64LE9-NEXT: lfs 31, .LCPI8_1@toc@l(3) 486; PC64LE9-NEXT: fmr 2, 31 487; PC64LE9-NEXT: bl fmod 488; PC64LE9-NEXT: nop 489; PC64LE9-NEXT: addis 3, 2, .LCPI8_2@toc@ha 490; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 491; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 492; PC64LE9-NEXT: fmr 2, 31 493; PC64LE9-NEXT: lfs 1, .LCPI8_2@toc@l(3) 494; PC64LE9-NEXT: bl fmod 495; PC64LE9-NEXT: nop 496; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 497; PC64LE9-NEXT: addis 3, 2, .LCPI8_3@toc@ha 498; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 499; PC64LE9-NEXT: fmr 2, 31 500; PC64LE9-NEXT: xxmrghd 63, 1, 0 501; PC64LE9-NEXT: lfs 1, .LCPI8_3@toc@l(3) 502; PC64LE9-NEXT: bl fmod 503; PC64LE9-NEXT: nop 504; PC64LE9-NEXT: fmr 3, 1 505; PC64LE9-NEXT: xxswapd 1, 63 506; PC64LE9-NEXT: xscpsgndp 2, 63, 63 507; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 508; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 509; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 510; PC64LE9-NEXT: addi 1, 1, 80 511; PC64LE9-NEXT: ld 0, 16(1) 512; PC64LE9-NEXT: mtlr 0 513; PC64LE9-NEXT: blr 514entry: 515 %rem = call <3 x double> @llvm.experimental.constrained.frem.v3f64( 516 <3 x double> <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00>, 517 <3 x double> <double 1.000000e+01, double 1.000000e+01, double 1.000000e+01>, 518 metadata !"round.dynamic", 519 metadata !"fpexcept.strict") #1 520 ret <3 x double> %rem 521} 522 523define <4 x double> @constrained_vector_frem_v4f64() #0 { 524; PC64LE-LABEL: constrained_vector_frem_v4f64: 525; PC64LE: # %bb.0: 526; PC64LE-NEXT: mflr 0 527; PC64LE-NEXT: std 0, 16(1) 528; PC64LE-NEXT: stdu 1, -96(1) 529; PC64LE-NEXT: addis 4, 2, .LCPI9_1@toc@ha 530; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 531; PC64LE-NEXT: li 3, 64 532; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 533; PC64LE-NEXT: addis 3, 2, .LCPI9_0@toc@ha 534; PC64LE-NEXT: lfs 31, .LCPI9_1@toc@l(4) 535; PC64LE-NEXT: lfs 1, .LCPI9_0@toc@l(3) 536; PC64LE-NEXT: fmr 2, 31 537; PC64LE-NEXT: bl fmod 538; PC64LE-NEXT: nop 539; PC64LE-NEXT: li 3, 48 540; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 541; PC64LE-NEXT: fmr 2, 31 542; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 543; PC64LE-NEXT: addis 3, 2, .LCPI9_2@toc@ha 544; PC64LE-NEXT: lfs 1, .LCPI9_2@toc@l(3) 545; PC64LE-NEXT: bl fmod 546; PC64LE-NEXT: nop 547; PC64LE-NEXT: li 3, 48 548; PC64LE-NEXT: fmr 2, 31 549; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 550; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 551; PC64LE-NEXT: addis 3, 2, .LCPI9_3@toc@ha 552; PC64LE-NEXT: xxmrghd 63, 1, 0 553; PC64LE-NEXT: lfs 1, .LCPI9_3@toc@l(3) 554; PC64LE-NEXT: bl fmod 555; PC64LE-NEXT: nop 556; PC64LE-NEXT: li 3, 48 557; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 558; PC64LE-NEXT: fmr 2, 31 559; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 560; PC64LE-NEXT: addis 3, 2, .LCPI9_4@toc@ha 561; PC64LE-NEXT: lfs 1, .LCPI9_4@toc@l(3) 562; PC64LE-NEXT: bl fmod 563; PC64LE-NEXT: nop 564; PC64LE-NEXT: li 3, 48 565; PC64LE-NEXT: vmr 2, 31 566; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 567; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 568; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 569; PC64LE-NEXT: li 3, 64 570; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 571; PC64LE-NEXT: xxmrghd 35, 1, 0 572; PC64LE-NEXT: addi 1, 1, 96 573; PC64LE-NEXT: ld 0, 16(1) 574; PC64LE-NEXT: mtlr 0 575; PC64LE-NEXT: blr 576; 577; PC64LE9-LABEL: constrained_vector_frem_v4f64: 578; PC64LE9: # %bb.0: 579; PC64LE9-NEXT: mflr 0 580; PC64LE9-NEXT: std 0, 16(1) 581; PC64LE9-NEXT: stdu 1, -80(1) 582; PC64LE9-NEXT: addis 3, 2, .LCPI9_0@toc@ha 583; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 584; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 585; PC64LE9-NEXT: lfs 1, .LCPI9_0@toc@l(3) 586; PC64LE9-NEXT: addis 3, 2, .LCPI9_1@toc@ha 587; PC64LE9-NEXT: lfs 31, .LCPI9_1@toc@l(3) 588; PC64LE9-NEXT: fmr 2, 31 589; PC64LE9-NEXT: bl fmod 590; PC64LE9-NEXT: nop 591; PC64LE9-NEXT: addis 3, 2, .LCPI9_2@toc@ha 592; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 593; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 594; PC64LE9-NEXT: fmr 2, 31 595; PC64LE9-NEXT: lfs 1, .LCPI9_2@toc@l(3) 596; PC64LE9-NEXT: bl fmod 597; PC64LE9-NEXT: nop 598; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 599; PC64LE9-NEXT: addis 3, 2, .LCPI9_3@toc@ha 600; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 601; PC64LE9-NEXT: fmr 2, 31 602; PC64LE9-NEXT: xxmrghd 63, 1, 0 603; PC64LE9-NEXT: lfs 1, .LCPI9_3@toc@l(3) 604; PC64LE9-NEXT: bl fmod 605; PC64LE9-NEXT: nop 606; PC64LE9-NEXT: addis 3, 2, .LCPI9_4@toc@ha 607; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 608; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 609; PC64LE9-NEXT: fmr 2, 31 610; PC64LE9-NEXT: lfs 1, .LCPI9_4@toc@l(3) 611; PC64LE9-NEXT: bl fmod 612; PC64LE9-NEXT: nop 613; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 614; PC64LE9-NEXT: vmr 2, 31 615; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 616; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 617; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 618; PC64LE9-NEXT: xxmrghd 35, 1, 0 619; PC64LE9-NEXT: addi 1, 1, 80 620; PC64LE9-NEXT: ld 0, 16(1) 621; PC64LE9-NEXT: mtlr 0 622; PC64LE9-NEXT: blr 623 %rem = call <4 x double> @llvm.experimental.constrained.frem.v4f64( 624 <4 x double> <double 1.000000e+00, double 2.000000e+00, 625 double 3.000000e+00, double 4.000000e+00>, 626 <4 x double> <double 1.000000e+01, double 1.000000e+01, 627 double 1.000000e+01, double 1.000000e+01>, 628 metadata !"round.dynamic", 629 metadata !"fpexcept.strict") #1 630 ret <4 x double> %rem 631} 632 633define <1 x float> @constrained_vector_fmul_v1f32() #0 { 634; PC64LE-LABEL: constrained_vector_fmul_v1f32: 635; PC64LE: # %bb.0: # %entry 636; PC64LE-NEXT: addis 3, 2, .LCPI10_0@toc@ha 637; PC64LE-NEXT: addis 4, 2, .LCPI10_1@toc@ha 638; PC64LE-NEXT: lfs 0, .LCPI10_0@toc@l(3) 639; PC64LE-NEXT: lfs 1, .LCPI10_1@toc@l(4) 640; PC64LE-NEXT: xsmulsp 1, 1, 0 641; PC64LE-NEXT: blr 642; 643; PC64LE9-LABEL: constrained_vector_fmul_v1f32: 644; PC64LE9: # %bb.0: # %entry 645; PC64LE9-NEXT: addis 3, 2, .LCPI10_0@toc@ha 646; PC64LE9-NEXT: lfs 0, .LCPI10_0@toc@l(3) 647; PC64LE9-NEXT: addis 3, 2, .LCPI10_1@toc@ha 648; PC64LE9-NEXT: lfs 1, .LCPI10_1@toc@l(3) 649; PC64LE9-NEXT: xsmulsp 1, 1, 0 650; PC64LE9-NEXT: blr 651entry: 652 %mul = call <1 x float> @llvm.experimental.constrained.fmul.v1f32( 653 <1 x float> <float 0x7FF0000000000000>, 654 <1 x float> <float 2.000000e+00>, 655 metadata !"round.dynamic", 656 metadata !"fpexcept.strict") #1 657 ret <1 x float> %mul 658} 659 660define <2 x double> @constrained_vector_fmul_v2f64() #0 { 661; PC64LE-LABEL: constrained_vector_fmul_v2f64: 662; PC64LE: # %bb.0: # %entry 663; PC64LE-NEXT: addis 3, 2, .LCPI11_0@toc@ha 664; PC64LE-NEXT: addis 4, 2, .LCPI11_1@toc@ha 665; PC64LE-NEXT: addi 3, 3, .LCPI11_0@toc@l 666; PC64LE-NEXT: addi 4, 4, .LCPI11_1@toc@l 667; PC64LE-NEXT: lxvd2x 0, 0, 3 668; PC64LE-NEXT: lxvd2x 1, 0, 4 669; PC64LE-NEXT: xxswapd 0, 0 670; PC64LE-NEXT: xxswapd 1, 1 671; PC64LE-NEXT: xvmuldp 34, 1, 0 672; PC64LE-NEXT: blr 673; 674; PC64LE9-LABEL: constrained_vector_fmul_v2f64: 675; PC64LE9: # %bb.0: # %entry 676; PC64LE9-NEXT: addis 3, 2, .LCPI11_0@toc@ha 677; PC64LE9-NEXT: addi 3, 3, .LCPI11_0@toc@l 678; PC64LE9-NEXT: lxvx 0, 0, 3 679; PC64LE9-NEXT: addis 3, 2, .LCPI11_1@toc@ha 680; PC64LE9-NEXT: addi 3, 3, .LCPI11_1@toc@l 681; PC64LE9-NEXT: lxvx 1, 0, 3 682; PC64LE9-NEXT: xvmuldp 34, 1, 0 683; PC64LE9-NEXT: blr 684entry: 685 %mul = call <2 x double> @llvm.experimental.constrained.fmul.v2f64( 686 <2 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>, 687 <2 x double> <double 2.000000e+00, double 3.000000e+00>, 688 metadata !"round.dynamic", 689 metadata !"fpexcept.strict") #1 690 ret <2 x double> %mul 691} 692 693define <3 x float> @constrained_vector_fmul_v3f32() #0 { 694; PC64LE-LABEL: constrained_vector_fmul_v3f32: 695; PC64LE: # %bb.0: # %entry 696; PC64LE-NEXT: addis 3, 2, .LCPI12_1@toc@ha 697; PC64LE-NEXT: addis 4, 2, .LCPI12_3@toc@ha 698; PC64LE-NEXT: addis 5, 2, .LCPI12_2@toc@ha 699; PC64LE-NEXT: lfs 0, .LCPI12_1@toc@l(3) 700; PC64LE-NEXT: lfs 1, .LCPI12_3@toc@l(4) 701; PC64LE-NEXT: lfs 2, .LCPI12_2@toc@l(5) 702; PC64LE-NEXT: addis 3, 2, .LCPI12_0@toc@ha 703; PC64LE-NEXT: xsmulsp 1, 0, 1 704; PC64LE-NEXT: lfs 3, .LCPI12_0@toc@l(3) 705; PC64LE-NEXT: addis 3, 2, .LCPI12_4@toc@ha 706; PC64LE-NEXT: xsmulsp 2, 0, 2 707; PC64LE-NEXT: addi 3, 3, .LCPI12_4@toc@l 708; PC64LE-NEXT: lvx 4, 0, 3 709; PC64LE-NEXT: xsmulsp 0, 0, 3 710; PC64LE-NEXT: xscvdpspn 1, 1 711; PC64LE-NEXT: xscvdpspn 2, 2 712; PC64LE-NEXT: xscvdpspn 0, 0 713; PC64LE-NEXT: xxsldwi 34, 1, 1, 3 714; PC64LE-NEXT: xxsldwi 35, 2, 2, 3 715; PC64LE-NEXT: vmrghw 2, 3, 2 716; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 717; PC64LE-NEXT: vperm 2, 3, 2, 4 718; PC64LE-NEXT: blr 719; 720; PC64LE9-LABEL: constrained_vector_fmul_v3f32: 721; PC64LE9: # %bb.0: # %entry 722; PC64LE9-NEXT: addis 3, 2, .LCPI12_0@toc@ha 723; PC64LE9-NEXT: lfs 0, .LCPI12_0@toc@l(3) 724; PC64LE9-NEXT: addis 3, 2, .LCPI12_1@toc@ha 725; PC64LE9-NEXT: lfs 1, .LCPI12_1@toc@l(3) 726; PC64LE9-NEXT: addis 3, 2, .LCPI12_2@toc@ha 727; PC64LE9-NEXT: xsmulsp 0, 1, 0 728; PC64LE9-NEXT: lfs 2, .LCPI12_2@toc@l(3) 729; PC64LE9-NEXT: addis 3, 2, .LCPI12_3@toc@ha 730; PC64LE9-NEXT: lfs 3, .LCPI12_3@toc@l(3) 731; PC64LE9-NEXT: addis 3, 2, .LCPI12_4@toc@ha 732; PC64LE9-NEXT: addi 3, 3, .LCPI12_4@toc@l 733; PC64LE9-NEXT: lxvx 36, 0, 3 734; PC64LE9-NEXT: xsmulsp 2, 1, 2 735; PC64LE9-NEXT: xsmulsp 1, 1, 3 736; PC64LE9-NEXT: xscvdpspn 0, 0 737; PC64LE9-NEXT: xscvdpspn 1, 1 738; PC64LE9-NEXT: xxsldwi 34, 1, 1, 3 739; PC64LE9-NEXT: xscvdpspn 1, 2 740; PC64LE9-NEXT: xxsldwi 35, 1, 1, 3 741; PC64LE9-NEXT: vmrghw 2, 3, 2 742; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 743; PC64LE9-NEXT: vperm 2, 3, 2, 4 744; PC64LE9-NEXT: blr 745entry: 746 %mul = call <3 x float> @llvm.experimental.constrained.fmul.v3f32( 747 <3 x float> <float 0x7FF0000000000000, float 0x7FF0000000000000, 748 float 0x7FF0000000000000>, 749 <3 x float> <float 1.000000e+00, float 1.000000e+01, float 1.000000e+02>, 750 metadata !"round.dynamic", 751 metadata !"fpexcept.strict") #1 752 ret <3 x float> %mul 753} 754 755define <3 x double> @constrained_vector_fmul_v3f64() #0 { 756; PC64LE-LABEL: constrained_vector_fmul_v3f64: 757; PC64LE: # %bb.0: # %entry 758; PC64LE-NEXT: addis 3, 2, .LCPI13_2@toc@ha 759; PC64LE-NEXT: addis 4, 2, .LCPI13_3@toc@ha 760; PC64LE-NEXT: addi 3, 3, .LCPI13_2@toc@l 761; PC64LE-NEXT: addi 4, 4, .LCPI13_3@toc@l 762; PC64LE-NEXT: lxvd2x 0, 0, 3 763; PC64LE-NEXT: lxvd2x 1, 0, 4 764; PC64LE-NEXT: addis 3, 2, .LCPI13_0@toc@ha 765; PC64LE-NEXT: addis 4, 2, .LCPI13_1@toc@ha 766; PC64LE-NEXT: lfd 3, .LCPI13_0@toc@l(3) 767; PC64LE-NEXT: xxswapd 0, 0 768; PC64LE-NEXT: xxswapd 1, 1 769; PC64LE-NEXT: xvmuldp 2, 1, 0 770; PC64LE-NEXT: lfs 0, .LCPI13_1@toc@l(4) 771; PC64LE-NEXT: xsmuldp 3, 3, 0 772; PC64LE-NEXT: xxswapd 1, 2 773; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 774; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 775; PC64LE-NEXT: blr 776; 777; PC64LE9-LABEL: constrained_vector_fmul_v3f64: 778; PC64LE9: # %bb.0: # %entry 779; PC64LE9-NEXT: addis 3, 2, .LCPI13_0@toc@ha 780; PC64LE9-NEXT: lfd 0, .LCPI13_0@toc@l(3) 781; PC64LE9-NEXT: addis 3, 2, .LCPI13_1@toc@ha 782; PC64LE9-NEXT: lfs 1, .LCPI13_1@toc@l(3) 783; PC64LE9-NEXT: addis 3, 2, .LCPI13_2@toc@ha 784; PC64LE9-NEXT: addi 3, 3, .LCPI13_2@toc@l 785; PC64LE9-NEXT: xsmuldp 3, 0, 1 786; PC64LE9-NEXT: lxvx 0, 0, 3 787; PC64LE9-NEXT: addis 3, 2, .LCPI13_3@toc@ha 788; PC64LE9-NEXT: addi 3, 3, .LCPI13_3@toc@l 789; PC64LE9-NEXT: lxvx 1, 0, 3 790; PC64LE9-NEXT: xvmuldp 2, 1, 0 791; PC64LE9-NEXT: xxswapd 1, 2 792; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 793; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 794; PC64LE9-NEXT: blr 795entry: 796 %mul = call <3 x double> @llvm.experimental.constrained.fmul.v3f64( 797 <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF, 798 double 0x7FEFFFFFFFFFFFFF>, 799 <3 x double> <double 1.000000e+00, double 1.000000e+01, double 1.000000e+02>, 800 metadata !"round.dynamic", 801 metadata !"fpexcept.strict") #1 802 ret <3 x double> %mul 803} 804 805define <4 x double> @constrained_vector_fmul_v4f64() #0 { 806; PC64LE-LABEL: constrained_vector_fmul_v4f64: 807; PC64LE: # %bb.0: # %entry 808; PC64LE-NEXT: addis 3, 2, .LCPI14_0@toc@ha 809; PC64LE-NEXT: addis 4, 2, .LCPI14_1@toc@ha 810; PC64LE-NEXT: addis 5, 2, .LCPI14_2@toc@ha 811; PC64LE-NEXT: addi 3, 3, .LCPI14_0@toc@l 812; PC64LE-NEXT: addi 4, 4, .LCPI14_1@toc@l 813; PC64LE-NEXT: lxvd2x 0, 0, 3 814; PC64LE-NEXT: addi 3, 5, .LCPI14_2@toc@l 815; PC64LE-NEXT: lxvd2x 1, 0, 4 816; PC64LE-NEXT: lxvd2x 2, 0, 3 817; PC64LE-NEXT: xxswapd 0, 0 818; PC64LE-NEXT: xxswapd 1, 1 819; PC64LE-NEXT: xxswapd 2, 2 820; PC64LE-NEXT: xvmuldp 35, 1, 0 821; PC64LE-NEXT: xvmuldp 34, 1, 2 822; PC64LE-NEXT: blr 823; 824; PC64LE9-LABEL: constrained_vector_fmul_v4f64: 825; PC64LE9: # %bb.0: # %entry 826; PC64LE9-NEXT: addis 3, 2, .LCPI14_0@toc@ha 827; PC64LE9-NEXT: addi 3, 3, .LCPI14_0@toc@l 828; PC64LE9-NEXT: lxvx 0, 0, 3 829; PC64LE9-NEXT: addis 3, 2, .LCPI14_1@toc@ha 830; PC64LE9-NEXT: addi 3, 3, .LCPI14_1@toc@l 831; PC64LE9-NEXT: lxvx 1, 0, 3 832; PC64LE9-NEXT: addis 3, 2, .LCPI14_2@toc@ha 833; PC64LE9-NEXT: addi 3, 3, .LCPI14_2@toc@l 834; PC64LE9-NEXT: xvmuldp 35, 1, 0 835; PC64LE9-NEXT: lxvx 0, 0, 3 836; PC64LE9-NEXT: xvmuldp 34, 1, 0 837; PC64LE9-NEXT: blr 838entry: 839 %mul = call <4 x double> @llvm.experimental.constrained.fmul.v4f64( 840 <4 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF, 841 double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>, 842 <4 x double> <double 2.000000e+00, double 3.000000e+00, 843 double 4.000000e+00, double 5.000000e+00>, 844 metadata !"round.dynamic", 845 metadata !"fpexcept.strict") #1 846 ret <4 x double> %mul 847} 848 849define <1 x float> @constrained_vector_fadd_v1f32() #0 { 850; PC64LE-LABEL: constrained_vector_fadd_v1f32: 851; PC64LE: # %bb.0: # %entry 852; PC64LE-NEXT: addis 3, 2, .LCPI15_0@toc@ha 853; PC64LE-NEXT: addis 4, 2, .LCPI15_1@toc@ha 854; PC64LE-NEXT: lfs 0, .LCPI15_0@toc@l(3) 855; PC64LE-NEXT: lfs 1, .LCPI15_1@toc@l(4) 856; PC64LE-NEXT: xsaddsp 1, 1, 0 857; PC64LE-NEXT: blr 858; 859; PC64LE9-LABEL: constrained_vector_fadd_v1f32: 860; PC64LE9: # %bb.0: # %entry 861; PC64LE9-NEXT: addis 3, 2, .LCPI15_0@toc@ha 862; PC64LE9-NEXT: lfs 0, .LCPI15_0@toc@l(3) 863; PC64LE9-NEXT: addis 3, 2, .LCPI15_1@toc@ha 864; PC64LE9-NEXT: lfs 1, .LCPI15_1@toc@l(3) 865; PC64LE9-NEXT: xsaddsp 1, 1, 0 866; PC64LE9-NEXT: blr 867entry: 868 %add = call <1 x float> @llvm.experimental.constrained.fadd.v1f32( 869 <1 x float> <float 0x7FF0000000000000>, 870 <1 x float> <float 1.0>, 871 metadata !"round.dynamic", 872 metadata !"fpexcept.strict") #1 873 ret <1 x float> %add 874} 875 876define <2 x double> @constrained_vector_fadd_v2f64() #0 { 877; PC64LE-LABEL: constrained_vector_fadd_v2f64: 878; PC64LE: # %bb.0: # %entry 879; PC64LE-NEXT: addis 3, 2, .LCPI16_0@toc@ha 880; PC64LE-NEXT: addis 4, 2, .LCPI16_1@toc@ha 881; PC64LE-NEXT: addi 3, 3, .LCPI16_0@toc@l 882; PC64LE-NEXT: addi 4, 4, .LCPI16_1@toc@l 883; PC64LE-NEXT: lxvd2x 0, 0, 3 884; PC64LE-NEXT: lxvd2x 1, 0, 4 885; PC64LE-NEXT: xxswapd 0, 0 886; PC64LE-NEXT: xxswapd 1, 1 887; PC64LE-NEXT: xvadddp 34, 1, 0 888; PC64LE-NEXT: blr 889; 890; PC64LE9-LABEL: constrained_vector_fadd_v2f64: 891; PC64LE9: # %bb.0: # %entry 892; PC64LE9-NEXT: addis 3, 2, .LCPI16_0@toc@ha 893; PC64LE9-NEXT: addi 3, 3, .LCPI16_0@toc@l 894; PC64LE9-NEXT: lxvx 0, 0, 3 895; PC64LE9-NEXT: addis 3, 2, .LCPI16_1@toc@ha 896; PC64LE9-NEXT: addi 3, 3, .LCPI16_1@toc@l 897; PC64LE9-NEXT: lxvx 1, 0, 3 898; PC64LE9-NEXT: xvadddp 34, 1, 0 899; PC64LE9-NEXT: blr 900entry: 901 %add = call <2 x double> @llvm.experimental.constrained.fadd.v2f64( 902 <2 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>, 903 <2 x double> <double 1.000000e+00, double 1.000000e-01>, 904 metadata !"round.dynamic", 905 metadata !"fpexcept.strict") #1 906 ret <2 x double> %add 907} 908 909define <3 x float> @constrained_vector_fadd_v3f32() #0 { 910; PC64LE-LABEL: constrained_vector_fadd_v3f32: 911; PC64LE: # %bb.0: # %entry 912; PC64LE-NEXT: addis 3, 2, .LCPI17_0@toc@ha 913; PC64LE-NEXT: addis 4, 2, .LCPI17_2@toc@ha 914; PC64LE-NEXT: addis 5, 2, .LCPI17_1@toc@ha 915; PC64LE-NEXT: xxlxor 3, 3, 3 916; PC64LE-NEXT: lfs 0, .LCPI17_0@toc@l(3) 917; PC64LE-NEXT: lfs 1, .LCPI17_2@toc@l(4) 918; PC64LE-NEXT: lfs 2, .LCPI17_1@toc@l(5) 919; PC64LE-NEXT: addis 3, 2, .LCPI17_3@toc@ha 920; PC64LE-NEXT: addi 3, 3, .LCPI17_3@toc@l 921; PC64LE-NEXT: xsaddsp 1, 0, 1 922; PC64LE-NEXT: lvx 4, 0, 3 923; PC64LE-NEXT: xsaddsp 2, 0, 2 924; PC64LE-NEXT: xsaddsp 0, 0, 3 925; PC64LE-NEXT: xscvdpspn 1, 1 926; PC64LE-NEXT: xscvdpspn 2, 2 927; PC64LE-NEXT: xscvdpspn 0, 0 928; PC64LE-NEXT: xxsldwi 34, 1, 1, 3 929; PC64LE-NEXT: xxsldwi 35, 2, 2, 3 930; PC64LE-NEXT: vmrghw 2, 3, 2 931; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 932; PC64LE-NEXT: vperm 2, 3, 2, 4 933; PC64LE-NEXT: blr 934; 935; PC64LE9-LABEL: constrained_vector_fadd_v3f32: 936; PC64LE9: # %bb.0: # %entry 937; PC64LE9-NEXT: addis 3, 2, .LCPI17_0@toc@ha 938; PC64LE9-NEXT: xxlxor 1, 1, 1 939; PC64LE9-NEXT: lfs 0, .LCPI17_0@toc@l(3) 940; PC64LE9-NEXT: addis 3, 2, .LCPI17_1@toc@ha 941; PC64LE9-NEXT: lfs 2, .LCPI17_1@toc@l(3) 942; PC64LE9-NEXT: addis 3, 2, .LCPI17_2@toc@ha 943; PC64LE9-NEXT: lfs 3, .LCPI17_2@toc@l(3) 944; PC64LE9-NEXT: addis 3, 2, .LCPI17_3@toc@ha 945; PC64LE9-NEXT: addi 3, 3, .LCPI17_3@toc@l 946; PC64LE9-NEXT: xsaddsp 1, 0, 1 947; PC64LE9-NEXT: lxvx 36, 0, 3 948; PC64LE9-NEXT: xsaddsp 2, 0, 2 949; PC64LE9-NEXT: xsaddsp 0, 0, 3 950; PC64LE9-NEXT: xscvdpspn 0, 0 951; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 952; PC64LE9-NEXT: xscvdpspn 0, 2 953; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 954; PC64LE9-NEXT: xscvdpspn 0, 1 955; PC64LE9-NEXT: vmrghw 2, 3, 2 956; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 957; PC64LE9-NEXT: vperm 2, 3, 2, 4 958; PC64LE9-NEXT: blr 959entry: 960 %add = call <3 x float> @llvm.experimental.constrained.fadd.v3f32( 961 <3 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000, 962 float 0xFFFFFFFFE0000000>, 963 <3 x float> <float 2.0, float 1.0, float 0.0>, 964 metadata !"round.dynamic", 965 metadata !"fpexcept.strict") #1 966 ret <3 x float> %add 967} 968 969define <3 x double> @constrained_vector_fadd_v3f64() #0 { 970; PC64LE-LABEL: constrained_vector_fadd_v3f64: 971; PC64LE: # %bb.0: # %entry 972; PC64LE-NEXT: addis 3, 2, .LCPI18_1@toc@ha 973; PC64LE-NEXT: addis 4, 2, .LCPI18_2@toc@ha 974; PC64LE-NEXT: addi 3, 3, .LCPI18_1@toc@l 975; PC64LE-NEXT: addi 4, 4, .LCPI18_2@toc@l 976; PC64LE-NEXT: lxvd2x 0, 0, 3 977; PC64LE-NEXT: lxvd2x 1, 0, 4 978; PC64LE-NEXT: addis 3, 2, .LCPI18_0@toc@ha 979; PC64LE-NEXT: lfd 3, .LCPI18_0@toc@l(3) 980; PC64LE-NEXT: xxswapd 0, 0 981; PC64LE-NEXT: xxswapd 1, 1 982; PC64LE-NEXT: xvadddp 2, 1, 0 983; PC64LE-NEXT: xxlxor 0, 0, 0 984; PC64LE-NEXT: xsadddp 3, 3, 0 985; PC64LE-NEXT: xxswapd 1, 2 986; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 987; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 988; PC64LE-NEXT: blr 989; 990; PC64LE9-LABEL: constrained_vector_fadd_v3f64: 991; PC64LE9: # %bb.0: # %entry 992; PC64LE9-NEXT: addis 3, 2, .LCPI18_0@toc@ha 993; PC64LE9-NEXT: xxlxor 1, 1, 1 994; PC64LE9-NEXT: lfd 0, .LCPI18_0@toc@l(3) 995; PC64LE9-NEXT: addis 3, 2, .LCPI18_1@toc@ha 996; PC64LE9-NEXT: addi 3, 3, .LCPI18_1@toc@l 997; PC64LE9-NEXT: xsadddp 3, 0, 1 998; PC64LE9-NEXT: lxvx 0, 0, 3 999; PC64LE9-NEXT: addis 3, 2, .LCPI18_2@toc@ha 1000; PC64LE9-NEXT: addi 3, 3, .LCPI18_2@toc@l 1001; PC64LE9-NEXT: lxvx 1, 0, 3 1002; PC64LE9-NEXT: xvadddp 2, 1, 0 1003; PC64LE9-NEXT: xxswapd 1, 2 1004; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1005; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1006; PC64LE9-NEXT: blr 1007entry: 1008 %add = call <3 x double> @llvm.experimental.constrained.fadd.v3f64( 1009 <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF, 1010 double 0x7FEFFFFFFFFFFFFF>, 1011 <3 x double> <double 2.0, double 1.0, double 0.0>, 1012 metadata !"round.dynamic", 1013 metadata !"fpexcept.strict") #1 1014 ret <3 x double> %add 1015} 1016 1017define <4 x double> @constrained_vector_fadd_v4f64() #0 { 1018; PC64LE-LABEL: constrained_vector_fadd_v4f64: 1019; PC64LE: # %bb.0: # %entry 1020; PC64LE-NEXT: addis 3, 2, .LCPI19_0@toc@ha 1021; PC64LE-NEXT: addis 4, 2, .LCPI19_1@toc@ha 1022; PC64LE-NEXT: addis 5, 2, .LCPI19_2@toc@ha 1023; PC64LE-NEXT: addi 3, 3, .LCPI19_0@toc@l 1024; PC64LE-NEXT: addi 4, 4, .LCPI19_1@toc@l 1025; PC64LE-NEXT: lxvd2x 0, 0, 3 1026; PC64LE-NEXT: addi 3, 5, .LCPI19_2@toc@l 1027; PC64LE-NEXT: lxvd2x 1, 0, 4 1028; PC64LE-NEXT: lxvd2x 2, 0, 3 1029; PC64LE-NEXT: xxswapd 0, 0 1030; PC64LE-NEXT: xxswapd 1, 1 1031; PC64LE-NEXT: xxswapd 2, 2 1032; PC64LE-NEXT: xvadddp 35, 1, 0 1033; PC64LE-NEXT: xvadddp 34, 1, 2 1034; PC64LE-NEXT: blr 1035; 1036; PC64LE9-LABEL: constrained_vector_fadd_v4f64: 1037; PC64LE9: # %bb.0: # %entry 1038; PC64LE9-NEXT: addis 3, 2, .LCPI19_0@toc@ha 1039; PC64LE9-NEXT: addi 3, 3, .LCPI19_0@toc@l 1040; PC64LE9-NEXT: lxvx 0, 0, 3 1041; PC64LE9-NEXT: addis 3, 2, .LCPI19_1@toc@ha 1042; PC64LE9-NEXT: addi 3, 3, .LCPI19_1@toc@l 1043; PC64LE9-NEXT: lxvx 1, 0, 3 1044; PC64LE9-NEXT: addis 3, 2, .LCPI19_2@toc@ha 1045; PC64LE9-NEXT: addi 3, 3, .LCPI19_2@toc@l 1046; PC64LE9-NEXT: xvadddp 35, 1, 0 1047; PC64LE9-NEXT: lxvx 0, 0, 3 1048; PC64LE9-NEXT: xvadddp 34, 1, 0 1049; PC64LE9-NEXT: blr 1050entry: 1051 %add = call <4 x double> @llvm.experimental.constrained.fadd.v4f64( 1052 <4 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF, 1053 double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>, 1054 <4 x double> <double 1.000000e+00, double 1.000000e-01, 1055 double 2.000000e+00, double 2.000000e-01>, 1056 metadata !"round.dynamic", 1057 metadata !"fpexcept.strict") #1 1058 ret <4 x double> %add 1059} 1060 1061define <1 x float> @constrained_vector_fsub_v1f32() #0 { 1062; PC64LE-LABEL: constrained_vector_fsub_v1f32: 1063; PC64LE: # %bb.0: # %entry 1064; PC64LE-NEXT: addis 3, 2, .LCPI20_0@toc@ha 1065; PC64LE-NEXT: addis 4, 2, .LCPI20_1@toc@ha 1066; PC64LE-NEXT: lfs 0, .LCPI20_0@toc@l(3) 1067; PC64LE-NEXT: lfs 1, .LCPI20_1@toc@l(4) 1068; PC64LE-NEXT: xssubsp 1, 1, 0 1069; PC64LE-NEXT: blr 1070; 1071; PC64LE9-LABEL: constrained_vector_fsub_v1f32: 1072; PC64LE9: # %bb.0: # %entry 1073; PC64LE9-NEXT: addis 3, 2, .LCPI20_0@toc@ha 1074; PC64LE9-NEXT: lfs 0, .LCPI20_0@toc@l(3) 1075; PC64LE9-NEXT: addis 3, 2, .LCPI20_1@toc@ha 1076; PC64LE9-NEXT: lfs 1, .LCPI20_1@toc@l(3) 1077; PC64LE9-NEXT: xssubsp 1, 1, 0 1078; PC64LE9-NEXT: blr 1079entry: 1080 %sub = call <1 x float> @llvm.experimental.constrained.fsub.v1f32( 1081 <1 x float> <float 0x7FF0000000000000>, 1082 <1 x float> <float 1.000000e+00>, 1083 metadata !"round.dynamic", 1084 metadata !"fpexcept.strict") #1 1085 ret <1 x float> %sub 1086} 1087 1088define <2 x double> @constrained_vector_fsub_v2f64() #0 { 1089; PC64LE-LABEL: constrained_vector_fsub_v2f64: 1090; PC64LE: # %bb.0: # %entry 1091; PC64LE-NEXT: addis 3, 2, .LCPI21_0@toc@ha 1092; PC64LE-NEXT: addis 4, 2, .LCPI21_1@toc@ha 1093; PC64LE-NEXT: addi 3, 3, .LCPI21_0@toc@l 1094; PC64LE-NEXT: addi 4, 4, .LCPI21_1@toc@l 1095; PC64LE-NEXT: lxvd2x 0, 0, 3 1096; PC64LE-NEXT: lxvd2x 1, 0, 4 1097; PC64LE-NEXT: xxswapd 0, 0 1098; PC64LE-NEXT: xxswapd 1, 1 1099; PC64LE-NEXT: xvsubdp 34, 1, 0 1100; PC64LE-NEXT: blr 1101; 1102; PC64LE9-LABEL: constrained_vector_fsub_v2f64: 1103; PC64LE9: # %bb.0: # %entry 1104; PC64LE9-NEXT: addis 3, 2, .LCPI21_0@toc@ha 1105; PC64LE9-NEXT: addi 3, 3, .LCPI21_0@toc@l 1106; PC64LE9-NEXT: lxvx 0, 0, 3 1107; PC64LE9-NEXT: addis 3, 2, .LCPI21_1@toc@ha 1108; PC64LE9-NEXT: addi 3, 3, .LCPI21_1@toc@l 1109; PC64LE9-NEXT: lxvx 1, 0, 3 1110; PC64LE9-NEXT: xvsubdp 34, 1, 0 1111; PC64LE9-NEXT: blr 1112entry: 1113 %sub = call <2 x double> @llvm.experimental.constrained.fsub.v2f64( 1114 <2 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF>, 1115 <2 x double> <double 1.000000e+00, double 1.000000e-01>, 1116 metadata !"round.dynamic", 1117 metadata !"fpexcept.strict") #1 1118 ret <2 x double> %sub 1119} 1120 1121define <3 x float> @constrained_vector_fsub_v3f32() #0 { 1122; PC64LE-LABEL: constrained_vector_fsub_v3f32: 1123; PC64LE: # %bb.0: # %entry 1124; PC64LE-NEXT: addis 3, 2, .LCPI22_0@toc@ha 1125; PC64LE-NEXT: addis 4, 2, .LCPI22_2@toc@ha 1126; PC64LE-NEXT: addis 5, 2, .LCPI22_1@toc@ha 1127; PC64LE-NEXT: xxlxor 3, 3, 3 1128; PC64LE-NEXT: lfs 0, .LCPI22_0@toc@l(3) 1129; PC64LE-NEXT: lfs 1, .LCPI22_2@toc@l(4) 1130; PC64LE-NEXT: lfs 2, .LCPI22_1@toc@l(5) 1131; PC64LE-NEXT: addis 3, 2, .LCPI22_3@toc@ha 1132; PC64LE-NEXT: addi 3, 3, .LCPI22_3@toc@l 1133; PC64LE-NEXT: xssubsp 1, 0, 1 1134; PC64LE-NEXT: lvx 4, 0, 3 1135; PC64LE-NEXT: xssubsp 2, 0, 2 1136; PC64LE-NEXT: xssubsp 0, 0, 3 1137; PC64LE-NEXT: xscvdpspn 1, 1 1138; PC64LE-NEXT: xscvdpspn 2, 2 1139; PC64LE-NEXT: xscvdpspn 0, 0 1140; PC64LE-NEXT: xxsldwi 34, 1, 1, 3 1141; PC64LE-NEXT: xxsldwi 35, 2, 2, 3 1142; PC64LE-NEXT: vmrghw 2, 3, 2 1143; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 1144; PC64LE-NEXT: vperm 2, 3, 2, 4 1145; PC64LE-NEXT: blr 1146; 1147; PC64LE9-LABEL: constrained_vector_fsub_v3f32: 1148; PC64LE9: # %bb.0: # %entry 1149; PC64LE9-NEXT: addis 3, 2, .LCPI22_0@toc@ha 1150; PC64LE9-NEXT: xxlxor 1, 1, 1 1151; PC64LE9-NEXT: lfs 0, .LCPI22_0@toc@l(3) 1152; PC64LE9-NEXT: addis 3, 2, .LCPI22_1@toc@ha 1153; PC64LE9-NEXT: lfs 2, .LCPI22_1@toc@l(3) 1154; PC64LE9-NEXT: addis 3, 2, .LCPI22_2@toc@ha 1155; PC64LE9-NEXT: lfs 3, .LCPI22_2@toc@l(3) 1156; PC64LE9-NEXT: addis 3, 2, .LCPI22_3@toc@ha 1157; PC64LE9-NEXT: addi 3, 3, .LCPI22_3@toc@l 1158; PC64LE9-NEXT: xssubsp 1, 0, 1 1159; PC64LE9-NEXT: lxvx 36, 0, 3 1160; PC64LE9-NEXT: xssubsp 2, 0, 2 1161; PC64LE9-NEXT: xssubsp 0, 0, 3 1162; PC64LE9-NEXT: xscvdpspn 0, 0 1163; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 1164; PC64LE9-NEXT: xscvdpspn 0, 2 1165; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 1166; PC64LE9-NEXT: xscvdpspn 0, 1 1167; PC64LE9-NEXT: vmrghw 2, 3, 2 1168; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 1169; PC64LE9-NEXT: vperm 2, 3, 2, 4 1170; PC64LE9-NEXT: blr 1171entry: 1172 %sub = call <3 x float> @llvm.experimental.constrained.fsub.v3f32( 1173 <3 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000, 1174 float 0xFFFFFFFFE0000000>, 1175 <3 x float> <float 2.0, float 1.0, float 0.0>, 1176 metadata !"round.dynamic", 1177 metadata !"fpexcept.strict") #1 1178 ret <3 x float> %sub 1179} 1180 1181define <3 x double> @constrained_vector_fsub_v3f64() #0 { 1182; PC64LE-LABEL: constrained_vector_fsub_v3f64: 1183; PC64LE: # %bb.0: # %entry 1184; PC64LE-NEXT: addis 3, 2, .LCPI23_1@toc@ha 1185; PC64LE-NEXT: addis 4, 2, .LCPI23_2@toc@ha 1186; PC64LE-NEXT: addi 3, 3, .LCPI23_1@toc@l 1187; PC64LE-NEXT: addi 4, 4, .LCPI23_2@toc@l 1188; PC64LE-NEXT: lxvd2x 0, 0, 3 1189; PC64LE-NEXT: lxvd2x 1, 0, 4 1190; PC64LE-NEXT: addis 3, 2, .LCPI23_0@toc@ha 1191; PC64LE-NEXT: lfd 3, .LCPI23_0@toc@l(3) 1192; PC64LE-NEXT: xxswapd 0, 0 1193; PC64LE-NEXT: xxswapd 1, 1 1194; PC64LE-NEXT: xvsubdp 2, 1, 0 1195; PC64LE-NEXT: xxlxor 0, 0, 0 1196; PC64LE-NEXT: xssubdp 3, 3, 0 1197; PC64LE-NEXT: xxswapd 1, 2 1198; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1199; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1200; PC64LE-NEXT: blr 1201; 1202; PC64LE9-LABEL: constrained_vector_fsub_v3f64: 1203; PC64LE9: # %bb.0: # %entry 1204; PC64LE9-NEXT: addis 3, 2, .LCPI23_0@toc@ha 1205; PC64LE9-NEXT: xxlxor 1, 1, 1 1206; PC64LE9-NEXT: lfd 0, .LCPI23_0@toc@l(3) 1207; PC64LE9-NEXT: addis 3, 2, .LCPI23_1@toc@ha 1208; PC64LE9-NEXT: addi 3, 3, .LCPI23_1@toc@l 1209; PC64LE9-NEXT: xssubdp 3, 0, 1 1210; PC64LE9-NEXT: lxvx 0, 0, 3 1211; PC64LE9-NEXT: addis 3, 2, .LCPI23_2@toc@ha 1212; PC64LE9-NEXT: addi 3, 3, .LCPI23_2@toc@l 1213; PC64LE9-NEXT: lxvx 1, 0, 3 1214; PC64LE9-NEXT: xvsubdp 2, 1, 0 1215; PC64LE9-NEXT: xxswapd 1, 2 1216; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1217; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1218; PC64LE9-NEXT: blr 1219entry: 1220 %sub = call <3 x double> @llvm.experimental.constrained.fsub.v3f64( 1221 <3 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF, 1222 double 0xFFEFFFFFFFFFFFFF>, 1223 <3 x double> <double 2.0, double 1.0, double 0.0>, 1224 metadata !"round.dynamic", 1225 metadata !"fpexcept.strict") #1 1226 ret <3 x double> %sub 1227} 1228 1229define <4 x double> @constrained_vector_fsub_v4f64() #0 { 1230; PC64LE-LABEL: constrained_vector_fsub_v4f64: 1231; PC64LE: # %bb.0: # %entry 1232; PC64LE-NEXT: addis 3, 2, .LCPI24_0@toc@ha 1233; PC64LE-NEXT: addis 4, 2, .LCPI24_1@toc@ha 1234; PC64LE-NEXT: addis 5, 2, .LCPI24_2@toc@ha 1235; PC64LE-NEXT: addi 3, 3, .LCPI24_0@toc@l 1236; PC64LE-NEXT: addi 4, 4, .LCPI24_1@toc@l 1237; PC64LE-NEXT: lxvd2x 0, 0, 3 1238; PC64LE-NEXT: addi 3, 5, .LCPI24_2@toc@l 1239; PC64LE-NEXT: lxvd2x 1, 0, 4 1240; PC64LE-NEXT: lxvd2x 2, 0, 3 1241; PC64LE-NEXT: xxswapd 0, 0 1242; PC64LE-NEXT: xxswapd 1, 1 1243; PC64LE-NEXT: xxswapd 2, 2 1244; PC64LE-NEXT: xvsubdp 35, 1, 0 1245; PC64LE-NEXT: xvsubdp 34, 1, 2 1246; PC64LE-NEXT: blr 1247; 1248; PC64LE9-LABEL: constrained_vector_fsub_v4f64: 1249; PC64LE9: # %bb.0: # %entry 1250; PC64LE9-NEXT: addis 3, 2, .LCPI24_0@toc@ha 1251; PC64LE9-NEXT: addi 3, 3, .LCPI24_0@toc@l 1252; PC64LE9-NEXT: lxvx 0, 0, 3 1253; PC64LE9-NEXT: addis 3, 2, .LCPI24_1@toc@ha 1254; PC64LE9-NEXT: addi 3, 3, .LCPI24_1@toc@l 1255; PC64LE9-NEXT: lxvx 1, 0, 3 1256; PC64LE9-NEXT: addis 3, 2, .LCPI24_2@toc@ha 1257; PC64LE9-NEXT: addi 3, 3, .LCPI24_2@toc@l 1258; PC64LE9-NEXT: xvsubdp 35, 1, 0 1259; PC64LE9-NEXT: lxvx 0, 0, 3 1260; PC64LE9-NEXT: xvsubdp 34, 1, 0 1261; PC64LE9-NEXT: blr 1262entry: 1263 %sub = call <4 x double> @llvm.experimental.constrained.fsub.v4f64( 1264 <4 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF, 1265 double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF>, 1266 <4 x double> <double 1.000000e+00, double 1.000000e-01, 1267 double 2.000000e+00, double 2.000000e-01>, 1268 metadata !"round.dynamic", 1269 metadata !"fpexcept.strict") #1 1270 ret <4 x double> %sub 1271} 1272 1273define <1 x float> @constrained_vector_sqrt_v1f32() #0 { 1274; PC64LE-LABEL: constrained_vector_sqrt_v1f32: 1275; PC64LE: # %bb.0: # %entry 1276; PC64LE-NEXT: addis 3, 2, .LCPI25_0@toc@ha 1277; PC64LE-NEXT: lfs 0, .LCPI25_0@toc@l(3) 1278; PC64LE-NEXT: xssqrtsp 1, 0 1279; PC64LE-NEXT: blr 1280; 1281; PC64LE9-LABEL: constrained_vector_sqrt_v1f32: 1282; PC64LE9: # %bb.0: # %entry 1283; PC64LE9-NEXT: addis 3, 2, .LCPI25_0@toc@ha 1284; PC64LE9-NEXT: lfs 0, .LCPI25_0@toc@l(3) 1285; PC64LE9-NEXT: xssqrtsp 1, 0 1286; PC64LE9-NEXT: blr 1287entry: 1288 %sqrt = call <1 x float> @llvm.experimental.constrained.sqrt.v1f32( 1289 <1 x float> <float 42.0>, 1290 metadata !"round.dynamic", 1291 metadata !"fpexcept.strict") #1 1292 ret <1 x float> %sqrt 1293} 1294 1295define <2 x double> @constrained_vector_sqrt_v2f64() #0 { 1296; PC64LE-LABEL: constrained_vector_sqrt_v2f64: 1297; PC64LE: # %bb.0: # %entry 1298; PC64LE-NEXT: addis 3, 2, .LCPI26_0@toc@ha 1299; PC64LE-NEXT: addi 3, 3, .LCPI26_0@toc@l 1300; PC64LE-NEXT: lxvd2x 0, 0, 3 1301; PC64LE-NEXT: xxswapd 0, 0 1302; PC64LE-NEXT: xvsqrtdp 34, 0 1303; PC64LE-NEXT: blr 1304; 1305; PC64LE9-LABEL: constrained_vector_sqrt_v2f64: 1306; PC64LE9: # %bb.0: # %entry 1307; PC64LE9-NEXT: addis 3, 2, .LCPI26_0@toc@ha 1308; PC64LE9-NEXT: addi 3, 3, .LCPI26_0@toc@l 1309; PC64LE9-NEXT: lxvx 0, 0, 3 1310; PC64LE9-NEXT: xvsqrtdp 34, 0 1311; PC64LE9-NEXT: blr 1312entry: 1313 %sqrt = call <2 x double> @llvm.experimental.constrained.sqrt.v2f64( 1314 <2 x double> <double 42.0, double 42.1>, 1315 metadata !"round.dynamic", 1316 metadata !"fpexcept.strict") #1 1317 ret <2 x double> %sqrt 1318} 1319 1320define <3 x float> @constrained_vector_sqrt_v3f32() #0 { 1321; PC64LE-LABEL: constrained_vector_sqrt_v3f32: 1322; PC64LE: # %bb.0: # %entry 1323; PC64LE-NEXT: addis 3, 2, .LCPI27_2@toc@ha 1324; PC64LE-NEXT: addis 4, 2, .LCPI27_1@toc@ha 1325; PC64LE-NEXT: lfs 0, .LCPI27_2@toc@l(3) 1326; PC64LE-NEXT: lfs 1, .LCPI27_1@toc@l(4) 1327; PC64LE-NEXT: addis 3, 2, .LCPI27_0@toc@ha 1328; PC64LE-NEXT: xssqrtsp 0, 0 1329; PC64LE-NEXT: lfs 2, .LCPI27_0@toc@l(3) 1330; PC64LE-NEXT: addis 3, 2, .LCPI27_3@toc@ha 1331; PC64LE-NEXT: xssqrtsp 1, 1 1332; PC64LE-NEXT: addi 3, 3, .LCPI27_3@toc@l 1333; PC64LE-NEXT: xssqrtsp 2, 2 1334; PC64LE-NEXT: xscvdpspn 0, 0 1335; PC64LE-NEXT: xscvdpspn 1, 1 1336; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 1337; PC64LE-NEXT: xscvdpspn 0, 2 1338; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 1339; PC64LE-NEXT: vmrghw 2, 3, 2 1340; PC64LE-NEXT: lvx 3, 0, 3 1341; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 1342; PC64LE-NEXT: vperm 2, 4, 2, 3 1343; PC64LE-NEXT: blr 1344; 1345; PC64LE9-LABEL: constrained_vector_sqrt_v3f32: 1346; PC64LE9: # %bb.0: # %entry 1347; PC64LE9-NEXT: addis 3, 2, .LCPI27_0@toc@ha 1348; PC64LE9-NEXT: lfs 0, .LCPI27_0@toc@l(3) 1349; PC64LE9-NEXT: addis 3, 2, .LCPI27_1@toc@ha 1350; PC64LE9-NEXT: lfs 1, .LCPI27_1@toc@l(3) 1351; PC64LE9-NEXT: addis 3, 2, .LCPI27_2@toc@ha 1352; PC64LE9-NEXT: xssqrtsp 0, 0 1353; PC64LE9-NEXT: lfs 2, .LCPI27_2@toc@l(3) 1354; PC64LE9-NEXT: addis 3, 2, .LCPI27_3@toc@ha 1355; PC64LE9-NEXT: addi 3, 3, .LCPI27_3@toc@l 1356; PC64LE9-NEXT: xssqrtsp 1, 1 1357; PC64LE9-NEXT: xssqrtsp 2, 2 1358; PC64LE9-NEXT: xscvdpspn 0, 0 1359; PC64LE9-NEXT: xscvdpspn 1, 1 1360; PC64LE9-NEXT: xscvdpspn 2, 2 1361; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 1362; PC64LE9-NEXT: xxsldwi 35, 1, 1, 3 1363; PC64LE9-NEXT: xxsldwi 34, 2, 2, 3 1364; PC64LE9-NEXT: vmrghw 2, 3, 2 1365; PC64LE9-NEXT: lxvx 35, 0, 3 1366; PC64LE9-NEXT: vperm 2, 4, 2, 3 1367; PC64LE9-NEXT: blr 1368entry: 1369 %sqrt = call <3 x float> @llvm.experimental.constrained.sqrt.v3f32( 1370 <3 x float> <float 42.0, float 43.0, float 44.0>, 1371 metadata !"round.dynamic", 1372 metadata !"fpexcept.strict") #1 1373 ret <3 x float> %sqrt 1374} 1375 1376define <3 x double> @constrained_vector_sqrt_v3f64() #0 { 1377; PC64LE-LABEL: constrained_vector_sqrt_v3f64: 1378; PC64LE: # %bb.0: # %entry 1379; PC64LE-NEXT: addis 3, 2, .LCPI28_1@toc@ha 1380; PC64LE-NEXT: addi 3, 3, .LCPI28_1@toc@l 1381; PC64LE-NEXT: lxvd2x 0, 0, 3 1382; PC64LE-NEXT: addis 3, 2, .LCPI28_0@toc@ha 1383; PC64LE-NEXT: lfd 1, .LCPI28_0@toc@l(3) 1384; PC64LE-NEXT: xxswapd 0, 0 1385; PC64LE-NEXT: xssqrtdp 3, 1 1386; PC64LE-NEXT: xvsqrtdp 2, 0 1387; PC64LE-NEXT: xxswapd 1, 2 1388; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1389; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1390; PC64LE-NEXT: blr 1391; 1392; PC64LE9-LABEL: constrained_vector_sqrt_v3f64: 1393; PC64LE9: # %bb.0: # %entry 1394; PC64LE9-NEXT: addis 3, 2, .LCPI28_0@toc@ha 1395; PC64LE9-NEXT: lfd 0, .LCPI28_0@toc@l(3) 1396; PC64LE9-NEXT: addis 3, 2, .LCPI28_1@toc@ha 1397; PC64LE9-NEXT: addi 3, 3, .LCPI28_1@toc@l 1398; PC64LE9-NEXT: xssqrtdp 3, 0 1399; PC64LE9-NEXT: lxvx 0, 0, 3 1400; PC64LE9-NEXT: xvsqrtdp 2, 0 1401; PC64LE9-NEXT: xxswapd 1, 2 1402; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1403; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1404; PC64LE9-NEXT: blr 1405entry: 1406 %sqrt = call <3 x double> @llvm.experimental.constrained.sqrt.v3f64( 1407 <3 x double> <double 42.0, double 42.1, double 42.2>, 1408 metadata !"round.dynamic", 1409 metadata !"fpexcept.strict") #1 1410 ret <3 x double> %sqrt 1411} 1412 1413define <4 x double> @constrained_vector_sqrt_v4f64() #0 { 1414; PC64LE-LABEL: constrained_vector_sqrt_v4f64: 1415; PC64LE: # %bb.0: # %entry 1416; PC64LE-NEXT: addis 3, 2, .LCPI29_0@toc@ha 1417; PC64LE-NEXT: addis 4, 2, .LCPI29_1@toc@ha 1418; PC64LE-NEXT: addi 3, 3, .LCPI29_0@toc@l 1419; PC64LE-NEXT: addi 4, 4, .LCPI29_1@toc@l 1420; PC64LE-NEXT: lxvd2x 0, 0, 3 1421; PC64LE-NEXT: lxvd2x 1, 0, 4 1422; PC64LE-NEXT: xxswapd 0, 0 1423; PC64LE-NEXT: xxswapd 1, 1 1424; PC64LE-NEXT: xvsqrtdp 35, 0 1425; PC64LE-NEXT: xvsqrtdp 34, 1 1426; PC64LE-NEXT: blr 1427; 1428; PC64LE9-LABEL: constrained_vector_sqrt_v4f64: 1429; PC64LE9: # %bb.0: # %entry 1430; PC64LE9-NEXT: addis 3, 2, .LCPI29_0@toc@ha 1431; PC64LE9-NEXT: addi 3, 3, .LCPI29_0@toc@l 1432; PC64LE9-NEXT: lxvx 0, 0, 3 1433; PC64LE9-NEXT: addis 3, 2, .LCPI29_1@toc@ha 1434; PC64LE9-NEXT: addi 3, 3, .LCPI29_1@toc@l 1435; PC64LE9-NEXT: xvsqrtdp 35, 0 1436; PC64LE9-NEXT: lxvx 0, 0, 3 1437; PC64LE9-NEXT: xvsqrtdp 34, 0 1438; PC64LE9-NEXT: blr 1439 entry: 1440 %sqrt = call <4 x double> @llvm.experimental.constrained.sqrt.v4f64( 1441 <4 x double> <double 42.0, double 42.1, 1442 double 42.2, double 42.3>, 1443 metadata !"round.dynamic", 1444 metadata !"fpexcept.strict") #1 1445 ret <4 x double> %sqrt 1446} 1447 1448define <1 x float> @constrained_vector_pow_v1f32() #0 { 1449; PC64LE-LABEL: constrained_vector_pow_v1f32: 1450; PC64LE: # %bb.0: # %entry 1451; PC64LE-NEXT: mflr 0 1452; PC64LE-NEXT: std 0, 16(1) 1453; PC64LE-NEXT: stdu 1, -32(1) 1454; PC64LE-NEXT: addis 3, 2, .LCPI30_0@toc@ha 1455; PC64LE-NEXT: addis 4, 2, .LCPI30_1@toc@ha 1456; PC64LE-NEXT: lfs 1, .LCPI30_0@toc@l(3) 1457; PC64LE-NEXT: lfs 2, .LCPI30_1@toc@l(4) 1458; PC64LE-NEXT: bl powf 1459; PC64LE-NEXT: nop 1460; PC64LE-NEXT: addi 1, 1, 32 1461; PC64LE-NEXT: ld 0, 16(1) 1462; PC64LE-NEXT: mtlr 0 1463; PC64LE-NEXT: blr 1464; 1465; PC64LE9-LABEL: constrained_vector_pow_v1f32: 1466; PC64LE9: # %bb.0: # %entry 1467; PC64LE9-NEXT: mflr 0 1468; PC64LE9-NEXT: std 0, 16(1) 1469; PC64LE9-NEXT: stdu 1, -32(1) 1470; PC64LE9-NEXT: addis 3, 2, .LCPI30_0@toc@ha 1471; PC64LE9-NEXT: lfs 1, .LCPI30_0@toc@l(3) 1472; PC64LE9-NEXT: addis 3, 2, .LCPI30_1@toc@ha 1473; PC64LE9-NEXT: lfs 2, .LCPI30_1@toc@l(3) 1474; PC64LE9-NEXT: bl powf 1475; PC64LE9-NEXT: nop 1476; PC64LE9-NEXT: addi 1, 1, 32 1477; PC64LE9-NEXT: ld 0, 16(1) 1478; PC64LE9-NEXT: mtlr 0 1479; PC64LE9-NEXT: blr 1480entry: 1481 %pow = call <1 x float> @llvm.experimental.constrained.pow.v1f32( 1482 <1 x float> <float 42.0>, 1483 <1 x float> <float 3.0>, 1484 metadata !"round.dynamic", 1485 metadata !"fpexcept.strict") #1 1486 ret <1 x float> %pow 1487} 1488 1489define <2 x double> @constrained_vector_pow_v2f64() #0 { 1490; PC64LE-LABEL: constrained_vector_pow_v2f64: 1491; PC64LE: # %bb.0: # %entry 1492; PC64LE-NEXT: mflr 0 1493; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1494; PC64LE-NEXT: std 0, 16(1) 1495; PC64LE-NEXT: stdu 1, -80(1) 1496; PC64LE-NEXT: addis 4, 2, .LCPI31_1@toc@ha 1497; PC64LE-NEXT: addis 3, 2, .LCPI31_0@toc@ha 1498; PC64LE-NEXT: lfs 31, .LCPI31_1@toc@l(4) 1499; PC64LE-NEXT: lfd 1, .LCPI31_0@toc@l(3) 1500; PC64LE-NEXT: fmr 2, 31 1501; PC64LE-NEXT: bl pow 1502; PC64LE-NEXT: nop 1503; PC64LE-NEXT: li 3, 48 1504; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1505; PC64LE-NEXT: fmr 2, 31 1506; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 1507; PC64LE-NEXT: addis 3, 2, .LCPI31_2@toc@ha 1508; PC64LE-NEXT: lfd 1, .LCPI31_2@toc@l(3) 1509; PC64LE-NEXT: bl pow 1510; PC64LE-NEXT: nop 1511; PC64LE-NEXT: li 3, 48 1512; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1513; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 1514; PC64LE-NEXT: xxmrghd 34, 1, 0 1515; PC64LE-NEXT: addi 1, 1, 80 1516; PC64LE-NEXT: ld 0, 16(1) 1517; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1518; PC64LE-NEXT: mtlr 0 1519; PC64LE-NEXT: blr 1520; 1521; PC64LE9-LABEL: constrained_vector_pow_v2f64: 1522; PC64LE9: # %bb.0: # %entry 1523; PC64LE9-NEXT: mflr 0 1524; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1525; PC64LE9-NEXT: std 0, 16(1) 1526; PC64LE9-NEXT: stdu 1, -64(1) 1527; PC64LE9-NEXT: addis 3, 2, .LCPI31_0@toc@ha 1528; PC64LE9-NEXT: lfd 1, .LCPI31_0@toc@l(3) 1529; PC64LE9-NEXT: addis 3, 2, .LCPI31_1@toc@ha 1530; PC64LE9-NEXT: lfs 31, .LCPI31_1@toc@l(3) 1531; PC64LE9-NEXT: fmr 2, 31 1532; PC64LE9-NEXT: bl pow 1533; PC64LE9-NEXT: nop 1534; PC64LE9-NEXT: addis 3, 2, .LCPI31_2@toc@ha 1535; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1536; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 1537; PC64LE9-NEXT: fmr 2, 31 1538; PC64LE9-NEXT: lfd 1, .LCPI31_2@toc@l(3) 1539; PC64LE9-NEXT: bl pow 1540; PC64LE9-NEXT: nop 1541; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 1542; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1543; PC64LE9-NEXT: xxmrghd 34, 1, 0 1544; PC64LE9-NEXT: addi 1, 1, 64 1545; PC64LE9-NEXT: ld 0, 16(1) 1546; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1547; PC64LE9-NEXT: mtlr 0 1548; PC64LE9-NEXT: blr 1549entry: 1550 %pow = call <2 x double> @llvm.experimental.constrained.pow.v2f64( 1551 <2 x double> <double 42.1, double 42.2>, 1552 <2 x double> <double 3.0, double 3.0>, 1553 metadata !"round.dynamic", 1554 metadata !"fpexcept.strict") #1 1555 ret <2 x double> %pow 1556} 1557 1558define <3 x float> @constrained_vector_pow_v3f32() #0 { 1559; PC64LE-LABEL: constrained_vector_pow_v3f32: 1560; PC64LE: # %bb.0: # %entry 1561; PC64LE-NEXT: mflr 0 1562; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 1563; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 1564; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1565; PC64LE-NEXT: std 0, 16(1) 1566; PC64LE-NEXT: stdu 1, -64(1) 1567; PC64LE-NEXT: addis 4, 2, .LCPI32_1@toc@ha 1568; PC64LE-NEXT: addis 3, 2, .LCPI32_0@toc@ha 1569; PC64LE-NEXT: lfs 31, .LCPI32_1@toc@l(4) 1570; PC64LE-NEXT: lfs 1, .LCPI32_0@toc@l(3) 1571; PC64LE-NEXT: fmr 2, 31 1572; PC64LE-NEXT: bl powf 1573; PC64LE-NEXT: nop 1574; PC64LE-NEXT: addis 3, 2, .LCPI32_2@toc@ha 1575; PC64LE-NEXT: fmr 2, 31 1576; PC64LE-NEXT: fmr 30, 1 1577; PC64LE-NEXT: lfs 1, .LCPI32_2@toc@l(3) 1578; PC64LE-NEXT: bl powf 1579; PC64LE-NEXT: nop 1580; PC64LE-NEXT: addis 3, 2, .LCPI32_3@toc@ha 1581; PC64LE-NEXT: fmr 2, 31 1582; PC64LE-NEXT: fmr 29, 1 1583; PC64LE-NEXT: lfs 1, .LCPI32_3@toc@l(3) 1584; PC64LE-NEXT: bl powf 1585; PC64LE-NEXT: nop 1586; PC64LE-NEXT: xscvdpspn 0, 29 1587; PC64LE-NEXT: addis 3, 2, .LCPI32_4@toc@ha 1588; PC64LE-NEXT: xscvdpspn 1, 1 1589; PC64LE-NEXT: addi 3, 3, .LCPI32_4@toc@l 1590; PC64LE-NEXT: lvx 4, 0, 3 1591; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 1592; PC64LE-NEXT: xscvdpspn 0, 30 1593; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 1594; PC64LE-NEXT: vmrghw 2, 2, 3 1595; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 1596; PC64LE-NEXT: vperm 2, 3, 2, 4 1597; PC64LE-NEXT: addi 1, 1, 64 1598; PC64LE-NEXT: ld 0, 16(1) 1599; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1600; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 1601; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 1602; PC64LE-NEXT: mtlr 0 1603; PC64LE-NEXT: blr 1604; 1605; PC64LE9-LABEL: constrained_vector_pow_v3f32: 1606; PC64LE9: # %bb.0: # %entry 1607; PC64LE9-NEXT: mflr 0 1608; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 1609; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 1610; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1611; PC64LE9-NEXT: std 0, 16(1) 1612; PC64LE9-NEXT: stdu 1, -64(1) 1613; PC64LE9-NEXT: addis 3, 2, .LCPI32_0@toc@ha 1614; PC64LE9-NEXT: lfs 1, .LCPI32_0@toc@l(3) 1615; PC64LE9-NEXT: addis 3, 2, .LCPI32_1@toc@ha 1616; PC64LE9-NEXT: lfs 31, .LCPI32_1@toc@l(3) 1617; PC64LE9-NEXT: fmr 2, 31 1618; PC64LE9-NEXT: bl powf 1619; PC64LE9-NEXT: nop 1620; PC64LE9-NEXT: addis 3, 2, .LCPI32_2@toc@ha 1621; PC64LE9-NEXT: fmr 30, 1 1622; PC64LE9-NEXT: fmr 2, 31 1623; PC64LE9-NEXT: lfs 1, .LCPI32_2@toc@l(3) 1624; PC64LE9-NEXT: bl powf 1625; PC64LE9-NEXT: nop 1626; PC64LE9-NEXT: addis 3, 2, .LCPI32_3@toc@ha 1627; PC64LE9-NEXT: fmr 29, 1 1628; PC64LE9-NEXT: fmr 2, 31 1629; PC64LE9-NEXT: lfs 1, .LCPI32_3@toc@l(3) 1630; PC64LE9-NEXT: bl powf 1631; PC64LE9-NEXT: nop 1632; PC64LE9-NEXT: xscvdpspn 0, 1 1633; PC64LE9-NEXT: addis 3, 2, .LCPI32_4@toc@ha 1634; PC64LE9-NEXT: addi 3, 3, .LCPI32_4@toc@l 1635; PC64LE9-NEXT: lxvx 36, 0, 3 1636; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 1637; PC64LE9-NEXT: xscvdpspn 0, 29 1638; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 1639; PC64LE9-NEXT: xscvdpspn 0, 30 1640; PC64LE9-NEXT: vmrghw 2, 3, 2 1641; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 1642; PC64LE9-NEXT: vperm 2, 3, 2, 4 1643; PC64LE9-NEXT: addi 1, 1, 64 1644; PC64LE9-NEXT: ld 0, 16(1) 1645; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1646; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 1647; PC64LE9-NEXT: mtlr 0 1648; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 1649; PC64LE9-NEXT: blr 1650entry: 1651 %pow = call <3 x float> @llvm.experimental.constrained.pow.v3f32( 1652 <3 x float> <float 42.0, float 43.0, float 44.0>, 1653 <3 x float> <float 3.0, float 3.0, float 3.0>, 1654 metadata !"round.dynamic", 1655 metadata !"fpexcept.strict") #1 1656 ret <3 x float> %pow 1657} 1658 1659define <3 x double> @constrained_vector_pow_v3f64() #0 { 1660; PC64LE-LABEL: constrained_vector_pow_v3f64: 1661; PC64LE: # %bb.0: # %entry 1662; PC64LE-NEXT: mflr 0 1663; PC64LE-NEXT: std 0, 16(1) 1664; PC64LE-NEXT: stdu 1, -96(1) 1665; PC64LE-NEXT: addis 4, 2, .LCPI33_1@toc@ha 1666; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 1667; PC64LE-NEXT: li 3, 64 1668; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 1669; PC64LE-NEXT: addis 3, 2, .LCPI33_0@toc@ha 1670; PC64LE-NEXT: lfs 31, .LCPI33_1@toc@l(4) 1671; PC64LE-NEXT: lfs 1, .LCPI33_0@toc@l(3) 1672; PC64LE-NEXT: fmr 2, 31 1673; PC64LE-NEXT: bl pow 1674; PC64LE-NEXT: nop 1675; PC64LE-NEXT: li 3, 48 1676; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1677; PC64LE-NEXT: fmr 2, 31 1678; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 1679; PC64LE-NEXT: addis 3, 2, .LCPI33_2@toc@ha 1680; PC64LE-NEXT: lfd 1, .LCPI33_2@toc@l(3) 1681; PC64LE-NEXT: bl pow 1682; PC64LE-NEXT: nop 1683; PC64LE-NEXT: li 3, 48 1684; PC64LE-NEXT: fmr 2, 31 1685; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1686; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 1687; PC64LE-NEXT: addis 3, 2, .LCPI33_3@toc@ha 1688; PC64LE-NEXT: xxmrghd 63, 1, 0 1689; PC64LE-NEXT: lfd 1, .LCPI33_3@toc@l(3) 1690; PC64LE-NEXT: bl pow 1691; PC64LE-NEXT: nop 1692; PC64LE-NEXT: xxswapd 0, 63 1693; PC64LE-NEXT: li 3, 64 1694; PC64LE-NEXT: xxlor 2, 63, 63 1695; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 1696; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 1697; PC64LE-NEXT: fmr 3, 1 1698; PC64LE-NEXT: fmr 1, 0 1699; PC64LE-NEXT: addi 1, 1, 96 1700; PC64LE-NEXT: ld 0, 16(1) 1701; PC64LE-NEXT: mtlr 0 1702; PC64LE-NEXT: blr 1703; 1704; PC64LE9-LABEL: constrained_vector_pow_v3f64: 1705; PC64LE9: # %bb.0: # %entry 1706; PC64LE9-NEXT: mflr 0 1707; PC64LE9-NEXT: std 0, 16(1) 1708; PC64LE9-NEXT: stdu 1, -80(1) 1709; PC64LE9-NEXT: addis 3, 2, .LCPI33_0@toc@ha 1710; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 1711; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 1712; PC64LE9-NEXT: lfs 1, .LCPI33_0@toc@l(3) 1713; PC64LE9-NEXT: addis 3, 2, .LCPI33_1@toc@ha 1714; PC64LE9-NEXT: lfs 31, .LCPI33_1@toc@l(3) 1715; PC64LE9-NEXT: fmr 2, 31 1716; PC64LE9-NEXT: bl pow 1717; PC64LE9-NEXT: nop 1718; PC64LE9-NEXT: addis 3, 2, .LCPI33_2@toc@ha 1719; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1720; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 1721; PC64LE9-NEXT: fmr 2, 31 1722; PC64LE9-NEXT: lfd 1, .LCPI33_2@toc@l(3) 1723; PC64LE9-NEXT: bl pow 1724; PC64LE9-NEXT: nop 1725; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 1726; PC64LE9-NEXT: addis 3, 2, .LCPI33_3@toc@ha 1727; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1728; PC64LE9-NEXT: fmr 2, 31 1729; PC64LE9-NEXT: xxmrghd 63, 1, 0 1730; PC64LE9-NEXT: lfd 1, .LCPI33_3@toc@l(3) 1731; PC64LE9-NEXT: bl pow 1732; PC64LE9-NEXT: nop 1733; PC64LE9-NEXT: fmr 3, 1 1734; PC64LE9-NEXT: xxswapd 1, 63 1735; PC64LE9-NEXT: xscpsgndp 2, 63, 63 1736; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 1737; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 1738; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1739; PC64LE9-NEXT: addi 1, 1, 80 1740; PC64LE9-NEXT: ld 0, 16(1) 1741; PC64LE9-NEXT: mtlr 0 1742; PC64LE9-NEXT: blr 1743entry: 1744 %pow = call <3 x double> @llvm.experimental.constrained.pow.v3f64( 1745 <3 x double> <double 42.0, double 42.1, double 42.2>, 1746 <3 x double> <double 3.0, double 3.0, double 3.0>, 1747 metadata !"round.dynamic", 1748 metadata !"fpexcept.strict") #1 1749 ret <3 x double> %pow 1750} 1751 1752define <4 x double> @constrained_vector_pow_v4f64() #0 { 1753; PC64LE-LABEL: constrained_vector_pow_v4f64: 1754; PC64LE: # %bb.0: # %entry 1755; PC64LE-NEXT: mflr 0 1756; PC64LE-NEXT: std 0, 16(1) 1757; PC64LE-NEXT: stdu 1, -96(1) 1758; PC64LE-NEXT: addis 4, 2, .LCPI34_1@toc@ha 1759; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 1760; PC64LE-NEXT: li 3, 64 1761; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 1762; PC64LE-NEXT: addis 3, 2, .LCPI34_0@toc@ha 1763; PC64LE-NEXT: lfs 31, .LCPI34_1@toc@l(4) 1764; PC64LE-NEXT: lfd 1, .LCPI34_0@toc@l(3) 1765; PC64LE-NEXT: fmr 2, 31 1766; PC64LE-NEXT: bl pow 1767; PC64LE-NEXT: nop 1768; PC64LE-NEXT: li 3, 48 1769; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1770; PC64LE-NEXT: fmr 2, 31 1771; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 1772; PC64LE-NEXT: addis 3, 2, .LCPI34_2@toc@ha 1773; PC64LE-NEXT: lfd 1, .LCPI34_2@toc@l(3) 1774; PC64LE-NEXT: bl pow 1775; PC64LE-NEXT: nop 1776; PC64LE-NEXT: li 3, 48 1777; PC64LE-NEXT: fmr 2, 31 1778; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1779; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 1780; PC64LE-NEXT: addis 3, 2, .LCPI34_3@toc@ha 1781; PC64LE-NEXT: xxmrghd 63, 1, 0 1782; PC64LE-NEXT: lfd 1, .LCPI34_3@toc@l(3) 1783; PC64LE-NEXT: bl pow 1784; PC64LE-NEXT: nop 1785; PC64LE-NEXT: li 3, 48 1786; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1787; PC64LE-NEXT: fmr 2, 31 1788; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 1789; PC64LE-NEXT: addis 3, 2, .LCPI34_4@toc@ha 1790; PC64LE-NEXT: lfd 1, .LCPI34_4@toc@l(3) 1791; PC64LE-NEXT: bl pow 1792; PC64LE-NEXT: nop 1793; PC64LE-NEXT: li 3, 48 1794; PC64LE-NEXT: vmr 2, 31 1795; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 1796; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1797; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 1798; PC64LE-NEXT: li 3, 64 1799; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 1800; PC64LE-NEXT: xxmrghd 35, 1, 0 1801; PC64LE-NEXT: addi 1, 1, 96 1802; PC64LE-NEXT: ld 0, 16(1) 1803; PC64LE-NEXT: mtlr 0 1804; PC64LE-NEXT: blr 1805; 1806; PC64LE9-LABEL: constrained_vector_pow_v4f64: 1807; PC64LE9: # %bb.0: # %entry 1808; PC64LE9-NEXT: mflr 0 1809; PC64LE9-NEXT: std 0, 16(1) 1810; PC64LE9-NEXT: stdu 1, -80(1) 1811; PC64LE9-NEXT: addis 3, 2, .LCPI34_0@toc@ha 1812; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 1813; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 1814; PC64LE9-NEXT: lfd 1, .LCPI34_0@toc@l(3) 1815; PC64LE9-NEXT: addis 3, 2, .LCPI34_1@toc@ha 1816; PC64LE9-NEXT: lfs 31, .LCPI34_1@toc@l(3) 1817; PC64LE9-NEXT: fmr 2, 31 1818; PC64LE9-NEXT: bl pow 1819; PC64LE9-NEXT: nop 1820; PC64LE9-NEXT: addis 3, 2, .LCPI34_2@toc@ha 1821; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1822; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 1823; PC64LE9-NEXT: fmr 2, 31 1824; PC64LE9-NEXT: lfd 1, .LCPI34_2@toc@l(3) 1825; PC64LE9-NEXT: bl pow 1826; PC64LE9-NEXT: nop 1827; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 1828; PC64LE9-NEXT: addis 3, 2, .LCPI34_3@toc@ha 1829; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1830; PC64LE9-NEXT: fmr 2, 31 1831; PC64LE9-NEXT: xxmrghd 63, 1, 0 1832; PC64LE9-NEXT: lfd 1, .LCPI34_3@toc@l(3) 1833; PC64LE9-NEXT: bl pow 1834; PC64LE9-NEXT: nop 1835; PC64LE9-NEXT: addis 3, 2, .LCPI34_4@toc@ha 1836; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1837; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 1838; PC64LE9-NEXT: fmr 2, 31 1839; PC64LE9-NEXT: lfd 1, .LCPI34_4@toc@l(3) 1840; PC64LE9-NEXT: bl pow 1841; PC64LE9-NEXT: nop 1842; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 1843; PC64LE9-NEXT: vmr 2, 31 1844; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 1845; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 1846; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1847; PC64LE9-NEXT: xxmrghd 35, 1, 0 1848; PC64LE9-NEXT: addi 1, 1, 80 1849; PC64LE9-NEXT: ld 0, 16(1) 1850; PC64LE9-NEXT: mtlr 0 1851; PC64LE9-NEXT: blr 1852entry: 1853 %pow = call <4 x double> @llvm.experimental.constrained.pow.v4f64( 1854 <4 x double> <double 42.1, double 42.2, 1855 double 42.3, double 42.4>, 1856 <4 x double> <double 3.0, double 3.0, 1857 double 3.0, double 3.0>, 1858 metadata !"round.dynamic", 1859 metadata !"fpexcept.strict") #1 1860 ret <4 x double> %pow 1861} 1862 1863define <1 x float> @constrained_vector_powi_v1f32() #0 { 1864; PC64LE-LABEL: constrained_vector_powi_v1f32: 1865; PC64LE: # %bb.0: # %entry 1866; PC64LE-NEXT: mflr 0 1867; PC64LE-NEXT: std 0, 16(1) 1868; PC64LE-NEXT: stdu 1, -32(1) 1869; PC64LE-NEXT: addis 3, 2, .LCPI35_0@toc@ha 1870; PC64LE-NEXT: li 4, 3 1871; PC64LE-NEXT: lfs 1, .LCPI35_0@toc@l(3) 1872; PC64LE-NEXT: bl __powisf2 1873; PC64LE-NEXT: nop 1874; PC64LE-NEXT: addi 1, 1, 32 1875; PC64LE-NEXT: ld 0, 16(1) 1876; PC64LE-NEXT: mtlr 0 1877; PC64LE-NEXT: blr 1878; 1879; PC64LE9-LABEL: constrained_vector_powi_v1f32: 1880; PC64LE9: # %bb.0: # %entry 1881; PC64LE9-NEXT: mflr 0 1882; PC64LE9-NEXT: std 0, 16(1) 1883; PC64LE9-NEXT: stdu 1, -32(1) 1884; PC64LE9-NEXT: addis 3, 2, .LCPI35_0@toc@ha 1885; PC64LE9-NEXT: li 4, 3 1886; PC64LE9-NEXT: lfs 1, .LCPI35_0@toc@l(3) 1887; PC64LE9-NEXT: bl __powisf2 1888; PC64LE9-NEXT: nop 1889; PC64LE9-NEXT: addi 1, 1, 32 1890; PC64LE9-NEXT: ld 0, 16(1) 1891; PC64LE9-NEXT: mtlr 0 1892; PC64LE9-NEXT: blr 1893entry: 1894 %powi = call <1 x float> @llvm.experimental.constrained.powi.v1f32( 1895 <1 x float> <float 42.0>, 1896 i32 3, 1897 metadata !"round.dynamic", 1898 metadata !"fpexcept.strict") #1 1899 ret <1 x float> %powi 1900} 1901 1902define <2 x double> @constrained_vector_powi_v2f64() #0 { 1903; PC64LE-LABEL: constrained_vector_powi_v2f64: 1904; PC64LE: # %bb.0: # %entry 1905; PC64LE-NEXT: mflr 0 1906; PC64LE-NEXT: std 0, 16(1) 1907; PC64LE-NEXT: stdu 1, -64(1) 1908; PC64LE-NEXT: addis 3, 2, .LCPI36_0@toc@ha 1909; PC64LE-NEXT: li 4, 3 1910; PC64LE-NEXT: lfd 1, .LCPI36_0@toc@l(3) 1911; PC64LE-NEXT: bl __powidf2 1912; PC64LE-NEXT: nop 1913; PC64LE-NEXT: li 3, 48 1914; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1915; PC64LE-NEXT: li 4, 3 1916; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 1917; PC64LE-NEXT: addis 3, 2, .LCPI36_1@toc@ha 1918; PC64LE-NEXT: lfd 1, .LCPI36_1@toc@l(3) 1919; PC64LE-NEXT: bl __powidf2 1920; PC64LE-NEXT: nop 1921; PC64LE-NEXT: li 3, 48 1922; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1923; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 1924; PC64LE-NEXT: xxmrghd 34, 1, 0 1925; PC64LE-NEXT: addi 1, 1, 64 1926; PC64LE-NEXT: ld 0, 16(1) 1927; PC64LE-NEXT: mtlr 0 1928; PC64LE-NEXT: blr 1929; 1930; PC64LE9-LABEL: constrained_vector_powi_v2f64: 1931; PC64LE9: # %bb.0: # %entry 1932; PC64LE9-NEXT: mflr 0 1933; PC64LE9-NEXT: std 0, 16(1) 1934; PC64LE9-NEXT: stdu 1, -48(1) 1935; PC64LE9-NEXT: addis 3, 2, .LCPI36_0@toc@ha 1936; PC64LE9-NEXT: li 4, 3 1937; PC64LE9-NEXT: lfd 1, .LCPI36_0@toc@l(3) 1938; PC64LE9-NEXT: bl __powidf2 1939; PC64LE9-NEXT: nop 1940; PC64LE9-NEXT: addis 3, 2, .LCPI36_1@toc@ha 1941; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1942; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 1943; PC64LE9-NEXT: li 4, 3 1944; PC64LE9-NEXT: lfd 1, .LCPI36_1@toc@l(3) 1945; PC64LE9-NEXT: bl __powidf2 1946; PC64LE9-NEXT: nop 1947; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 1948; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1949; PC64LE9-NEXT: xxmrghd 34, 1, 0 1950; PC64LE9-NEXT: addi 1, 1, 48 1951; PC64LE9-NEXT: ld 0, 16(1) 1952; PC64LE9-NEXT: mtlr 0 1953; PC64LE9-NEXT: blr 1954entry: 1955 %powi = call <2 x double> @llvm.experimental.constrained.powi.v2f64( 1956 <2 x double> <double 42.1, double 42.2>, 1957 i32 3, 1958 metadata !"round.dynamic", 1959 metadata !"fpexcept.strict") #1 1960 ret <2 x double> %powi 1961} 1962 1963define <3 x float> @constrained_vector_powi_v3f32() #0 { 1964; 1965; 1966; PC64LE-LABEL: constrained_vector_powi_v3f32: 1967; PC64LE: # %bb.0: # %entry 1968; PC64LE-NEXT: mflr 0 1969; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 1970; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1971; PC64LE-NEXT: std 0, 16(1) 1972; PC64LE-NEXT: stdu 1, -48(1) 1973; PC64LE-NEXT: addis 3, 2, .LCPI37_0@toc@ha 1974; PC64LE-NEXT: li 4, 3 1975; PC64LE-NEXT: lfs 1, .LCPI37_0@toc@l(3) 1976; PC64LE-NEXT: bl __powisf2 1977; PC64LE-NEXT: nop 1978; PC64LE-NEXT: addis 3, 2, .LCPI37_1@toc@ha 1979; PC64LE-NEXT: fmr 31, 1 1980; PC64LE-NEXT: li 4, 3 1981; PC64LE-NEXT: lfs 1, .LCPI37_1@toc@l(3) 1982; PC64LE-NEXT: bl __powisf2 1983; PC64LE-NEXT: nop 1984; PC64LE-NEXT: addis 3, 2, .LCPI37_2@toc@ha 1985; PC64LE-NEXT: fmr 30, 1 1986; PC64LE-NEXT: li 4, 3 1987; PC64LE-NEXT: lfs 1, .LCPI37_2@toc@l(3) 1988; PC64LE-NEXT: bl __powisf2 1989; PC64LE-NEXT: nop 1990; PC64LE-NEXT: xscvdpspn 0, 30 1991; PC64LE-NEXT: addis 3, 2, .LCPI37_3@toc@ha 1992; PC64LE-NEXT: xscvdpspn 1, 1 1993; PC64LE-NEXT: addi 3, 3, .LCPI37_3@toc@l 1994; PC64LE-NEXT: lvx 4, 0, 3 1995; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 1996; PC64LE-NEXT: xscvdpspn 0, 31 1997; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 1998; PC64LE-NEXT: vmrghw 2, 2, 3 1999; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 2000; PC64LE-NEXT: vperm 2, 3, 2, 4 2001; PC64LE-NEXT: addi 1, 1, 48 2002; PC64LE-NEXT: ld 0, 16(1) 2003; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2004; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2005; PC64LE-NEXT: mtlr 0 2006; PC64LE-NEXT: blr 2007; 2008; PC64LE9-LABEL: constrained_vector_powi_v3f32: 2009; PC64LE9: # %bb.0: # %entry 2010; PC64LE9-NEXT: mflr 0 2011; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 2012; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 2013; PC64LE9-NEXT: std 0, 16(1) 2014; PC64LE9-NEXT: stdu 1, -48(1) 2015; PC64LE9-NEXT: addis 3, 2, .LCPI37_0@toc@ha 2016; PC64LE9-NEXT: li 4, 3 2017; PC64LE9-NEXT: lfs 1, .LCPI37_0@toc@l(3) 2018; PC64LE9-NEXT: bl __powisf2 2019; PC64LE9-NEXT: nop 2020; PC64LE9-NEXT: addis 3, 2, .LCPI37_1@toc@ha 2021; PC64LE9-NEXT: fmr 31, 1 2022; PC64LE9-NEXT: li 4, 3 2023; PC64LE9-NEXT: lfs 1, .LCPI37_1@toc@l(3) 2024; PC64LE9-NEXT: bl __powisf2 2025; PC64LE9-NEXT: nop 2026; PC64LE9-NEXT: addis 3, 2, .LCPI37_2@toc@ha 2027; PC64LE9-NEXT: fmr 30, 1 2028; PC64LE9-NEXT: li 4, 3 2029; PC64LE9-NEXT: lfs 1, .LCPI37_2@toc@l(3) 2030; PC64LE9-NEXT: bl __powisf2 2031; PC64LE9-NEXT: nop 2032; PC64LE9-NEXT: xscvdpspn 0, 1 2033; PC64LE9-NEXT: addis 3, 2, .LCPI37_3@toc@ha 2034; PC64LE9-NEXT: addi 3, 3, .LCPI37_3@toc@l 2035; PC64LE9-NEXT: lxvx 36, 0, 3 2036; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 2037; PC64LE9-NEXT: xscvdpspn 0, 30 2038; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 2039; PC64LE9-NEXT: xscvdpspn 0, 31 2040; PC64LE9-NEXT: vmrghw 2, 3, 2 2041; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 2042; PC64LE9-NEXT: vperm 2, 3, 2, 4 2043; PC64LE9-NEXT: addi 1, 1, 48 2044; PC64LE9-NEXT: ld 0, 16(1) 2045; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2046; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2047; PC64LE9-NEXT: mtlr 0 2048; PC64LE9-NEXT: blr 2049entry: 2050 %powi = call <3 x float> @llvm.experimental.constrained.powi.v3f32( 2051 <3 x float> <float 42.0, float 43.0, float 44.0>, 2052 i32 3, 2053 metadata !"round.dynamic", 2054 metadata !"fpexcept.strict") #1 2055 ret <3 x float> %powi 2056} 2057 2058define <3 x double> @constrained_vector_powi_v3f64() #0 { 2059; PC64LE-LABEL: constrained_vector_powi_v3f64: 2060; PC64LE: # %bb.0: # %entry 2061; PC64LE-NEXT: mflr 0 2062; PC64LE-NEXT: std 0, 16(1) 2063; PC64LE-NEXT: stdu 1, -80(1) 2064; PC64LE-NEXT: li 3, 64 2065; PC64LE-NEXT: li 4, 3 2066; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2067; PC64LE-NEXT: addis 3, 2, .LCPI38_0@toc@ha 2068; PC64LE-NEXT: lfd 1, .LCPI38_0@toc@l(3) 2069; PC64LE-NEXT: bl __powidf2 2070; PC64LE-NEXT: nop 2071; PC64LE-NEXT: li 3, 48 2072; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2073; PC64LE-NEXT: li 4, 3 2074; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2075; PC64LE-NEXT: addis 3, 2, .LCPI38_1@toc@ha 2076; PC64LE-NEXT: lfs 1, .LCPI38_1@toc@l(3) 2077; PC64LE-NEXT: bl __powidf2 2078; PC64LE-NEXT: nop 2079; PC64LE-NEXT: li 3, 48 2080; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2081; PC64LE-NEXT: li 4, 3 2082; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2083; PC64LE-NEXT: addis 3, 2, .LCPI38_2@toc@ha 2084; PC64LE-NEXT: xxmrghd 63, 0, 1 2085; PC64LE-NEXT: lfd 1, .LCPI38_2@toc@l(3) 2086; PC64LE-NEXT: bl __powidf2 2087; PC64LE-NEXT: nop 2088; PC64LE-NEXT: xxswapd 0, 63 2089; PC64LE-NEXT: li 3, 64 2090; PC64LE-NEXT: xxlor 2, 63, 63 2091; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2092; PC64LE-NEXT: fmr 3, 1 2093; PC64LE-NEXT: fmr 1, 0 2094; PC64LE-NEXT: addi 1, 1, 80 2095; PC64LE-NEXT: ld 0, 16(1) 2096; PC64LE-NEXT: mtlr 0 2097; PC64LE-NEXT: blr 2098; 2099; PC64LE9-LABEL: constrained_vector_powi_v3f64: 2100; PC64LE9: # %bb.0: # %entry 2101; PC64LE9-NEXT: mflr 0 2102; PC64LE9-NEXT: std 0, 16(1) 2103; PC64LE9-NEXT: stdu 1, -64(1) 2104; PC64LE9-NEXT: addis 3, 2, .LCPI38_0@toc@ha 2105; PC64LE9-NEXT: li 4, 3 2106; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2107; PC64LE9-NEXT: lfd 1, .LCPI38_0@toc@l(3) 2108; PC64LE9-NEXT: bl __powidf2 2109; PC64LE9-NEXT: nop 2110; PC64LE9-NEXT: addis 3, 2, .LCPI38_1@toc@ha 2111; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2112; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2113; PC64LE9-NEXT: li 4, 3 2114; PC64LE9-NEXT: lfs 1, .LCPI38_1@toc@l(3) 2115; PC64LE9-NEXT: bl __powidf2 2116; PC64LE9-NEXT: nop 2117; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2118; PC64LE9-NEXT: addis 3, 2, .LCPI38_2@toc@ha 2119; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2120; PC64LE9-NEXT: li 4, 3 2121; PC64LE9-NEXT: xxmrghd 63, 0, 1 2122; PC64LE9-NEXT: lfd 1, .LCPI38_2@toc@l(3) 2123; PC64LE9-NEXT: bl __powidf2 2124; PC64LE9-NEXT: nop 2125; PC64LE9-NEXT: fmr 3, 1 2126; PC64LE9-NEXT: xxswapd 1, 63 2127; PC64LE9-NEXT: xscpsgndp 2, 63, 63 2128; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2129; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2130; PC64LE9-NEXT: addi 1, 1, 64 2131; PC64LE9-NEXT: ld 0, 16(1) 2132; PC64LE9-NEXT: mtlr 0 2133; PC64LE9-NEXT: blr 2134entry: 2135 %powi = call <3 x double> @llvm.experimental.constrained.powi.v3f64( 2136 <3 x double> <double 42.0, double 42.1, double 42.2>, 2137 i32 3, 2138 metadata !"round.dynamic", 2139 metadata !"fpexcept.strict") #1 2140 ret <3 x double> %powi 2141} 2142 2143define <4 x double> @constrained_vector_powi_v4f64() #0 { 2144; PC64LE-LABEL: constrained_vector_powi_v4f64: 2145; PC64LE: # %bb.0: # %entry 2146; PC64LE-NEXT: mflr 0 2147; PC64LE-NEXT: std 0, 16(1) 2148; PC64LE-NEXT: stdu 1, -80(1) 2149; PC64LE-NEXT: li 3, 64 2150; PC64LE-NEXT: li 4, 3 2151; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2152; PC64LE-NEXT: addis 3, 2, .LCPI39_0@toc@ha 2153; PC64LE-NEXT: lfd 1, .LCPI39_0@toc@l(3) 2154; PC64LE-NEXT: bl __powidf2 2155; PC64LE-NEXT: nop 2156; PC64LE-NEXT: li 3, 48 2157; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2158; PC64LE-NEXT: li 4, 3 2159; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2160; PC64LE-NEXT: addis 3, 2, .LCPI39_1@toc@ha 2161; PC64LE-NEXT: lfd 1, .LCPI39_1@toc@l(3) 2162; PC64LE-NEXT: bl __powidf2 2163; PC64LE-NEXT: nop 2164; PC64LE-NEXT: li 3, 48 2165; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2166; PC64LE-NEXT: li 4, 3 2167; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2168; PC64LE-NEXT: addis 3, 2, .LCPI39_2@toc@ha 2169; PC64LE-NEXT: xxmrghd 63, 1, 0 2170; PC64LE-NEXT: lfd 1, .LCPI39_2@toc@l(3) 2171; PC64LE-NEXT: bl __powidf2 2172; PC64LE-NEXT: nop 2173; PC64LE-NEXT: li 3, 48 2174; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2175; PC64LE-NEXT: li 4, 3 2176; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2177; PC64LE-NEXT: addis 3, 2, .LCPI39_3@toc@ha 2178; PC64LE-NEXT: lfd 1, .LCPI39_3@toc@l(3) 2179; PC64LE-NEXT: bl __powidf2 2180; PC64LE-NEXT: nop 2181; PC64LE-NEXT: li 3, 48 2182; PC64LE-NEXT: vmr 2, 31 2183; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2184; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2185; PC64LE-NEXT: li 3, 64 2186; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2187; PC64LE-NEXT: xxmrghd 35, 1, 0 2188; PC64LE-NEXT: addi 1, 1, 80 2189; PC64LE-NEXT: ld 0, 16(1) 2190; PC64LE-NEXT: mtlr 0 2191; PC64LE-NEXT: blr 2192; 2193; PC64LE9-LABEL: constrained_vector_powi_v4f64: 2194; PC64LE9: # %bb.0: # %entry 2195; PC64LE9-NEXT: mflr 0 2196; PC64LE9-NEXT: std 0, 16(1) 2197; PC64LE9-NEXT: stdu 1, -64(1) 2198; PC64LE9-NEXT: addis 3, 2, .LCPI39_0@toc@ha 2199; PC64LE9-NEXT: li 4, 3 2200; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2201; PC64LE9-NEXT: lfd 1, .LCPI39_0@toc@l(3) 2202; PC64LE9-NEXT: bl __powidf2 2203; PC64LE9-NEXT: nop 2204; PC64LE9-NEXT: addis 3, 2, .LCPI39_1@toc@ha 2205; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2206; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2207; PC64LE9-NEXT: li 4, 3 2208; PC64LE9-NEXT: lfd 1, .LCPI39_1@toc@l(3) 2209; PC64LE9-NEXT: bl __powidf2 2210; PC64LE9-NEXT: nop 2211; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2212; PC64LE9-NEXT: addis 3, 2, .LCPI39_2@toc@ha 2213; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2214; PC64LE9-NEXT: li 4, 3 2215; PC64LE9-NEXT: xxmrghd 63, 1, 0 2216; PC64LE9-NEXT: lfd 1, .LCPI39_2@toc@l(3) 2217; PC64LE9-NEXT: bl __powidf2 2218; PC64LE9-NEXT: nop 2219; PC64LE9-NEXT: addis 3, 2, .LCPI39_3@toc@ha 2220; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2221; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2222; PC64LE9-NEXT: li 4, 3 2223; PC64LE9-NEXT: lfd 1, .LCPI39_3@toc@l(3) 2224; PC64LE9-NEXT: bl __powidf2 2225; PC64LE9-NEXT: nop 2226; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2227; PC64LE9-NEXT: vmr 2, 31 2228; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2229; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2230; PC64LE9-NEXT: xxmrghd 35, 1, 0 2231; PC64LE9-NEXT: addi 1, 1, 64 2232; PC64LE9-NEXT: ld 0, 16(1) 2233; PC64LE9-NEXT: mtlr 0 2234; PC64LE9-NEXT: blr 2235entry: 2236 %powi = call <4 x double> @llvm.experimental.constrained.powi.v4f64( 2237 <4 x double> <double 42.1, double 42.2, 2238 double 42.3, double 42.4>, 2239 i32 3, 2240 metadata !"round.dynamic", 2241 metadata !"fpexcept.strict") #1 2242 ret <4 x double> %powi 2243} 2244 2245define <1 x float> @constrained_vector_sin_v1f32() #0 { 2246; PC64LE-LABEL: constrained_vector_sin_v1f32: 2247; PC64LE: # %bb.0: # %entry 2248; PC64LE-NEXT: mflr 0 2249; PC64LE-NEXT: std 0, 16(1) 2250; PC64LE-NEXT: stdu 1, -32(1) 2251; PC64LE-NEXT: addis 3, 2, .LCPI40_0@toc@ha 2252; PC64LE-NEXT: lfs 1, .LCPI40_0@toc@l(3) 2253; PC64LE-NEXT: bl sinf 2254; PC64LE-NEXT: nop 2255; PC64LE-NEXT: addi 1, 1, 32 2256; PC64LE-NEXT: ld 0, 16(1) 2257; PC64LE-NEXT: mtlr 0 2258; PC64LE-NEXT: blr 2259; 2260; PC64LE9-LABEL: constrained_vector_sin_v1f32: 2261; PC64LE9: # %bb.0: # %entry 2262; PC64LE9-NEXT: mflr 0 2263; PC64LE9-NEXT: std 0, 16(1) 2264; PC64LE9-NEXT: stdu 1, -32(1) 2265; PC64LE9-NEXT: addis 3, 2, .LCPI40_0@toc@ha 2266; PC64LE9-NEXT: lfs 1, .LCPI40_0@toc@l(3) 2267; PC64LE9-NEXT: bl sinf 2268; PC64LE9-NEXT: nop 2269; PC64LE9-NEXT: addi 1, 1, 32 2270; PC64LE9-NEXT: ld 0, 16(1) 2271; PC64LE9-NEXT: mtlr 0 2272; PC64LE9-NEXT: blr 2273entry: 2274 %sin = call <1 x float> @llvm.experimental.constrained.sin.v1f32( 2275 <1 x float> <float 42.0>, 2276 metadata !"round.dynamic", 2277 metadata !"fpexcept.strict") #1 2278 ret <1 x float> %sin 2279} 2280 2281define <2 x double> @constrained_vector_sin_v2f64() #0 { 2282; PC64LE-LABEL: constrained_vector_sin_v2f64: 2283; PC64LE: # %bb.0: # %entry 2284; PC64LE-NEXT: mflr 0 2285; PC64LE-NEXT: std 0, 16(1) 2286; PC64LE-NEXT: stdu 1, -64(1) 2287; PC64LE-NEXT: addis 3, 2, .LCPI41_0@toc@ha 2288; PC64LE-NEXT: lfd 1, .LCPI41_0@toc@l(3) 2289; PC64LE-NEXT: bl sin 2290; PC64LE-NEXT: nop 2291; PC64LE-NEXT: li 3, 48 2292; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2293; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2294; PC64LE-NEXT: addis 3, 2, .LCPI41_1@toc@ha 2295; PC64LE-NEXT: lfs 1, .LCPI41_1@toc@l(3) 2296; PC64LE-NEXT: bl sin 2297; PC64LE-NEXT: nop 2298; PC64LE-NEXT: li 3, 48 2299; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2300; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2301; PC64LE-NEXT: xxmrghd 34, 0, 1 2302; PC64LE-NEXT: addi 1, 1, 64 2303; PC64LE-NEXT: ld 0, 16(1) 2304; PC64LE-NEXT: mtlr 0 2305; PC64LE-NEXT: blr 2306; 2307; PC64LE9-LABEL: constrained_vector_sin_v2f64: 2308; PC64LE9: # %bb.0: # %entry 2309; PC64LE9-NEXT: mflr 0 2310; PC64LE9-NEXT: std 0, 16(1) 2311; PC64LE9-NEXT: stdu 1, -48(1) 2312; PC64LE9-NEXT: addis 3, 2, .LCPI41_0@toc@ha 2313; PC64LE9-NEXT: lfd 1, .LCPI41_0@toc@l(3) 2314; PC64LE9-NEXT: bl sin 2315; PC64LE9-NEXT: nop 2316; PC64LE9-NEXT: addis 3, 2, .LCPI41_1@toc@ha 2317; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2318; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2319; PC64LE9-NEXT: lfs 1, .LCPI41_1@toc@l(3) 2320; PC64LE9-NEXT: bl sin 2321; PC64LE9-NEXT: nop 2322; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2323; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2324; PC64LE9-NEXT: xxmrghd 34, 0, 1 2325; PC64LE9-NEXT: addi 1, 1, 48 2326; PC64LE9-NEXT: ld 0, 16(1) 2327; PC64LE9-NEXT: mtlr 0 2328; PC64LE9-NEXT: blr 2329entry: 2330 %sin = call <2 x double> @llvm.experimental.constrained.sin.v2f64( 2331 <2 x double> <double 42.0, double 42.1>, 2332 metadata !"round.dynamic", 2333 metadata !"fpexcept.strict") #1 2334 ret <2 x double> %sin 2335} 2336 2337define <3 x float> @constrained_vector_sin_v3f32() #0 { 2338; PC64LE-LABEL: constrained_vector_sin_v3f32: 2339; PC64LE: # %bb.0: # %entry 2340; PC64LE-NEXT: mflr 0 2341; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 2342; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 2343; PC64LE-NEXT: std 0, 16(1) 2344; PC64LE-NEXT: stdu 1, -48(1) 2345; PC64LE-NEXT: addis 3, 2, .LCPI42_0@toc@ha 2346; PC64LE-NEXT: lfs 1, .LCPI42_0@toc@l(3) 2347; PC64LE-NEXT: bl sinf 2348; PC64LE-NEXT: nop 2349; PC64LE-NEXT: addis 3, 2, .LCPI42_1@toc@ha 2350; PC64LE-NEXT: fmr 31, 1 2351; PC64LE-NEXT: lfs 1, .LCPI42_1@toc@l(3) 2352; PC64LE-NEXT: bl sinf 2353; PC64LE-NEXT: nop 2354; PC64LE-NEXT: addis 3, 2, .LCPI42_2@toc@ha 2355; PC64LE-NEXT: fmr 30, 1 2356; PC64LE-NEXT: lfs 1, .LCPI42_2@toc@l(3) 2357; PC64LE-NEXT: bl sinf 2358; PC64LE-NEXT: nop 2359; PC64LE-NEXT: xscvdpspn 0, 30 2360; PC64LE-NEXT: addis 3, 2, .LCPI42_3@toc@ha 2361; PC64LE-NEXT: xscvdpspn 1, 1 2362; PC64LE-NEXT: addi 3, 3, .LCPI42_3@toc@l 2363; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 2364; PC64LE-NEXT: xscvdpspn 0, 31 2365; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 2366; PC64LE-NEXT: vmrghw 2, 2, 3 2367; PC64LE-NEXT: lvx 3, 0, 3 2368; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 2369; PC64LE-NEXT: vperm 2, 4, 2, 3 2370; PC64LE-NEXT: addi 1, 1, 48 2371; PC64LE-NEXT: ld 0, 16(1) 2372; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2373; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2374; PC64LE-NEXT: mtlr 0 2375; PC64LE-NEXT: blr 2376; 2377; PC64LE9-LABEL: constrained_vector_sin_v3f32: 2378; PC64LE9: # %bb.0: # %entry 2379; PC64LE9-NEXT: mflr 0 2380; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 2381; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 2382; PC64LE9-NEXT: std 0, 16(1) 2383; PC64LE9-NEXT: stdu 1, -48(1) 2384; PC64LE9-NEXT: addis 3, 2, .LCPI42_0@toc@ha 2385; PC64LE9-NEXT: lfs 1, .LCPI42_0@toc@l(3) 2386; PC64LE9-NEXT: bl sinf 2387; PC64LE9-NEXT: nop 2388; PC64LE9-NEXT: addis 3, 2, .LCPI42_1@toc@ha 2389; PC64LE9-NEXT: fmr 31, 1 2390; PC64LE9-NEXT: lfs 1, .LCPI42_1@toc@l(3) 2391; PC64LE9-NEXT: bl sinf 2392; PC64LE9-NEXT: nop 2393; PC64LE9-NEXT: addis 3, 2, .LCPI42_2@toc@ha 2394; PC64LE9-NEXT: fmr 30, 1 2395; PC64LE9-NEXT: lfs 1, .LCPI42_2@toc@l(3) 2396; PC64LE9-NEXT: bl sinf 2397; PC64LE9-NEXT: nop 2398; PC64LE9-NEXT: xscvdpspn 0, 1 2399; PC64LE9-NEXT: addis 3, 2, .LCPI42_3@toc@ha 2400; PC64LE9-NEXT: addi 3, 3, .LCPI42_3@toc@l 2401; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 2402; PC64LE9-NEXT: xscvdpspn 0, 30 2403; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 2404; PC64LE9-NEXT: xscvdpspn 0, 31 2405; PC64LE9-NEXT: vmrghw 2, 3, 2 2406; PC64LE9-NEXT: lxvx 35, 0, 3 2407; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 2408; PC64LE9-NEXT: vperm 2, 4, 2, 3 2409; PC64LE9-NEXT: addi 1, 1, 48 2410; PC64LE9-NEXT: ld 0, 16(1) 2411; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2412; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2413; PC64LE9-NEXT: mtlr 0 2414; PC64LE9-NEXT: blr 2415entry: 2416 %sin = call <3 x float> @llvm.experimental.constrained.sin.v3f32( 2417 <3 x float> <float 42.0, float 43.0, float 44.0>, 2418 metadata !"round.dynamic", 2419 metadata !"fpexcept.strict") #1 2420 ret <3 x float> %sin 2421} 2422 2423define <3 x double> @constrained_vector_sin_v3f64() #0 { 2424; PC64LE-LABEL: constrained_vector_sin_v3f64: 2425; PC64LE: # %bb.0: # %entry 2426; PC64LE-NEXT: mflr 0 2427; PC64LE-NEXT: std 0, 16(1) 2428; PC64LE-NEXT: stdu 1, -80(1) 2429; PC64LE-NEXT: li 3, 64 2430; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2431; PC64LE-NEXT: addis 3, 2, .LCPI43_0@toc@ha 2432; PC64LE-NEXT: lfd 1, .LCPI43_0@toc@l(3) 2433; PC64LE-NEXT: bl sin 2434; PC64LE-NEXT: nop 2435; PC64LE-NEXT: li 3, 48 2436; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2437; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2438; PC64LE-NEXT: addis 3, 2, .LCPI43_1@toc@ha 2439; PC64LE-NEXT: lfs 1, .LCPI43_1@toc@l(3) 2440; PC64LE-NEXT: bl sin 2441; PC64LE-NEXT: nop 2442; PC64LE-NEXT: li 3, 48 2443; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2444; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2445; PC64LE-NEXT: addis 3, 2, .LCPI43_2@toc@ha 2446; PC64LE-NEXT: xxmrghd 63, 0, 1 2447; PC64LE-NEXT: lfd 1, .LCPI43_2@toc@l(3) 2448; PC64LE-NEXT: bl sin 2449; PC64LE-NEXT: nop 2450; PC64LE-NEXT: xxswapd 0, 63 2451; PC64LE-NEXT: li 3, 64 2452; PC64LE-NEXT: xxlor 2, 63, 63 2453; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2454; PC64LE-NEXT: fmr 3, 1 2455; PC64LE-NEXT: fmr 1, 0 2456; PC64LE-NEXT: addi 1, 1, 80 2457; PC64LE-NEXT: ld 0, 16(1) 2458; PC64LE-NEXT: mtlr 0 2459; PC64LE-NEXT: blr 2460; 2461; PC64LE9-LABEL: constrained_vector_sin_v3f64: 2462; PC64LE9: # %bb.0: # %entry 2463; PC64LE9-NEXT: mflr 0 2464; PC64LE9-NEXT: std 0, 16(1) 2465; PC64LE9-NEXT: stdu 1, -64(1) 2466; PC64LE9-NEXT: addis 3, 2, .LCPI43_0@toc@ha 2467; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2468; PC64LE9-NEXT: lfd 1, .LCPI43_0@toc@l(3) 2469; PC64LE9-NEXT: bl sin 2470; PC64LE9-NEXT: nop 2471; PC64LE9-NEXT: addis 3, 2, .LCPI43_1@toc@ha 2472; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2473; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2474; PC64LE9-NEXT: lfs 1, .LCPI43_1@toc@l(3) 2475; PC64LE9-NEXT: bl sin 2476; PC64LE9-NEXT: nop 2477; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2478; PC64LE9-NEXT: addis 3, 2, .LCPI43_2@toc@ha 2479; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2480; PC64LE9-NEXT: xxmrghd 63, 0, 1 2481; PC64LE9-NEXT: lfd 1, .LCPI43_2@toc@l(3) 2482; PC64LE9-NEXT: bl sin 2483; PC64LE9-NEXT: nop 2484; PC64LE9-NEXT: fmr 3, 1 2485; PC64LE9-NEXT: xxswapd 1, 63 2486; PC64LE9-NEXT: xscpsgndp 2, 63, 63 2487; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2488; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2489; PC64LE9-NEXT: addi 1, 1, 64 2490; PC64LE9-NEXT: ld 0, 16(1) 2491; PC64LE9-NEXT: mtlr 0 2492; PC64LE9-NEXT: blr 2493entry: 2494 %sin = call <3 x double> @llvm.experimental.constrained.sin.v3f64( 2495 <3 x double> <double 42.0, double 42.1, double 42.2>, 2496 metadata !"round.dynamic", 2497 metadata !"fpexcept.strict") #1 2498 ret <3 x double> %sin 2499} 2500 2501define <4 x double> @constrained_vector_sin_v4f64() #0 { 2502; PC64LE-LABEL: constrained_vector_sin_v4f64: 2503; PC64LE: # %bb.0: # %entry 2504; PC64LE-NEXT: mflr 0 2505; PC64LE-NEXT: std 0, 16(1) 2506; PC64LE-NEXT: stdu 1, -80(1) 2507; PC64LE-NEXT: li 3, 64 2508; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2509; PC64LE-NEXT: addis 3, 2, .LCPI44_0@toc@ha 2510; PC64LE-NEXT: lfd 1, .LCPI44_0@toc@l(3) 2511; PC64LE-NEXT: bl sin 2512; PC64LE-NEXT: nop 2513; PC64LE-NEXT: li 3, 48 2514; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2515; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2516; PC64LE-NEXT: addis 3, 2, .LCPI44_1@toc@ha 2517; PC64LE-NEXT: lfd 1, .LCPI44_1@toc@l(3) 2518; PC64LE-NEXT: bl sin 2519; PC64LE-NEXT: nop 2520; PC64LE-NEXT: li 3, 48 2521; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2522; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2523; PC64LE-NEXT: addis 3, 2, .LCPI44_2@toc@ha 2524; PC64LE-NEXT: xxmrghd 63, 1, 0 2525; PC64LE-NEXT: lfd 1, .LCPI44_2@toc@l(3) 2526; PC64LE-NEXT: bl sin 2527; PC64LE-NEXT: nop 2528; PC64LE-NEXT: li 3, 48 2529; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2530; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2531; PC64LE-NEXT: addis 3, 2, .LCPI44_3@toc@ha 2532; PC64LE-NEXT: lfs 1, .LCPI44_3@toc@l(3) 2533; PC64LE-NEXT: bl sin 2534; PC64LE-NEXT: nop 2535; PC64LE-NEXT: li 3, 48 2536; PC64LE-NEXT: vmr 3, 31 2537; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2538; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2539; PC64LE-NEXT: li 3, 64 2540; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2541; PC64LE-NEXT: xxmrghd 34, 0, 1 2542; PC64LE-NEXT: addi 1, 1, 80 2543; PC64LE-NEXT: ld 0, 16(1) 2544; PC64LE-NEXT: mtlr 0 2545; PC64LE-NEXT: blr 2546; 2547; PC64LE9-LABEL: constrained_vector_sin_v4f64: 2548; PC64LE9: # %bb.0: # %entry 2549; PC64LE9-NEXT: mflr 0 2550; PC64LE9-NEXT: std 0, 16(1) 2551; PC64LE9-NEXT: stdu 1, -64(1) 2552; PC64LE9-NEXT: addis 3, 2, .LCPI44_0@toc@ha 2553; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2554; PC64LE9-NEXT: lfd 1, .LCPI44_0@toc@l(3) 2555; PC64LE9-NEXT: bl sin 2556; PC64LE9-NEXT: nop 2557; PC64LE9-NEXT: addis 3, 2, .LCPI44_1@toc@ha 2558; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2559; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2560; PC64LE9-NEXT: lfd 1, .LCPI44_1@toc@l(3) 2561; PC64LE9-NEXT: bl sin 2562; PC64LE9-NEXT: nop 2563; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2564; PC64LE9-NEXT: addis 3, 2, .LCPI44_2@toc@ha 2565; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2566; PC64LE9-NEXT: xxmrghd 63, 1, 0 2567; PC64LE9-NEXT: lfd 1, .LCPI44_2@toc@l(3) 2568; PC64LE9-NEXT: bl sin 2569; PC64LE9-NEXT: nop 2570; PC64LE9-NEXT: addis 3, 2, .LCPI44_3@toc@ha 2571; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2572; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2573; PC64LE9-NEXT: lfs 1, .LCPI44_3@toc@l(3) 2574; PC64LE9-NEXT: bl sin 2575; PC64LE9-NEXT: nop 2576; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2577; PC64LE9-NEXT: vmr 3, 31 2578; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2579; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2580; PC64LE9-NEXT: xxmrghd 34, 0, 1 2581; PC64LE9-NEXT: addi 1, 1, 64 2582; PC64LE9-NEXT: ld 0, 16(1) 2583; PC64LE9-NEXT: mtlr 0 2584; PC64LE9-NEXT: blr 2585entry: 2586 %sin = call <4 x double> @llvm.experimental.constrained.sin.v4f64( 2587 <4 x double> <double 42.0, double 42.1, 2588 double 42.2, double 42.3>, 2589 metadata !"round.dynamic", 2590 metadata !"fpexcept.strict") #1 2591 ret <4 x double> %sin 2592} 2593 2594define <1 x float> @constrained_vector_cos_v1f32() #0 { 2595; PC64LE-LABEL: constrained_vector_cos_v1f32: 2596; PC64LE: # %bb.0: # %entry 2597; PC64LE-NEXT: mflr 0 2598; PC64LE-NEXT: std 0, 16(1) 2599; PC64LE-NEXT: stdu 1, -32(1) 2600; PC64LE-NEXT: addis 3, 2, .LCPI45_0@toc@ha 2601; PC64LE-NEXT: lfs 1, .LCPI45_0@toc@l(3) 2602; PC64LE-NEXT: bl cosf 2603; PC64LE-NEXT: nop 2604; PC64LE-NEXT: addi 1, 1, 32 2605; PC64LE-NEXT: ld 0, 16(1) 2606; PC64LE-NEXT: mtlr 0 2607; PC64LE-NEXT: blr 2608; 2609; PC64LE9-LABEL: constrained_vector_cos_v1f32: 2610; PC64LE9: # %bb.0: # %entry 2611; PC64LE9-NEXT: mflr 0 2612; PC64LE9-NEXT: std 0, 16(1) 2613; PC64LE9-NEXT: stdu 1, -32(1) 2614; PC64LE9-NEXT: addis 3, 2, .LCPI45_0@toc@ha 2615; PC64LE9-NEXT: lfs 1, .LCPI45_0@toc@l(3) 2616; PC64LE9-NEXT: bl cosf 2617; PC64LE9-NEXT: nop 2618; PC64LE9-NEXT: addi 1, 1, 32 2619; PC64LE9-NEXT: ld 0, 16(1) 2620; PC64LE9-NEXT: mtlr 0 2621; PC64LE9-NEXT: blr 2622entry: 2623 %cos = call <1 x float> @llvm.experimental.constrained.cos.v1f32( 2624 <1 x float> <float 42.0>, 2625 metadata !"round.dynamic", 2626 metadata !"fpexcept.strict") #1 2627 ret <1 x float> %cos 2628} 2629 2630define <2 x double> @constrained_vector_cos_v2f64() #0 { 2631; PC64LE-LABEL: constrained_vector_cos_v2f64: 2632; PC64LE: # %bb.0: # %entry 2633; PC64LE-NEXT: mflr 0 2634; PC64LE-NEXT: std 0, 16(1) 2635; PC64LE-NEXT: stdu 1, -64(1) 2636; PC64LE-NEXT: addis 3, 2, .LCPI46_0@toc@ha 2637; PC64LE-NEXT: lfd 1, .LCPI46_0@toc@l(3) 2638; PC64LE-NEXT: bl cos 2639; PC64LE-NEXT: nop 2640; PC64LE-NEXT: li 3, 48 2641; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2642; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2643; PC64LE-NEXT: addis 3, 2, .LCPI46_1@toc@ha 2644; PC64LE-NEXT: lfs 1, .LCPI46_1@toc@l(3) 2645; PC64LE-NEXT: bl cos 2646; PC64LE-NEXT: nop 2647; PC64LE-NEXT: li 3, 48 2648; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2649; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2650; PC64LE-NEXT: xxmrghd 34, 0, 1 2651; PC64LE-NEXT: addi 1, 1, 64 2652; PC64LE-NEXT: ld 0, 16(1) 2653; PC64LE-NEXT: mtlr 0 2654; PC64LE-NEXT: blr 2655; 2656; PC64LE9-LABEL: constrained_vector_cos_v2f64: 2657; PC64LE9: # %bb.0: # %entry 2658; PC64LE9-NEXT: mflr 0 2659; PC64LE9-NEXT: std 0, 16(1) 2660; PC64LE9-NEXT: stdu 1, -48(1) 2661; PC64LE9-NEXT: addis 3, 2, .LCPI46_0@toc@ha 2662; PC64LE9-NEXT: lfd 1, .LCPI46_0@toc@l(3) 2663; PC64LE9-NEXT: bl cos 2664; PC64LE9-NEXT: nop 2665; PC64LE9-NEXT: addis 3, 2, .LCPI46_1@toc@ha 2666; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2667; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2668; PC64LE9-NEXT: lfs 1, .LCPI46_1@toc@l(3) 2669; PC64LE9-NEXT: bl cos 2670; PC64LE9-NEXT: nop 2671; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2672; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2673; PC64LE9-NEXT: xxmrghd 34, 0, 1 2674; PC64LE9-NEXT: addi 1, 1, 48 2675; PC64LE9-NEXT: ld 0, 16(1) 2676; PC64LE9-NEXT: mtlr 0 2677; PC64LE9-NEXT: blr 2678entry: 2679 %cos = call <2 x double> @llvm.experimental.constrained.cos.v2f64( 2680 <2 x double> <double 42.0, double 42.1>, 2681 metadata !"round.dynamic", 2682 metadata !"fpexcept.strict") #1 2683 ret <2 x double> %cos 2684} 2685 2686define <3 x float> @constrained_vector_cos_v3f32() #0 { 2687; PC64LE-LABEL: constrained_vector_cos_v3f32: 2688; PC64LE: # %bb.0: # %entry 2689; PC64LE-NEXT: mflr 0 2690; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 2691; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 2692; PC64LE-NEXT: std 0, 16(1) 2693; PC64LE-NEXT: stdu 1, -48(1) 2694; PC64LE-NEXT: addis 3, 2, .LCPI47_0@toc@ha 2695; PC64LE-NEXT: lfs 1, .LCPI47_0@toc@l(3) 2696; PC64LE-NEXT: bl cosf 2697; PC64LE-NEXT: nop 2698; PC64LE-NEXT: addis 3, 2, .LCPI47_1@toc@ha 2699; PC64LE-NEXT: fmr 31, 1 2700; PC64LE-NEXT: lfs 1, .LCPI47_1@toc@l(3) 2701; PC64LE-NEXT: bl cosf 2702; PC64LE-NEXT: nop 2703; PC64LE-NEXT: addis 3, 2, .LCPI47_2@toc@ha 2704; PC64LE-NEXT: fmr 30, 1 2705; PC64LE-NEXT: lfs 1, .LCPI47_2@toc@l(3) 2706; PC64LE-NEXT: bl cosf 2707; PC64LE-NEXT: nop 2708; PC64LE-NEXT: xscvdpspn 0, 30 2709; PC64LE-NEXT: addis 3, 2, .LCPI47_3@toc@ha 2710; PC64LE-NEXT: xscvdpspn 1, 1 2711; PC64LE-NEXT: addi 3, 3, .LCPI47_3@toc@l 2712; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 2713; PC64LE-NEXT: xscvdpspn 0, 31 2714; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 2715; PC64LE-NEXT: vmrghw 2, 2, 3 2716; PC64LE-NEXT: lvx 3, 0, 3 2717; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 2718; PC64LE-NEXT: vperm 2, 4, 2, 3 2719; PC64LE-NEXT: addi 1, 1, 48 2720; PC64LE-NEXT: ld 0, 16(1) 2721; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2722; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2723; PC64LE-NEXT: mtlr 0 2724; PC64LE-NEXT: blr 2725; 2726; PC64LE9-LABEL: constrained_vector_cos_v3f32: 2727; PC64LE9: # %bb.0: # %entry 2728; PC64LE9-NEXT: mflr 0 2729; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 2730; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 2731; PC64LE9-NEXT: std 0, 16(1) 2732; PC64LE9-NEXT: stdu 1, -48(1) 2733; PC64LE9-NEXT: addis 3, 2, .LCPI47_0@toc@ha 2734; PC64LE9-NEXT: lfs 1, .LCPI47_0@toc@l(3) 2735; PC64LE9-NEXT: bl cosf 2736; PC64LE9-NEXT: nop 2737; PC64LE9-NEXT: addis 3, 2, .LCPI47_1@toc@ha 2738; PC64LE9-NEXT: fmr 31, 1 2739; PC64LE9-NEXT: lfs 1, .LCPI47_1@toc@l(3) 2740; PC64LE9-NEXT: bl cosf 2741; PC64LE9-NEXT: nop 2742; PC64LE9-NEXT: addis 3, 2, .LCPI47_2@toc@ha 2743; PC64LE9-NEXT: fmr 30, 1 2744; PC64LE9-NEXT: lfs 1, .LCPI47_2@toc@l(3) 2745; PC64LE9-NEXT: bl cosf 2746; PC64LE9-NEXT: nop 2747; PC64LE9-NEXT: xscvdpspn 0, 1 2748; PC64LE9-NEXT: addis 3, 2, .LCPI47_3@toc@ha 2749; PC64LE9-NEXT: addi 3, 3, .LCPI47_3@toc@l 2750; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 2751; PC64LE9-NEXT: xscvdpspn 0, 30 2752; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 2753; PC64LE9-NEXT: xscvdpspn 0, 31 2754; PC64LE9-NEXT: vmrghw 2, 3, 2 2755; PC64LE9-NEXT: lxvx 35, 0, 3 2756; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 2757; PC64LE9-NEXT: vperm 2, 4, 2, 3 2758; PC64LE9-NEXT: addi 1, 1, 48 2759; PC64LE9-NEXT: ld 0, 16(1) 2760; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2761; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2762; PC64LE9-NEXT: mtlr 0 2763; PC64LE9-NEXT: blr 2764entry: 2765 %cos = call <3 x float> @llvm.experimental.constrained.cos.v3f32( 2766 <3 x float> <float 42.0, float 43.0, float 44.0>, 2767 metadata !"round.dynamic", 2768 metadata !"fpexcept.strict") #1 2769 ret <3 x float> %cos 2770} 2771 2772define <3 x double> @constrained_vector_cos_v3f64() #0 { 2773; PC64LE-LABEL: constrained_vector_cos_v3f64: 2774; PC64LE: # %bb.0: # %entry 2775; PC64LE-NEXT: mflr 0 2776; PC64LE-NEXT: std 0, 16(1) 2777; PC64LE-NEXT: stdu 1, -80(1) 2778; PC64LE-NEXT: li 3, 64 2779; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2780; PC64LE-NEXT: addis 3, 2, .LCPI48_0@toc@ha 2781; PC64LE-NEXT: lfd 1, .LCPI48_0@toc@l(3) 2782; PC64LE-NEXT: bl cos 2783; PC64LE-NEXT: nop 2784; PC64LE-NEXT: li 3, 48 2785; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2786; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2787; PC64LE-NEXT: addis 3, 2, .LCPI48_1@toc@ha 2788; PC64LE-NEXT: lfs 1, .LCPI48_1@toc@l(3) 2789; PC64LE-NEXT: bl cos 2790; PC64LE-NEXT: nop 2791; PC64LE-NEXT: li 3, 48 2792; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2793; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2794; PC64LE-NEXT: addis 3, 2, .LCPI48_2@toc@ha 2795; PC64LE-NEXT: xxmrghd 63, 0, 1 2796; PC64LE-NEXT: lfd 1, .LCPI48_2@toc@l(3) 2797; PC64LE-NEXT: bl cos 2798; PC64LE-NEXT: nop 2799; PC64LE-NEXT: xxswapd 0, 63 2800; PC64LE-NEXT: li 3, 64 2801; PC64LE-NEXT: xxlor 2, 63, 63 2802; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2803; PC64LE-NEXT: fmr 3, 1 2804; PC64LE-NEXT: fmr 1, 0 2805; PC64LE-NEXT: addi 1, 1, 80 2806; PC64LE-NEXT: ld 0, 16(1) 2807; PC64LE-NEXT: mtlr 0 2808; PC64LE-NEXT: blr 2809; 2810; PC64LE9-LABEL: constrained_vector_cos_v3f64: 2811; PC64LE9: # %bb.0: # %entry 2812; PC64LE9-NEXT: mflr 0 2813; PC64LE9-NEXT: std 0, 16(1) 2814; PC64LE9-NEXT: stdu 1, -64(1) 2815; PC64LE9-NEXT: addis 3, 2, .LCPI48_0@toc@ha 2816; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2817; PC64LE9-NEXT: lfd 1, .LCPI48_0@toc@l(3) 2818; PC64LE9-NEXT: bl cos 2819; PC64LE9-NEXT: nop 2820; PC64LE9-NEXT: addis 3, 2, .LCPI48_1@toc@ha 2821; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2822; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2823; PC64LE9-NEXT: lfs 1, .LCPI48_1@toc@l(3) 2824; PC64LE9-NEXT: bl cos 2825; PC64LE9-NEXT: nop 2826; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2827; PC64LE9-NEXT: addis 3, 2, .LCPI48_2@toc@ha 2828; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2829; PC64LE9-NEXT: xxmrghd 63, 0, 1 2830; PC64LE9-NEXT: lfd 1, .LCPI48_2@toc@l(3) 2831; PC64LE9-NEXT: bl cos 2832; PC64LE9-NEXT: nop 2833; PC64LE9-NEXT: fmr 3, 1 2834; PC64LE9-NEXT: xxswapd 1, 63 2835; PC64LE9-NEXT: xscpsgndp 2, 63, 63 2836; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2837; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2838; PC64LE9-NEXT: addi 1, 1, 64 2839; PC64LE9-NEXT: ld 0, 16(1) 2840; PC64LE9-NEXT: mtlr 0 2841; PC64LE9-NEXT: blr 2842entry: 2843 %cos = call <3 x double> @llvm.experimental.constrained.cos.v3f64( 2844 <3 x double> <double 42.0, double 42.1, double 42.2>, 2845 metadata !"round.dynamic", 2846 metadata !"fpexcept.strict") #1 2847 ret <3 x double> %cos 2848} 2849 2850define <4 x double> @constrained_vector_cos_v4f64() #0 { 2851; PC64LE-LABEL: constrained_vector_cos_v4f64: 2852; PC64LE: # %bb.0: # %entry 2853; PC64LE-NEXT: mflr 0 2854; PC64LE-NEXT: std 0, 16(1) 2855; PC64LE-NEXT: stdu 1, -80(1) 2856; PC64LE-NEXT: li 3, 64 2857; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2858; PC64LE-NEXT: addis 3, 2, .LCPI49_0@toc@ha 2859; PC64LE-NEXT: lfd 1, .LCPI49_0@toc@l(3) 2860; PC64LE-NEXT: bl cos 2861; PC64LE-NEXT: nop 2862; PC64LE-NEXT: li 3, 48 2863; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2864; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2865; PC64LE-NEXT: addis 3, 2, .LCPI49_1@toc@ha 2866; PC64LE-NEXT: lfd 1, .LCPI49_1@toc@l(3) 2867; PC64LE-NEXT: bl cos 2868; PC64LE-NEXT: nop 2869; PC64LE-NEXT: li 3, 48 2870; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2871; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2872; PC64LE-NEXT: addis 3, 2, .LCPI49_2@toc@ha 2873; PC64LE-NEXT: xxmrghd 63, 1, 0 2874; PC64LE-NEXT: lfd 1, .LCPI49_2@toc@l(3) 2875; PC64LE-NEXT: bl cos 2876; PC64LE-NEXT: nop 2877; PC64LE-NEXT: li 3, 48 2878; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2879; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2880; PC64LE-NEXT: addis 3, 2, .LCPI49_3@toc@ha 2881; PC64LE-NEXT: lfs 1, .LCPI49_3@toc@l(3) 2882; PC64LE-NEXT: bl cos 2883; PC64LE-NEXT: nop 2884; PC64LE-NEXT: li 3, 48 2885; PC64LE-NEXT: vmr 3, 31 2886; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2887; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2888; PC64LE-NEXT: li 3, 64 2889; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2890; PC64LE-NEXT: xxmrghd 34, 0, 1 2891; PC64LE-NEXT: addi 1, 1, 80 2892; PC64LE-NEXT: ld 0, 16(1) 2893; PC64LE-NEXT: mtlr 0 2894; PC64LE-NEXT: blr 2895; 2896; PC64LE9-LABEL: constrained_vector_cos_v4f64: 2897; PC64LE9: # %bb.0: # %entry 2898; PC64LE9-NEXT: mflr 0 2899; PC64LE9-NEXT: std 0, 16(1) 2900; PC64LE9-NEXT: stdu 1, -64(1) 2901; PC64LE9-NEXT: addis 3, 2, .LCPI49_0@toc@ha 2902; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2903; PC64LE9-NEXT: lfd 1, .LCPI49_0@toc@l(3) 2904; PC64LE9-NEXT: bl cos 2905; PC64LE9-NEXT: nop 2906; PC64LE9-NEXT: addis 3, 2, .LCPI49_1@toc@ha 2907; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2908; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2909; PC64LE9-NEXT: lfd 1, .LCPI49_1@toc@l(3) 2910; PC64LE9-NEXT: bl cos 2911; PC64LE9-NEXT: nop 2912; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2913; PC64LE9-NEXT: addis 3, 2, .LCPI49_2@toc@ha 2914; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2915; PC64LE9-NEXT: xxmrghd 63, 1, 0 2916; PC64LE9-NEXT: lfd 1, .LCPI49_2@toc@l(3) 2917; PC64LE9-NEXT: bl cos 2918; PC64LE9-NEXT: nop 2919; PC64LE9-NEXT: addis 3, 2, .LCPI49_3@toc@ha 2920; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2921; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2922; PC64LE9-NEXT: lfs 1, .LCPI49_3@toc@l(3) 2923; PC64LE9-NEXT: bl cos 2924; PC64LE9-NEXT: nop 2925; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2926; PC64LE9-NEXT: vmr 3, 31 2927; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2928; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2929; PC64LE9-NEXT: xxmrghd 34, 0, 1 2930; PC64LE9-NEXT: addi 1, 1, 64 2931; PC64LE9-NEXT: ld 0, 16(1) 2932; PC64LE9-NEXT: mtlr 0 2933; PC64LE9-NEXT: blr 2934entry: 2935 %cos = call <4 x double> @llvm.experimental.constrained.cos.v4f64( 2936 <4 x double> <double 42.0, double 42.1, 2937 double 42.2, double 42.3>, 2938 metadata !"round.dynamic", 2939 metadata !"fpexcept.strict") #1 2940 ret <4 x double> %cos 2941} 2942 2943define <1 x float> @constrained_vector_exp_v1f32() #0 { 2944; PC64LE-LABEL: constrained_vector_exp_v1f32: 2945; PC64LE: # %bb.0: # %entry 2946; PC64LE-NEXT: mflr 0 2947; PC64LE-NEXT: std 0, 16(1) 2948; PC64LE-NEXT: stdu 1, -32(1) 2949; PC64LE-NEXT: addis 3, 2, .LCPI50_0@toc@ha 2950; PC64LE-NEXT: lfs 1, .LCPI50_0@toc@l(3) 2951; PC64LE-NEXT: bl expf 2952; PC64LE-NEXT: nop 2953; PC64LE-NEXT: addi 1, 1, 32 2954; PC64LE-NEXT: ld 0, 16(1) 2955; PC64LE-NEXT: mtlr 0 2956; PC64LE-NEXT: blr 2957; 2958; PC64LE9-LABEL: constrained_vector_exp_v1f32: 2959; PC64LE9: # %bb.0: # %entry 2960; PC64LE9-NEXT: mflr 0 2961; PC64LE9-NEXT: std 0, 16(1) 2962; PC64LE9-NEXT: stdu 1, -32(1) 2963; PC64LE9-NEXT: addis 3, 2, .LCPI50_0@toc@ha 2964; PC64LE9-NEXT: lfs 1, .LCPI50_0@toc@l(3) 2965; PC64LE9-NEXT: bl expf 2966; PC64LE9-NEXT: nop 2967; PC64LE9-NEXT: addi 1, 1, 32 2968; PC64LE9-NEXT: ld 0, 16(1) 2969; PC64LE9-NEXT: mtlr 0 2970; PC64LE9-NEXT: blr 2971entry: 2972 %exp = call <1 x float> @llvm.experimental.constrained.exp.v1f32( 2973 <1 x float> <float 42.0>, 2974 metadata !"round.dynamic", 2975 metadata !"fpexcept.strict") #1 2976 ret <1 x float> %exp 2977} 2978 2979define <2 x double> @constrained_vector_exp_v2f64() #0 { 2980; PC64LE-LABEL: constrained_vector_exp_v2f64: 2981; PC64LE: # %bb.0: # %entry 2982; PC64LE-NEXT: mflr 0 2983; PC64LE-NEXT: std 0, 16(1) 2984; PC64LE-NEXT: stdu 1, -64(1) 2985; PC64LE-NEXT: addis 3, 2, .LCPI51_0@toc@ha 2986; PC64LE-NEXT: lfd 1, .LCPI51_0@toc@l(3) 2987; PC64LE-NEXT: bl exp 2988; PC64LE-NEXT: nop 2989; PC64LE-NEXT: li 3, 48 2990; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2991; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2992; PC64LE-NEXT: addis 3, 2, .LCPI51_1@toc@ha 2993; PC64LE-NEXT: lfs 1, .LCPI51_1@toc@l(3) 2994; PC64LE-NEXT: bl exp 2995; PC64LE-NEXT: nop 2996; PC64LE-NEXT: li 3, 48 2997; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2998; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2999; PC64LE-NEXT: xxmrghd 34, 0, 1 3000; PC64LE-NEXT: addi 1, 1, 64 3001; PC64LE-NEXT: ld 0, 16(1) 3002; PC64LE-NEXT: mtlr 0 3003; PC64LE-NEXT: blr 3004; 3005; PC64LE9-LABEL: constrained_vector_exp_v2f64: 3006; PC64LE9: # %bb.0: # %entry 3007; PC64LE9-NEXT: mflr 0 3008; PC64LE9-NEXT: std 0, 16(1) 3009; PC64LE9-NEXT: stdu 1, -48(1) 3010; PC64LE9-NEXT: addis 3, 2, .LCPI51_0@toc@ha 3011; PC64LE9-NEXT: lfd 1, .LCPI51_0@toc@l(3) 3012; PC64LE9-NEXT: bl exp 3013; PC64LE9-NEXT: nop 3014; PC64LE9-NEXT: addis 3, 2, .LCPI51_1@toc@ha 3015; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3016; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3017; PC64LE9-NEXT: lfs 1, .LCPI51_1@toc@l(3) 3018; PC64LE9-NEXT: bl exp 3019; PC64LE9-NEXT: nop 3020; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3021; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3022; PC64LE9-NEXT: xxmrghd 34, 0, 1 3023; PC64LE9-NEXT: addi 1, 1, 48 3024; PC64LE9-NEXT: ld 0, 16(1) 3025; PC64LE9-NEXT: mtlr 0 3026; PC64LE9-NEXT: blr 3027entry: 3028 %exp = call <2 x double> @llvm.experimental.constrained.exp.v2f64( 3029 <2 x double> <double 42.0, double 42.1>, 3030 metadata !"round.dynamic", 3031 metadata !"fpexcept.strict") #1 3032 ret <2 x double> %exp 3033} 3034 3035define <3 x float> @constrained_vector_exp_v3f32() #0 { 3036; PC64LE-LABEL: constrained_vector_exp_v3f32: 3037; PC64LE: # %bb.0: # %entry 3038; PC64LE-NEXT: mflr 0 3039; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3040; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3041; PC64LE-NEXT: std 0, 16(1) 3042; PC64LE-NEXT: stdu 1, -48(1) 3043; PC64LE-NEXT: addis 3, 2, .LCPI52_0@toc@ha 3044; PC64LE-NEXT: lfs 1, .LCPI52_0@toc@l(3) 3045; PC64LE-NEXT: bl expf 3046; PC64LE-NEXT: nop 3047; PC64LE-NEXT: addis 3, 2, .LCPI52_1@toc@ha 3048; PC64LE-NEXT: fmr 31, 1 3049; PC64LE-NEXT: lfs 1, .LCPI52_1@toc@l(3) 3050; PC64LE-NEXT: bl expf 3051; PC64LE-NEXT: nop 3052; PC64LE-NEXT: addis 3, 2, .LCPI52_2@toc@ha 3053; PC64LE-NEXT: fmr 30, 1 3054; PC64LE-NEXT: lfs 1, .LCPI52_2@toc@l(3) 3055; PC64LE-NEXT: bl expf 3056; PC64LE-NEXT: nop 3057; PC64LE-NEXT: xscvdpspn 0, 30 3058; PC64LE-NEXT: addis 3, 2, .LCPI52_3@toc@ha 3059; PC64LE-NEXT: xscvdpspn 1, 1 3060; PC64LE-NEXT: addi 3, 3, .LCPI52_3@toc@l 3061; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 3062; PC64LE-NEXT: xscvdpspn 0, 31 3063; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 3064; PC64LE-NEXT: vmrghw 2, 2, 3 3065; PC64LE-NEXT: lvx 3, 0, 3 3066; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 3067; PC64LE-NEXT: vperm 2, 4, 2, 3 3068; PC64LE-NEXT: addi 1, 1, 48 3069; PC64LE-NEXT: ld 0, 16(1) 3070; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3071; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3072; PC64LE-NEXT: mtlr 0 3073; PC64LE-NEXT: blr 3074; 3075; PC64LE9-LABEL: constrained_vector_exp_v3f32: 3076; PC64LE9: # %bb.0: # %entry 3077; PC64LE9-NEXT: mflr 0 3078; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3079; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3080; PC64LE9-NEXT: std 0, 16(1) 3081; PC64LE9-NEXT: stdu 1, -48(1) 3082; PC64LE9-NEXT: addis 3, 2, .LCPI52_0@toc@ha 3083; PC64LE9-NEXT: lfs 1, .LCPI52_0@toc@l(3) 3084; PC64LE9-NEXT: bl expf 3085; PC64LE9-NEXT: nop 3086; PC64LE9-NEXT: addis 3, 2, .LCPI52_1@toc@ha 3087; PC64LE9-NEXT: fmr 31, 1 3088; PC64LE9-NEXT: lfs 1, .LCPI52_1@toc@l(3) 3089; PC64LE9-NEXT: bl expf 3090; PC64LE9-NEXT: nop 3091; PC64LE9-NEXT: addis 3, 2, .LCPI52_2@toc@ha 3092; PC64LE9-NEXT: fmr 30, 1 3093; PC64LE9-NEXT: lfs 1, .LCPI52_2@toc@l(3) 3094; PC64LE9-NEXT: bl expf 3095; PC64LE9-NEXT: nop 3096; PC64LE9-NEXT: xscvdpspn 0, 1 3097; PC64LE9-NEXT: addis 3, 2, .LCPI52_3@toc@ha 3098; PC64LE9-NEXT: addi 3, 3, .LCPI52_3@toc@l 3099; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 3100; PC64LE9-NEXT: xscvdpspn 0, 30 3101; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 3102; PC64LE9-NEXT: xscvdpspn 0, 31 3103; PC64LE9-NEXT: vmrghw 2, 3, 2 3104; PC64LE9-NEXT: lxvx 35, 0, 3 3105; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 3106; PC64LE9-NEXT: vperm 2, 4, 2, 3 3107; PC64LE9-NEXT: addi 1, 1, 48 3108; PC64LE9-NEXT: ld 0, 16(1) 3109; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3110; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3111; PC64LE9-NEXT: mtlr 0 3112; PC64LE9-NEXT: blr 3113entry: 3114 %exp = call <3 x float> @llvm.experimental.constrained.exp.v3f32( 3115 <3 x float> <float 42.0, float 43.0, float 44.0>, 3116 metadata !"round.dynamic", 3117 metadata !"fpexcept.strict") #1 3118 ret <3 x float> %exp 3119} 3120 3121define <3 x double> @constrained_vector_exp_v3f64() #0 { 3122; PC64LE-LABEL: constrained_vector_exp_v3f64: 3123; PC64LE: # %bb.0: # %entry 3124; PC64LE-NEXT: mflr 0 3125; PC64LE-NEXT: std 0, 16(1) 3126; PC64LE-NEXT: stdu 1, -80(1) 3127; PC64LE-NEXT: li 3, 64 3128; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3129; PC64LE-NEXT: addis 3, 2, .LCPI53_0@toc@ha 3130; PC64LE-NEXT: lfd 1, .LCPI53_0@toc@l(3) 3131; PC64LE-NEXT: bl exp 3132; PC64LE-NEXT: nop 3133; PC64LE-NEXT: li 3, 48 3134; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3135; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3136; PC64LE-NEXT: addis 3, 2, .LCPI53_1@toc@ha 3137; PC64LE-NEXT: lfs 1, .LCPI53_1@toc@l(3) 3138; PC64LE-NEXT: bl exp 3139; PC64LE-NEXT: nop 3140; PC64LE-NEXT: li 3, 48 3141; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3142; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3143; PC64LE-NEXT: addis 3, 2, .LCPI53_2@toc@ha 3144; PC64LE-NEXT: xxmrghd 63, 0, 1 3145; PC64LE-NEXT: lfd 1, .LCPI53_2@toc@l(3) 3146; PC64LE-NEXT: bl exp 3147; PC64LE-NEXT: nop 3148; PC64LE-NEXT: xxswapd 0, 63 3149; PC64LE-NEXT: li 3, 64 3150; PC64LE-NEXT: xxlor 2, 63, 63 3151; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3152; PC64LE-NEXT: fmr 3, 1 3153; PC64LE-NEXT: fmr 1, 0 3154; PC64LE-NEXT: addi 1, 1, 80 3155; PC64LE-NEXT: ld 0, 16(1) 3156; PC64LE-NEXT: mtlr 0 3157; PC64LE-NEXT: blr 3158; 3159; PC64LE9-LABEL: constrained_vector_exp_v3f64: 3160; PC64LE9: # %bb.0: # %entry 3161; PC64LE9-NEXT: mflr 0 3162; PC64LE9-NEXT: std 0, 16(1) 3163; PC64LE9-NEXT: stdu 1, -64(1) 3164; PC64LE9-NEXT: addis 3, 2, .LCPI53_0@toc@ha 3165; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3166; PC64LE9-NEXT: lfd 1, .LCPI53_0@toc@l(3) 3167; PC64LE9-NEXT: bl exp 3168; PC64LE9-NEXT: nop 3169; PC64LE9-NEXT: addis 3, 2, .LCPI53_1@toc@ha 3170; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3171; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3172; PC64LE9-NEXT: lfs 1, .LCPI53_1@toc@l(3) 3173; PC64LE9-NEXT: bl exp 3174; PC64LE9-NEXT: nop 3175; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3176; PC64LE9-NEXT: addis 3, 2, .LCPI53_2@toc@ha 3177; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3178; PC64LE9-NEXT: xxmrghd 63, 0, 1 3179; PC64LE9-NEXT: lfd 1, .LCPI53_2@toc@l(3) 3180; PC64LE9-NEXT: bl exp 3181; PC64LE9-NEXT: nop 3182; PC64LE9-NEXT: fmr 3, 1 3183; PC64LE9-NEXT: xxswapd 1, 63 3184; PC64LE9-NEXT: xscpsgndp 2, 63, 63 3185; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3186; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3187; PC64LE9-NEXT: addi 1, 1, 64 3188; PC64LE9-NEXT: ld 0, 16(1) 3189; PC64LE9-NEXT: mtlr 0 3190; PC64LE9-NEXT: blr 3191entry: 3192 %exp = call <3 x double> @llvm.experimental.constrained.exp.v3f64( 3193 <3 x double> <double 42.0, double 42.1, double 42.2>, 3194 metadata !"round.dynamic", 3195 metadata !"fpexcept.strict") #1 3196 ret <3 x double> %exp 3197} 3198 3199define <4 x double> @constrained_vector_exp_v4f64() #0 { 3200; PC64LE-LABEL: constrained_vector_exp_v4f64: 3201; PC64LE: # %bb.0: # %entry 3202; PC64LE-NEXT: mflr 0 3203; PC64LE-NEXT: std 0, 16(1) 3204; PC64LE-NEXT: stdu 1, -80(1) 3205; PC64LE-NEXT: li 3, 64 3206; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3207; PC64LE-NEXT: addis 3, 2, .LCPI54_0@toc@ha 3208; PC64LE-NEXT: lfd 1, .LCPI54_0@toc@l(3) 3209; PC64LE-NEXT: bl exp 3210; PC64LE-NEXT: nop 3211; PC64LE-NEXT: li 3, 48 3212; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3213; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3214; PC64LE-NEXT: addis 3, 2, .LCPI54_1@toc@ha 3215; PC64LE-NEXT: lfd 1, .LCPI54_1@toc@l(3) 3216; PC64LE-NEXT: bl exp 3217; PC64LE-NEXT: nop 3218; PC64LE-NEXT: li 3, 48 3219; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3220; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3221; PC64LE-NEXT: addis 3, 2, .LCPI54_2@toc@ha 3222; PC64LE-NEXT: xxmrghd 63, 1, 0 3223; PC64LE-NEXT: lfd 1, .LCPI54_2@toc@l(3) 3224; PC64LE-NEXT: bl exp 3225; PC64LE-NEXT: nop 3226; PC64LE-NEXT: li 3, 48 3227; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3228; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3229; PC64LE-NEXT: addis 3, 2, .LCPI54_3@toc@ha 3230; PC64LE-NEXT: lfs 1, .LCPI54_3@toc@l(3) 3231; PC64LE-NEXT: bl exp 3232; PC64LE-NEXT: nop 3233; PC64LE-NEXT: li 3, 48 3234; PC64LE-NEXT: vmr 3, 31 3235; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3236; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3237; PC64LE-NEXT: li 3, 64 3238; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3239; PC64LE-NEXT: xxmrghd 34, 0, 1 3240; PC64LE-NEXT: addi 1, 1, 80 3241; PC64LE-NEXT: ld 0, 16(1) 3242; PC64LE-NEXT: mtlr 0 3243; PC64LE-NEXT: blr 3244; 3245; PC64LE9-LABEL: constrained_vector_exp_v4f64: 3246; PC64LE9: # %bb.0: # %entry 3247; PC64LE9-NEXT: mflr 0 3248; PC64LE9-NEXT: std 0, 16(1) 3249; PC64LE9-NEXT: stdu 1, -64(1) 3250; PC64LE9-NEXT: addis 3, 2, .LCPI54_0@toc@ha 3251; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3252; PC64LE9-NEXT: lfd 1, .LCPI54_0@toc@l(3) 3253; PC64LE9-NEXT: bl exp 3254; PC64LE9-NEXT: nop 3255; PC64LE9-NEXT: addis 3, 2, .LCPI54_1@toc@ha 3256; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3257; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3258; PC64LE9-NEXT: lfd 1, .LCPI54_1@toc@l(3) 3259; PC64LE9-NEXT: bl exp 3260; PC64LE9-NEXT: nop 3261; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3262; PC64LE9-NEXT: addis 3, 2, .LCPI54_2@toc@ha 3263; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3264; PC64LE9-NEXT: xxmrghd 63, 1, 0 3265; PC64LE9-NEXT: lfd 1, .LCPI54_2@toc@l(3) 3266; PC64LE9-NEXT: bl exp 3267; PC64LE9-NEXT: nop 3268; PC64LE9-NEXT: addis 3, 2, .LCPI54_3@toc@ha 3269; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3270; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3271; PC64LE9-NEXT: lfs 1, .LCPI54_3@toc@l(3) 3272; PC64LE9-NEXT: bl exp 3273; PC64LE9-NEXT: nop 3274; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3275; PC64LE9-NEXT: vmr 3, 31 3276; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3277; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3278; PC64LE9-NEXT: xxmrghd 34, 0, 1 3279; PC64LE9-NEXT: addi 1, 1, 64 3280; PC64LE9-NEXT: ld 0, 16(1) 3281; PC64LE9-NEXT: mtlr 0 3282; PC64LE9-NEXT: blr 3283entry: 3284 %exp = call <4 x double> @llvm.experimental.constrained.exp.v4f64( 3285 <4 x double> <double 42.0, double 42.1, 3286 double 42.2, double 42.3>, 3287 metadata !"round.dynamic", 3288 metadata !"fpexcept.strict") #1 3289 ret <4 x double> %exp 3290} 3291 3292define <1 x float> @constrained_vector_exp2_v1f32() #0 { 3293; PC64LE-LABEL: constrained_vector_exp2_v1f32: 3294; PC64LE: # %bb.0: # %entry 3295; PC64LE-NEXT: mflr 0 3296; PC64LE-NEXT: std 0, 16(1) 3297; PC64LE-NEXT: stdu 1, -32(1) 3298; PC64LE-NEXT: addis 3, 2, .LCPI55_0@toc@ha 3299; PC64LE-NEXT: lfs 1, .LCPI55_0@toc@l(3) 3300; PC64LE-NEXT: bl exp2f 3301; PC64LE-NEXT: nop 3302; PC64LE-NEXT: addi 1, 1, 32 3303; PC64LE-NEXT: ld 0, 16(1) 3304; PC64LE-NEXT: mtlr 0 3305; PC64LE-NEXT: blr 3306; 3307; PC64LE9-LABEL: constrained_vector_exp2_v1f32: 3308; PC64LE9: # %bb.0: # %entry 3309; PC64LE9-NEXT: mflr 0 3310; PC64LE9-NEXT: std 0, 16(1) 3311; PC64LE9-NEXT: stdu 1, -32(1) 3312; PC64LE9-NEXT: addis 3, 2, .LCPI55_0@toc@ha 3313; PC64LE9-NEXT: lfs 1, .LCPI55_0@toc@l(3) 3314; PC64LE9-NEXT: bl exp2f 3315; PC64LE9-NEXT: nop 3316; PC64LE9-NEXT: addi 1, 1, 32 3317; PC64LE9-NEXT: ld 0, 16(1) 3318; PC64LE9-NEXT: mtlr 0 3319; PC64LE9-NEXT: blr 3320entry: 3321 %exp2 = call <1 x float> @llvm.experimental.constrained.exp2.v1f32( 3322 <1 x float> <float 42.0>, 3323 metadata !"round.dynamic", 3324 metadata !"fpexcept.strict") #1 3325 ret <1 x float> %exp2 3326} 3327 3328define <2 x double> @constrained_vector_exp2_v2f64() #0 { 3329; PC64LE-LABEL: constrained_vector_exp2_v2f64: 3330; PC64LE: # %bb.0: # %entry 3331; PC64LE-NEXT: mflr 0 3332; PC64LE-NEXT: std 0, 16(1) 3333; PC64LE-NEXT: stdu 1, -64(1) 3334; PC64LE-NEXT: addis 3, 2, .LCPI56_0@toc@ha 3335; PC64LE-NEXT: lfd 1, .LCPI56_0@toc@l(3) 3336; PC64LE-NEXT: bl exp2 3337; PC64LE-NEXT: nop 3338; PC64LE-NEXT: li 3, 48 3339; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3340; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3341; PC64LE-NEXT: addis 3, 2, .LCPI56_1@toc@ha 3342; PC64LE-NEXT: lfs 1, .LCPI56_1@toc@l(3) 3343; PC64LE-NEXT: bl exp2 3344; PC64LE-NEXT: nop 3345; PC64LE-NEXT: li 3, 48 3346; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3347; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3348; PC64LE-NEXT: xxmrghd 34, 1, 0 3349; PC64LE-NEXT: addi 1, 1, 64 3350; PC64LE-NEXT: ld 0, 16(1) 3351; PC64LE-NEXT: mtlr 0 3352; PC64LE-NEXT: blr 3353; 3354; PC64LE9-LABEL: constrained_vector_exp2_v2f64: 3355; PC64LE9: # %bb.0: # %entry 3356; PC64LE9-NEXT: mflr 0 3357; PC64LE9-NEXT: std 0, 16(1) 3358; PC64LE9-NEXT: stdu 1, -48(1) 3359; PC64LE9-NEXT: addis 3, 2, .LCPI56_0@toc@ha 3360; PC64LE9-NEXT: lfd 1, .LCPI56_0@toc@l(3) 3361; PC64LE9-NEXT: bl exp2 3362; PC64LE9-NEXT: nop 3363; PC64LE9-NEXT: addis 3, 2, .LCPI56_1@toc@ha 3364; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3365; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3366; PC64LE9-NEXT: lfs 1, .LCPI56_1@toc@l(3) 3367; PC64LE9-NEXT: bl exp2 3368; PC64LE9-NEXT: nop 3369; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3370; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3371; PC64LE9-NEXT: xxmrghd 34, 1, 0 3372; PC64LE9-NEXT: addi 1, 1, 48 3373; PC64LE9-NEXT: ld 0, 16(1) 3374; PC64LE9-NEXT: mtlr 0 3375; PC64LE9-NEXT: blr 3376entry: 3377 %exp2 = call <2 x double> @llvm.experimental.constrained.exp2.v2f64( 3378 <2 x double> <double 42.1, double 42.0>, 3379 metadata !"round.dynamic", 3380 metadata !"fpexcept.strict") #1 3381 ret <2 x double> %exp2 3382} 3383 3384define <3 x float> @constrained_vector_exp2_v3f32() #0 { 3385; PC64LE-LABEL: constrained_vector_exp2_v3f32: 3386; PC64LE: # %bb.0: # %entry 3387; PC64LE-NEXT: mflr 0 3388; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3389; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3390; PC64LE-NEXT: std 0, 16(1) 3391; PC64LE-NEXT: stdu 1, -48(1) 3392; PC64LE-NEXT: addis 3, 2, .LCPI57_0@toc@ha 3393; PC64LE-NEXT: lfs 1, .LCPI57_0@toc@l(3) 3394; PC64LE-NEXT: bl exp2f 3395; PC64LE-NEXT: nop 3396; PC64LE-NEXT: addis 3, 2, .LCPI57_1@toc@ha 3397; PC64LE-NEXT: fmr 31, 1 3398; PC64LE-NEXT: lfs 1, .LCPI57_1@toc@l(3) 3399; PC64LE-NEXT: bl exp2f 3400; PC64LE-NEXT: nop 3401; PC64LE-NEXT: addis 3, 2, .LCPI57_2@toc@ha 3402; PC64LE-NEXT: fmr 30, 1 3403; PC64LE-NEXT: lfs 1, .LCPI57_2@toc@l(3) 3404; PC64LE-NEXT: bl exp2f 3405; PC64LE-NEXT: nop 3406; PC64LE-NEXT: xscvdpspn 0, 30 3407; PC64LE-NEXT: addis 3, 2, .LCPI57_3@toc@ha 3408; PC64LE-NEXT: xscvdpspn 1, 1 3409; PC64LE-NEXT: addi 3, 3, .LCPI57_3@toc@l 3410; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 3411; PC64LE-NEXT: xscvdpspn 0, 31 3412; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 3413; PC64LE-NEXT: vmrghw 2, 2, 3 3414; PC64LE-NEXT: lvx 3, 0, 3 3415; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 3416; PC64LE-NEXT: vperm 2, 4, 2, 3 3417; PC64LE-NEXT: addi 1, 1, 48 3418; PC64LE-NEXT: ld 0, 16(1) 3419; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3420; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3421; PC64LE-NEXT: mtlr 0 3422; PC64LE-NEXT: blr 3423; 3424; PC64LE9-LABEL: constrained_vector_exp2_v3f32: 3425; PC64LE9: # %bb.0: # %entry 3426; PC64LE9-NEXT: mflr 0 3427; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3428; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3429; PC64LE9-NEXT: std 0, 16(1) 3430; PC64LE9-NEXT: stdu 1, -48(1) 3431; PC64LE9-NEXT: addis 3, 2, .LCPI57_0@toc@ha 3432; PC64LE9-NEXT: lfs 1, .LCPI57_0@toc@l(3) 3433; PC64LE9-NEXT: bl exp2f 3434; PC64LE9-NEXT: nop 3435; PC64LE9-NEXT: addis 3, 2, .LCPI57_1@toc@ha 3436; PC64LE9-NEXT: fmr 31, 1 3437; PC64LE9-NEXT: lfs 1, .LCPI57_1@toc@l(3) 3438; PC64LE9-NEXT: bl exp2f 3439; PC64LE9-NEXT: nop 3440; PC64LE9-NEXT: addis 3, 2, .LCPI57_2@toc@ha 3441; PC64LE9-NEXT: fmr 30, 1 3442; PC64LE9-NEXT: lfs 1, .LCPI57_2@toc@l(3) 3443; PC64LE9-NEXT: bl exp2f 3444; PC64LE9-NEXT: nop 3445; PC64LE9-NEXT: xscvdpspn 0, 1 3446; PC64LE9-NEXT: addis 3, 2, .LCPI57_3@toc@ha 3447; PC64LE9-NEXT: addi 3, 3, .LCPI57_3@toc@l 3448; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 3449; PC64LE9-NEXT: xscvdpspn 0, 30 3450; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 3451; PC64LE9-NEXT: xscvdpspn 0, 31 3452; PC64LE9-NEXT: vmrghw 2, 3, 2 3453; PC64LE9-NEXT: lxvx 35, 0, 3 3454; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 3455; PC64LE9-NEXT: vperm 2, 4, 2, 3 3456; PC64LE9-NEXT: addi 1, 1, 48 3457; PC64LE9-NEXT: ld 0, 16(1) 3458; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3459; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3460; PC64LE9-NEXT: mtlr 0 3461; PC64LE9-NEXT: blr 3462entry: 3463 %exp2 = call <3 x float> @llvm.experimental.constrained.exp2.v3f32( 3464 <3 x float> <float 42.0, float 43.0, float 44.0>, 3465 metadata !"round.dynamic", 3466 metadata !"fpexcept.strict") #1 3467 ret <3 x float> %exp2 3468} 3469 3470define <3 x double> @constrained_vector_exp2_v3f64() #0 { 3471; PC64LE-LABEL: constrained_vector_exp2_v3f64: 3472; PC64LE: # %bb.0: # %entry 3473; PC64LE-NEXT: mflr 0 3474; PC64LE-NEXT: std 0, 16(1) 3475; PC64LE-NEXT: stdu 1, -80(1) 3476; PC64LE-NEXT: li 3, 64 3477; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3478; PC64LE-NEXT: addis 3, 2, .LCPI58_0@toc@ha 3479; PC64LE-NEXT: lfd 1, .LCPI58_0@toc@l(3) 3480; PC64LE-NEXT: bl exp2 3481; PC64LE-NEXT: nop 3482; PC64LE-NEXT: li 3, 48 3483; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3484; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3485; PC64LE-NEXT: addis 3, 2, .LCPI58_1@toc@ha 3486; PC64LE-NEXT: lfs 1, .LCPI58_1@toc@l(3) 3487; PC64LE-NEXT: bl exp2 3488; PC64LE-NEXT: nop 3489; PC64LE-NEXT: li 3, 48 3490; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3491; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3492; PC64LE-NEXT: addis 3, 2, .LCPI58_2@toc@ha 3493; PC64LE-NEXT: xxmrghd 63, 0, 1 3494; PC64LE-NEXT: lfd 1, .LCPI58_2@toc@l(3) 3495; PC64LE-NEXT: bl exp2 3496; PC64LE-NEXT: nop 3497; PC64LE-NEXT: xxswapd 0, 63 3498; PC64LE-NEXT: li 3, 64 3499; PC64LE-NEXT: xxlor 2, 63, 63 3500; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3501; PC64LE-NEXT: fmr 3, 1 3502; PC64LE-NEXT: fmr 1, 0 3503; PC64LE-NEXT: addi 1, 1, 80 3504; PC64LE-NEXT: ld 0, 16(1) 3505; PC64LE-NEXT: mtlr 0 3506; PC64LE-NEXT: blr 3507; 3508; PC64LE9-LABEL: constrained_vector_exp2_v3f64: 3509; PC64LE9: # %bb.0: # %entry 3510; PC64LE9-NEXT: mflr 0 3511; PC64LE9-NEXT: std 0, 16(1) 3512; PC64LE9-NEXT: stdu 1, -64(1) 3513; PC64LE9-NEXT: addis 3, 2, .LCPI58_0@toc@ha 3514; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3515; PC64LE9-NEXT: lfd 1, .LCPI58_0@toc@l(3) 3516; PC64LE9-NEXT: bl exp2 3517; PC64LE9-NEXT: nop 3518; PC64LE9-NEXT: addis 3, 2, .LCPI58_1@toc@ha 3519; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3520; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3521; PC64LE9-NEXT: lfs 1, .LCPI58_1@toc@l(3) 3522; PC64LE9-NEXT: bl exp2 3523; PC64LE9-NEXT: nop 3524; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3525; PC64LE9-NEXT: addis 3, 2, .LCPI58_2@toc@ha 3526; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3527; PC64LE9-NEXT: xxmrghd 63, 0, 1 3528; PC64LE9-NEXT: lfd 1, .LCPI58_2@toc@l(3) 3529; PC64LE9-NEXT: bl exp2 3530; PC64LE9-NEXT: nop 3531; PC64LE9-NEXT: fmr 3, 1 3532; PC64LE9-NEXT: xxswapd 1, 63 3533; PC64LE9-NEXT: xscpsgndp 2, 63, 63 3534; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3535; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3536; PC64LE9-NEXT: addi 1, 1, 64 3537; PC64LE9-NEXT: ld 0, 16(1) 3538; PC64LE9-NEXT: mtlr 0 3539; PC64LE9-NEXT: blr 3540entry: 3541 %exp2 = call <3 x double> @llvm.experimental.constrained.exp2.v3f64( 3542 <3 x double> <double 42.0, double 42.1, double 42.2>, 3543 metadata !"round.dynamic", 3544 metadata !"fpexcept.strict") #1 3545 ret <3 x double> %exp2 3546} 3547 3548define <4 x double> @constrained_vector_exp2_v4f64() #0 { 3549; PC64LE-LABEL: constrained_vector_exp2_v4f64: 3550; PC64LE: # %bb.0: # %entry 3551; PC64LE-NEXT: mflr 0 3552; PC64LE-NEXT: std 0, 16(1) 3553; PC64LE-NEXT: stdu 1, -80(1) 3554; PC64LE-NEXT: li 3, 64 3555; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3556; PC64LE-NEXT: addis 3, 2, .LCPI59_0@toc@ha 3557; PC64LE-NEXT: lfd 1, .LCPI59_0@toc@l(3) 3558; PC64LE-NEXT: bl exp2 3559; PC64LE-NEXT: nop 3560; PC64LE-NEXT: li 3, 48 3561; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3562; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3563; PC64LE-NEXT: addis 3, 2, .LCPI59_1@toc@ha 3564; PC64LE-NEXT: lfd 1, .LCPI59_1@toc@l(3) 3565; PC64LE-NEXT: bl exp2 3566; PC64LE-NEXT: nop 3567; PC64LE-NEXT: li 3, 48 3568; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3569; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3570; PC64LE-NEXT: addis 3, 2, .LCPI59_2@toc@ha 3571; PC64LE-NEXT: xxmrghd 63, 1, 0 3572; PC64LE-NEXT: lfd 1, .LCPI59_2@toc@l(3) 3573; PC64LE-NEXT: bl exp2 3574; PC64LE-NEXT: nop 3575; PC64LE-NEXT: li 3, 48 3576; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3577; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3578; PC64LE-NEXT: addis 3, 2, .LCPI59_3@toc@ha 3579; PC64LE-NEXT: lfd 1, .LCPI59_3@toc@l(3) 3580; PC64LE-NEXT: bl exp2 3581; PC64LE-NEXT: nop 3582; PC64LE-NEXT: li 3, 48 3583; PC64LE-NEXT: vmr 2, 31 3584; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3585; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3586; PC64LE-NEXT: li 3, 64 3587; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3588; PC64LE-NEXT: xxmrghd 35, 1, 0 3589; PC64LE-NEXT: addi 1, 1, 80 3590; PC64LE-NEXT: ld 0, 16(1) 3591; PC64LE-NEXT: mtlr 0 3592; PC64LE-NEXT: blr 3593; 3594; PC64LE9-LABEL: constrained_vector_exp2_v4f64: 3595; PC64LE9: # %bb.0: # %entry 3596; PC64LE9-NEXT: mflr 0 3597; PC64LE9-NEXT: std 0, 16(1) 3598; PC64LE9-NEXT: stdu 1, -64(1) 3599; PC64LE9-NEXT: addis 3, 2, .LCPI59_0@toc@ha 3600; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3601; PC64LE9-NEXT: lfd 1, .LCPI59_0@toc@l(3) 3602; PC64LE9-NEXT: bl exp2 3603; PC64LE9-NEXT: nop 3604; PC64LE9-NEXT: addis 3, 2, .LCPI59_1@toc@ha 3605; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3606; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3607; PC64LE9-NEXT: lfd 1, .LCPI59_1@toc@l(3) 3608; PC64LE9-NEXT: bl exp2 3609; PC64LE9-NEXT: nop 3610; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3611; PC64LE9-NEXT: addis 3, 2, .LCPI59_2@toc@ha 3612; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3613; PC64LE9-NEXT: xxmrghd 63, 1, 0 3614; PC64LE9-NEXT: lfd 1, .LCPI59_2@toc@l(3) 3615; PC64LE9-NEXT: bl exp2 3616; PC64LE9-NEXT: nop 3617; PC64LE9-NEXT: addis 3, 2, .LCPI59_3@toc@ha 3618; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3619; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3620; PC64LE9-NEXT: lfd 1, .LCPI59_3@toc@l(3) 3621; PC64LE9-NEXT: bl exp2 3622; PC64LE9-NEXT: nop 3623; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3624; PC64LE9-NEXT: vmr 2, 31 3625; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3626; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3627; PC64LE9-NEXT: xxmrghd 35, 1, 0 3628; PC64LE9-NEXT: addi 1, 1, 64 3629; PC64LE9-NEXT: ld 0, 16(1) 3630; PC64LE9-NEXT: mtlr 0 3631; PC64LE9-NEXT: blr 3632entry: 3633 %exp2 = call <4 x double> @llvm.experimental.constrained.exp2.v4f64( 3634 <4 x double> <double 42.1, double 42.2, 3635 double 42.3, double 42.4>, 3636 metadata !"round.dynamic", 3637 metadata !"fpexcept.strict") #1 3638 ret <4 x double> %exp2 3639} 3640 3641define <1 x float> @constrained_vector_log_v1f32() #0 { 3642; PC64LE-LABEL: constrained_vector_log_v1f32: 3643; PC64LE: # %bb.0: # %entry 3644; PC64LE-NEXT: mflr 0 3645; PC64LE-NEXT: std 0, 16(1) 3646; PC64LE-NEXT: stdu 1, -32(1) 3647; PC64LE-NEXT: addis 3, 2, .LCPI60_0@toc@ha 3648; PC64LE-NEXT: lfs 1, .LCPI60_0@toc@l(3) 3649; PC64LE-NEXT: bl logf 3650; PC64LE-NEXT: nop 3651; PC64LE-NEXT: addi 1, 1, 32 3652; PC64LE-NEXT: ld 0, 16(1) 3653; PC64LE-NEXT: mtlr 0 3654; PC64LE-NEXT: blr 3655; 3656; PC64LE9-LABEL: constrained_vector_log_v1f32: 3657; PC64LE9: # %bb.0: # %entry 3658; PC64LE9-NEXT: mflr 0 3659; PC64LE9-NEXT: std 0, 16(1) 3660; PC64LE9-NEXT: stdu 1, -32(1) 3661; PC64LE9-NEXT: addis 3, 2, .LCPI60_0@toc@ha 3662; PC64LE9-NEXT: lfs 1, .LCPI60_0@toc@l(3) 3663; PC64LE9-NEXT: bl logf 3664; PC64LE9-NEXT: nop 3665; PC64LE9-NEXT: addi 1, 1, 32 3666; PC64LE9-NEXT: ld 0, 16(1) 3667; PC64LE9-NEXT: mtlr 0 3668; PC64LE9-NEXT: blr 3669entry: 3670 %log = call <1 x float> @llvm.experimental.constrained.log.v1f32( 3671 <1 x float> <float 42.0>, 3672 metadata !"round.dynamic", 3673 metadata !"fpexcept.strict") #1 3674 ret <1 x float> %log 3675} 3676 3677define <2 x double> @constrained_vector_log_v2f64() #0 { 3678; PC64LE-LABEL: constrained_vector_log_v2f64: 3679; PC64LE: # %bb.0: # %entry 3680; PC64LE-NEXT: mflr 0 3681; PC64LE-NEXT: std 0, 16(1) 3682; PC64LE-NEXT: stdu 1, -64(1) 3683; PC64LE-NEXT: addis 3, 2, .LCPI61_0@toc@ha 3684; PC64LE-NEXT: lfd 1, .LCPI61_0@toc@l(3) 3685; PC64LE-NEXT: bl log 3686; PC64LE-NEXT: nop 3687; PC64LE-NEXT: li 3, 48 3688; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3689; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3690; PC64LE-NEXT: addis 3, 2, .LCPI61_1@toc@ha 3691; PC64LE-NEXT: lfs 1, .LCPI61_1@toc@l(3) 3692; PC64LE-NEXT: bl log 3693; PC64LE-NEXT: nop 3694; PC64LE-NEXT: li 3, 48 3695; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3696; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3697; PC64LE-NEXT: xxmrghd 34, 0, 1 3698; PC64LE-NEXT: addi 1, 1, 64 3699; PC64LE-NEXT: ld 0, 16(1) 3700; PC64LE-NEXT: mtlr 0 3701; PC64LE-NEXT: blr 3702; 3703; PC64LE9-LABEL: constrained_vector_log_v2f64: 3704; PC64LE9: # %bb.0: # %entry 3705; PC64LE9-NEXT: mflr 0 3706; PC64LE9-NEXT: std 0, 16(1) 3707; PC64LE9-NEXT: stdu 1, -48(1) 3708; PC64LE9-NEXT: addis 3, 2, .LCPI61_0@toc@ha 3709; PC64LE9-NEXT: lfd 1, .LCPI61_0@toc@l(3) 3710; PC64LE9-NEXT: bl log 3711; PC64LE9-NEXT: nop 3712; PC64LE9-NEXT: addis 3, 2, .LCPI61_1@toc@ha 3713; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3714; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3715; PC64LE9-NEXT: lfs 1, .LCPI61_1@toc@l(3) 3716; PC64LE9-NEXT: bl log 3717; PC64LE9-NEXT: nop 3718; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3719; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3720; PC64LE9-NEXT: xxmrghd 34, 0, 1 3721; PC64LE9-NEXT: addi 1, 1, 48 3722; PC64LE9-NEXT: ld 0, 16(1) 3723; PC64LE9-NEXT: mtlr 0 3724; PC64LE9-NEXT: blr 3725entry: 3726 %log = call <2 x double> @llvm.experimental.constrained.log.v2f64( 3727 <2 x double> <double 42.0, double 42.1>, 3728 metadata !"round.dynamic", 3729 metadata !"fpexcept.strict") #1 3730 ret <2 x double> %log 3731} 3732 3733define <3 x float> @constrained_vector_log_v3f32() #0 { 3734; PC64LE-LABEL: constrained_vector_log_v3f32: 3735; PC64LE: # %bb.0: # %entry 3736; PC64LE-NEXT: mflr 0 3737; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3738; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3739; PC64LE-NEXT: std 0, 16(1) 3740; PC64LE-NEXT: stdu 1, -48(1) 3741; PC64LE-NEXT: addis 3, 2, .LCPI62_0@toc@ha 3742; PC64LE-NEXT: lfs 1, .LCPI62_0@toc@l(3) 3743; PC64LE-NEXT: bl logf 3744; PC64LE-NEXT: nop 3745; PC64LE-NEXT: addis 3, 2, .LCPI62_1@toc@ha 3746; PC64LE-NEXT: fmr 31, 1 3747; PC64LE-NEXT: lfs 1, .LCPI62_1@toc@l(3) 3748; PC64LE-NEXT: bl logf 3749; PC64LE-NEXT: nop 3750; PC64LE-NEXT: addis 3, 2, .LCPI62_2@toc@ha 3751; PC64LE-NEXT: fmr 30, 1 3752; PC64LE-NEXT: lfs 1, .LCPI62_2@toc@l(3) 3753; PC64LE-NEXT: bl logf 3754; PC64LE-NEXT: nop 3755; PC64LE-NEXT: xscvdpspn 0, 30 3756; PC64LE-NEXT: addis 3, 2, .LCPI62_3@toc@ha 3757; PC64LE-NEXT: xscvdpspn 1, 1 3758; PC64LE-NEXT: addi 3, 3, .LCPI62_3@toc@l 3759; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 3760; PC64LE-NEXT: xscvdpspn 0, 31 3761; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 3762; PC64LE-NEXT: vmrghw 2, 2, 3 3763; PC64LE-NEXT: lvx 3, 0, 3 3764; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 3765; PC64LE-NEXT: vperm 2, 4, 2, 3 3766; PC64LE-NEXT: addi 1, 1, 48 3767; PC64LE-NEXT: ld 0, 16(1) 3768; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3769; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3770; PC64LE-NEXT: mtlr 0 3771; PC64LE-NEXT: blr 3772; 3773; PC64LE9-LABEL: constrained_vector_log_v3f32: 3774; PC64LE9: # %bb.0: # %entry 3775; PC64LE9-NEXT: mflr 0 3776; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3777; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3778; PC64LE9-NEXT: std 0, 16(1) 3779; PC64LE9-NEXT: stdu 1, -48(1) 3780; PC64LE9-NEXT: addis 3, 2, .LCPI62_0@toc@ha 3781; PC64LE9-NEXT: lfs 1, .LCPI62_0@toc@l(3) 3782; PC64LE9-NEXT: bl logf 3783; PC64LE9-NEXT: nop 3784; PC64LE9-NEXT: addis 3, 2, .LCPI62_1@toc@ha 3785; PC64LE9-NEXT: fmr 31, 1 3786; PC64LE9-NEXT: lfs 1, .LCPI62_1@toc@l(3) 3787; PC64LE9-NEXT: bl logf 3788; PC64LE9-NEXT: nop 3789; PC64LE9-NEXT: addis 3, 2, .LCPI62_2@toc@ha 3790; PC64LE9-NEXT: fmr 30, 1 3791; PC64LE9-NEXT: lfs 1, .LCPI62_2@toc@l(3) 3792; PC64LE9-NEXT: bl logf 3793; PC64LE9-NEXT: nop 3794; PC64LE9-NEXT: xscvdpspn 0, 1 3795; PC64LE9-NEXT: addis 3, 2, .LCPI62_3@toc@ha 3796; PC64LE9-NEXT: addi 3, 3, .LCPI62_3@toc@l 3797; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 3798; PC64LE9-NEXT: xscvdpspn 0, 30 3799; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 3800; PC64LE9-NEXT: xscvdpspn 0, 31 3801; PC64LE9-NEXT: vmrghw 2, 3, 2 3802; PC64LE9-NEXT: lxvx 35, 0, 3 3803; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 3804; PC64LE9-NEXT: vperm 2, 4, 2, 3 3805; PC64LE9-NEXT: addi 1, 1, 48 3806; PC64LE9-NEXT: ld 0, 16(1) 3807; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3808; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3809; PC64LE9-NEXT: mtlr 0 3810; PC64LE9-NEXT: blr 3811entry: 3812 %log = call <3 x float> @llvm.experimental.constrained.log.v3f32( 3813 <3 x float> <float 42.0, float 43.0, float 44.0>, 3814 metadata !"round.dynamic", 3815 metadata !"fpexcept.strict") #1 3816 ret <3 x float> %log 3817} 3818 3819define <3 x double> @constrained_vector_log_v3f64() #0 { 3820; PC64LE-LABEL: constrained_vector_log_v3f64: 3821; PC64LE: # %bb.0: # %entry 3822; PC64LE-NEXT: mflr 0 3823; PC64LE-NEXT: std 0, 16(1) 3824; PC64LE-NEXT: stdu 1, -80(1) 3825; PC64LE-NEXT: li 3, 64 3826; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3827; PC64LE-NEXT: addis 3, 2, .LCPI63_0@toc@ha 3828; PC64LE-NEXT: lfd 1, .LCPI63_0@toc@l(3) 3829; PC64LE-NEXT: bl log 3830; PC64LE-NEXT: nop 3831; PC64LE-NEXT: li 3, 48 3832; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3833; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3834; PC64LE-NEXT: addis 3, 2, .LCPI63_1@toc@ha 3835; PC64LE-NEXT: lfs 1, .LCPI63_1@toc@l(3) 3836; PC64LE-NEXT: bl log 3837; PC64LE-NEXT: nop 3838; PC64LE-NEXT: li 3, 48 3839; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3840; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3841; PC64LE-NEXT: addis 3, 2, .LCPI63_2@toc@ha 3842; PC64LE-NEXT: xxmrghd 63, 0, 1 3843; PC64LE-NEXT: lfd 1, .LCPI63_2@toc@l(3) 3844; PC64LE-NEXT: bl log 3845; PC64LE-NEXT: nop 3846; PC64LE-NEXT: xxswapd 0, 63 3847; PC64LE-NEXT: li 3, 64 3848; PC64LE-NEXT: xxlor 2, 63, 63 3849; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3850; PC64LE-NEXT: fmr 3, 1 3851; PC64LE-NEXT: fmr 1, 0 3852; PC64LE-NEXT: addi 1, 1, 80 3853; PC64LE-NEXT: ld 0, 16(1) 3854; PC64LE-NEXT: mtlr 0 3855; PC64LE-NEXT: blr 3856; 3857; PC64LE9-LABEL: constrained_vector_log_v3f64: 3858; PC64LE9: # %bb.0: # %entry 3859; PC64LE9-NEXT: mflr 0 3860; PC64LE9-NEXT: std 0, 16(1) 3861; PC64LE9-NEXT: stdu 1, -64(1) 3862; PC64LE9-NEXT: addis 3, 2, .LCPI63_0@toc@ha 3863; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3864; PC64LE9-NEXT: lfd 1, .LCPI63_0@toc@l(3) 3865; PC64LE9-NEXT: bl log 3866; PC64LE9-NEXT: nop 3867; PC64LE9-NEXT: addis 3, 2, .LCPI63_1@toc@ha 3868; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3869; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3870; PC64LE9-NEXT: lfs 1, .LCPI63_1@toc@l(3) 3871; PC64LE9-NEXT: bl log 3872; PC64LE9-NEXT: nop 3873; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3874; PC64LE9-NEXT: addis 3, 2, .LCPI63_2@toc@ha 3875; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3876; PC64LE9-NEXT: xxmrghd 63, 0, 1 3877; PC64LE9-NEXT: lfd 1, .LCPI63_2@toc@l(3) 3878; PC64LE9-NEXT: bl log 3879; PC64LE9-NEXT: nop 3880; PC64LE9-NEXT: fmr 3, 1 3881; PC64LE9-NEXT: xxswapd 1, 63 3882; PC64LE9-NEXT: xscpsgndp 2, 63, 63 3883; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3884; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3885; PC64LE9-NEXT: addi 1, 1, 64 3886; PC64LE9-NEXT: ld 0, 16(1) 3887; PC64LE9-NEXT: mtlr 0 3888; PC64LE9-NEXT: blr 3889entry: 3890 %log = call <3 x double> @llvm.experimental.constrained.log.v3f64( 3891 <3 x double> <double 42.0, double 42.1, double 42.2>, 3892 metadata !"round.dynamic", 3893 metadata !"fpexcept.strict") #1 3894 ret <3 x double> %log 3895} 3896 3897define <4 x double> @constrained_vector_log_v4f64() #0 { 3898; PC64LE-LABEL: constrained_vector_log_v4f64: 3899; PC64LE: # %bb.0: # %entry 3900; PC64LE-NEXT: mflr 0 3901; PC64LE-NEXT: std 0, 16(1) 3902; PC64LE-NEXT: stdu 1, -80(1) 3903; PC64LE-NEXT: li 3, 64 3904; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3905; PC64LE-NEXT: addis 3, 2, .LCPI64_0@toc@ha 3906; PC64LE-NEXT: lfd 1, .LCPI64_0@toc@l(3) 3907; PC64LE-NEXT: bl log 3908; PC64LE-NEXT: nop 3909; PC64LE-NEXT: li 3, 48 3910; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3911; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3912; PC64LE-NEXT: addis 3, 2, .LCPI64_1@toc@ha 3913; PC64LE-NEXT: lfd 1, .LCPI64_1@toc@l(3) 3914; PC64LE-NEXT: bl log 3915; PC64LE-NEXT: nop 3916; PC64LE-NEXT: li 3, 48 3917; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3918; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3919; PC64LE-NEXT: addis 3, 2, .LCPI64_2@toc@ha 3920; PC64LE-NEXT: xxmrghd 63, 1, 0 3921; PC64LE-NEXT: lfd 1, .LCPI64_2@toc@l(3) 3922; PC64LE-NEXT: bl log 3923; PC64LE-NEXT: nop 3924; PC64LE-NEXT: li 3, 48 3925; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3926; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3927; PC64LE-NEXT: addis 3, 2, .LCPI64_3@toc@ha 3928; PC64LE-NEXT: lfs 1, .LCPI64_3@toc@l(3) 3929; PC64LE-NEXT: bl log 3930; PC64LE-NEXT: nop 3931; PC64LE-NEXT: li 3, 48 3932; PC64LE-NEXT: vmr 3, 31 3933; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3934; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3935; PC64LE-NEXT: li 3, 64 3936; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3937; PC64LE-NEXT: xxmrghd 34, 0, 1 3938; PC64LE-NEXT: addi 1, 1, 80 3939; PC64LE-NEXT: ld 0, 16(1) 3940; PC64LE-NEXT: mtlr 0 3941; PC64LE-NEXT: blr 3942; 3943; PC64LE9-LABEL: constrained_vector_log_v4f64: 3944; PC64LE9: # %bb.0: # %entry 3945; PC64LE9-NEXT: mflr 0 3946; PC64LE9-NEXT: std 0, 16(1) 3947; PC64LE9-NEXT: stdu 1, -64(1) 3948; PC64LE9-NEXT: addis 3, 2, .LCPI64_0@toc@ha 3949; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3950; PC64LE9-NEXT: lfd 1, .LCPI64_0@toc@l(3) 3951; PC64LE9-NEXT: bl log 3952; PC64LE9-NEXT: nop 3953; PC64LE9-NEXT: addis 3, 2, .LCPI64_1@toc@ha 3954; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3955; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3956; PC64LE9-NEXT: lfd 1, .LCPI64_1@toc@l(3) 3957; PC64LE9-NEXT: bl log 3958; PC64LE9-NEXT: nop 3959; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3960; PC64LE9-NEXT: addis 3, 2, .LCPI64_2@toc@ha 3961; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3962; PC64LE9-NEXT: xxmrghd 63, 1, 0 3963; PC64LE9-NEXT: lfd 1, .LCPI64_2@toc@l(3) 3964; PC64LE9-NEXT: bl log 3965; PC64LE9-NEXT: nop 3966; PC64LE9-NEXT: addis 3, 2, .LCPI64_3@toc@ha 3967; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3968; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3969; PC64LE9-NEXT: lfs 1, .LCPI64_3@toc@l(3) 3970; PC64LE9-NEXT: bl log 3971; PC64LE9-NEXT: nop 3972; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3973; PC64LE9-NEXT: vmr 3, 31 3974; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3975; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3976; PC64LE9-NEXT: xxmrghd 34, 0, 1 3977; PC64LE9-NEXT: addi 1, 1, 64 3978; PC64LE9-NEXT: ld 0, 16(1) 3979; PC64LE9-NEXT: mtlr 0 3980; PC64LE9-NEXT: blr 3981entry: 3982 %log = call <4 x double> @llvm.experimental.constrained.log.v4f64( 3983 <4 x double> <double 42.0, double 42.1, 3984 double 42.2, double 42.3>, 3985 metadata !"round.dynamic", 3986 metadata !"fpexcept.strict") #1 3987 ret <4 x double> %log 3988} 3989 3990define <1 x float> @constrained_vector_log10_v1f32() #0 { 3991; PC64LE-LABEL: constrained_vector_log10_v1f32: 3992; PC64LE: # %bb.0: # %entry 3993; PC64LE-NEXT: mflr 0 3994; PC64LE-NEXT: std 0, 16(1) 3995; PC64LE-NEXT: stdu 1, -32(1) 3996; PC64LE-NEXT: addis 3, 2, .LCPI65_0@toc@ha 3997; PC64LE-NEXT: lfs 1, .LCPI65_0@toc@l(3) 3998; PC64LE-NEXT: bl log10f 3999; PC64LE-NEXT: nop 4000; PC64LE-NEXT: addi 1, 1, 32 4001; PC64LE-NEXT: ld 0, 16(1) 4002; PC64LE-NEXT: mtlr 0 4003; PC64LE-NEXT: blr 4004; 4005; PC64LE9-LABEL: constrained_vector_log10_v1f32: 4006; PC64LE9: # %bb.0: # %entry 4007; PC64LE9-NEXT: mflr 0 4008; PC64LE9-NEXT: std 0, 16(1) 4009; PC64LE9-NEXT: stdu 1, -32(1) 4010; PC64LE9-NEXT: addis 3, 2, .LCPI65_0@toc@ha 4011; PC64LE9-NEXT: lfs 1, .LCPI65_0@toc@l(3) 4012; PC64LE9-NEXT: bl log10f 4013; PC64LE9-NEXT: nop 4014; PC64LE9-NEXT: addi 1, 1, 32 4015; PC64LE9-NEXT: ld 0, 16(1) 4016; PC64LE9-NEXT: mtlr 0 4017; PC64LE9-NEXT: blr 4018entry: 4019 %log10 = call <1 x float> @llvm.experimental.constrained.log10.v1f32( 4020 <1 x float> <float 42.0>, 4021 metadata !"round.dynamic", 4022 metadata !"fpexcept.strict") #1 4023 ret <1 x float> %log10 4024} 4025 4026define <2 x double> @constrained_vector_log10_v2f64() #0 { 4027; PC64LE-LABEL: constrained_vector_log10_v2f64: 4028; PC64LE: # %bb.0: # %entry 4029; PC64LE-NEXT: mflr 0 4030; PC64LE-NEXT: std 0, 16(1) 4031; PC64LE-NEXT: stdu 1, -64(1) 4032; PC64LE-NEXT: addis 3, 2, .LCPI66_0@toc@ha 4033; PC64LE-NEXT: lfd 1, .LCPI66_0@toc@l(3) 4034; PC64LE-NEXT: bl log10 4035; PC64LE-NEXT: nop 4036; PC64LE-NEXT: li 3, 48 4037; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4038; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 4039; PC64LE-NEXT: addis 3, 2, .LCPI66_1@toc@ha 4040; PC64LE-NEXT: lfs 1, .LCPI66_1@toc@l(3) 4041; PC64LE-NEXT: bl log10 4042; PC64LE-NEXT: nop 4043; PC64LE-NEXT: li 3, 48 4044; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4045; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 4046; PC64LE-NEXT: xxmrghd 34, 0, 1 4047; PC64LE-NEXT: addi 1, 1, 64 4048; PC64LE-NEXT: ld 0, 16(1) 4049; PC64LE-NEXT: mtlr 0 4050; PC64LE-NEXT: blr 4051; 4052; PC64LE9-LABEL: constrained_vector_log10_v2f64: 4053; PC64LE9: # %bb.0: # %entry 4054; PC64LE9-NEXT: mflr 0 4055; PC64LE9-NEXT: std 0, 16(1) 4056; PC64LE9-NEXT: stdu 1, -48(1) 4057; PC64LE9-NEXT: addis 3, 2, .LCPI66_0@toc@ha 4058; PC64LE9-NEXT: lfd 1, .LCPI66_0@toc@l(3) 4059; PC64LE9-NEXT: bl log10 4060; PC64LE9-NEXT: nop 4061; PC64LE9-NEXT: addis 3, 2, .LCPI66_1@toc@ha 4062; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4063; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 4064; PC64LE9-NEXT: lfs 1, .LCPI66_1@toc@l(3) 4065; PC64LE9-NEXT: bl log10 4066; PC64LE9-NEXT: nop 4067; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 4068; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4069; PC64LE9-NEXT: xxmrghd 34, 0, 1 4070; PC64LE9-NEXT: addi 1, 1, 48 4071; PC64LE9-NEXT: ld 0, 16(1) 4072; PC64LE9-NEXT: mtlr 0 4073; PC64LE9-NEXT: blr 4074entry: 4075 %log10 = call <2 x double> @llvm.experimental.constrained.log10.v2f64( 4076 <2 x double> <double 42.0, double 42.1>, 4077 metadata !"round.dynamic", 4078 metadata !"fpexcept.strict") #1 4079 ret <2 x double> %log10 4080} 4081 4082define <3 x float> @constrained_vector_log10_v3f32() #0 { 4083; PC64LE-LABEL: constrained_vector_log10_v3f32: 4084; PC64LE: # %bb.0: # %entry 4085; PC64LE-NEXT: mflr 0 4086; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 4087; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 4088; PC64LE-NEXT: std 0, 16(1) 4089; PC64LE-NEXT: stdu 1, -48(1) 4090; PC64LE-NEXT: addis 3, 2, .LCPI67_0@toc@ha 4091; PC64LE-NEXT: lfs 1, .LCPI67_0@toc@l(3) 4092; PC64LE-NEXT: bl log10f 4093; PC64LE-NEXT: nop 4094; PC64LE-NEXT: addis 3, 2, .LCPI67_1@toc@ha 4095; PC64LE-NEXT: fmr 31, 1 4096; PC64LE-NEXT: lfs 1, .LCPI67_1@toc@l(3) 4097; PC64LE-NEXT: bl log10f 4098; PC64LE-NEXT: nop 4099; PC64LE-NEXT: addis 3, 2, .LCPI67_2@toc@ha 4100; PC64LE-NEXT: fmr 30, 1 4101; PC64LE-NEXT: lfs 1, .LCPI67_2@toc@l(3) 4102; PC64LE-NEXT: bl log10f 4103; PC64LE-NEXT: nop 4104; PC64LE-NEXT: xscvdpspn 0, 30 4105; PC64LE-NEXT: addis 3, 2, .LCPI67_3@toc@ha 4106; PC64LE-NEXT: xscvdpspn 1, 1 4107; PC64LE-NEXT: addi 3, 3, .LCPI67_3@toc@l 4108; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 4109; PC64LE-NEXT: xscvdpspn 0, 31 4110; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 4111; PC64LE-NEXT: vmrghw 2, 2, 3 4112; PC64LE-NEXT: lvx 3, 0, 3 4113; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 4114; PC64LE-NEXT: vperm 2, 4, 2, 3 4115; PC64LE-NEXT: addi 1, 1, 48 4116; PC64LE-NEXT: ld 0, 16(1) 4117; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 4118; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 4119; PC64LE-NEXT: mtlr 0 4120; PC64LE-NEXT: blr 4121; 4122; PC64LE9-LABEL: constrained_vector_log10_v3f32: 4123; PC64LE9: # %bb.0: # %entry 4124; PC64LE9-NEXT: mflr 0 4125; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 4126; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 4127; PC64LE9-NEXT: std 0, 16(1) 4128; PC64LE9-NEXT: stdu 1, -48(1) 4129; PC64LE9-NEXT: addis 3, 2, .LCPI67_0@toc@ha 4130; PC64LE9-NEXT: lfs 1, .LCPI67_0@toc@l(3) 4131; PC64LE9-NEXT: bl log10f 4132; PC64LE9-NEXT: nop 4133; PC64LE9-NEXT: addis 3, 2, .LCPI67_1@toc@ha 4134; PC64LE9-NEXT: fmr 31, 1 4135; PC64LE9-NEXT: lfs 1, .LCPI67_1@toc@l(3) 4136; PC64LE9-NEXT: bl log10f 4137; PC64LE9-NEXT: nop 4138; PC64LE9-NEXT: addis 3, 2, .LCPI67_2@toc@ha 4139; PC64LE9-NEXT: fmr 30, 1 4140; PC64LE9-NEXT: lfs 1, .LCPI67_2@toc@l(3) 4141; PC64LE9-NEXT: bl log10f 4142; PC64LE9-NEXT: nop 4143; PC64LE9-NEXT: xscvdpspn 0, 1 4144; PC64LE9-NEXT: addis 3, 2, .LCPI67_3@toc@ha 4145; PC64LE9-NEXT: addi 3, 3, .LCPI67_3@toc@l 4146; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 4147; PC64LE9-NEXT: xscvdpspn 0, 30 4148; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 4149; PC64LE9-NEXT: xscvdpspn 0, 31 4150; PC64LE9-NEXT: vmrghw 2, 3, 2 4151; PC64LE9-NEXT: lxvx 35, 0, 3 4152; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 4153; PC64LE9-NEXT: vperm 2, 4, 2, 3 4154; PC64LE9-NEXT: addi 1, 1, 48 4155; PC64LE9-NEXT: ld 0, 16(1) 4156; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 4157; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 4158; PC64LE9-NEXT: mtlr 0 4159; PC64LE9-NEXT: blr 4160entry: 4161 %log10 = call <3 x float> @llvm.experimental.constrained.log10.v3f32( 4162 <3 x float> <float 42.0, float 43.0, float 44.0>, 4163 metadata !"round.dynamic", 4164 metadata !"fpexcept.strict") #1 4165 ret <3 x float> %log10 4166} 4167 4168define <3 x double> @constrained_vector_log10_v3f64() #0 { 4169; PC64LE-LABEL: constrained_vector_log10_v3f64: 4170; PC64LE: # %bb.0: # %entry 4171; PC64LE-NEXT: mflr 0 4172; PC64LE-NEXT: std 0, 16(1) 4173; PC64LE-NEXT: stdu 1, -80(1) 4174; PC64LE-NEXT: li 3, 64 4175; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4176; PC64LE-NEXT: addis 3, 2, .LCPI68_0@toc@ha 4177; PC64LE-NEXT: lfd 1, .LCPI68_0@toc@l(3) 4178; PC64LE-NEXT: bl log10 4179; PC64LE-NEXT: nop 4180; PC64LE-NEXT: li 3, 48 4181; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4182; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 4183; PC64LE-NEXT: addis 3, 2, .LCPI68_1@toc@ha 4184; PC64LE-NEXT: lfs 1, .LCPI68_1@toc@l(3) 4185; PC64LE-NEXT: bl log10 4186; PC64LE-NEXT: nop 4187; PC64LE-NEXT: li 3, 48 4188; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4189; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 4190; PC64LE-NEXT: addis 3, 2, .LCPI68_2@toc@ha 4191; PC64LE-NEXT: xxmrghd 63, 0, 1 4192; PC64LE-NEXT: lfd 1, .LCPI68_2@toc@l(3) 4193; PC64LE-NEXT: bl log10 4194; PC64LE-NEXT: nop 4195; PC64LE-NEXT: xxswapd 0, 63 4196; PC64LE-NEXT: li 3, 64 4197; PC64LE-NEXT: xxlor 2, 63, 63 4198; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4199; PC64LE-NEXT: fmr 3, 1 4200; PC64LE-NEXT: fmr 1, 0 4201; PC64LE-NEXT: addi 1, 1, 80 4202; PC64LE-NEXT: ld 0, 16(1) 4203; PC64LE-NEXT: mtlr 0 4204; PC64LE-NEXT: blr 4205; 4206; PC64LE9-LABEL: constrained_vector_log10_v3f64: 4207; PC64LE9: # %bb.0: # %entry 4208; PC64LE9-NEXT: mflr 0 4209; PC64LE9-NEXT: std 0, 16(1) 4210; PC64LE9-NEXT: stdu 1, -64(1) 4211; PC64LE9-NEXT: addis 3, 2, .LCPI68_0@toc@ha 4212; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 4213; PC64LE9-NEXT: lfd 1, .LCPI68_0@toc@l(3) 4214; PC64LE9-NEXT: bl log10 4215; PC64LE9-NEXT: nop 4216; PC64LE9-NEXT: addis 3, 2, .LCPI68_1@toc@ha 4217; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4218; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 4219; PC64LE9-NEXT: lfs 1, .LCPI68_1@toc@l(3) 4220; PC64LE9-NEXT: bl log10 4221; PC64LE9-NEXT: nop 4222; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 4223; PC64LE9-NEXT: addis 3, 2, .LCPI68_2@toc@ha 4224; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4225; PC64LE9-NEXT: xxmrghd 63, 0, 1 4226; PC64LE9-NEXT: lfd 1, .LCPI68_2@toc@l(3) 4227; PC64LE9-NEXT: bl log10 4228; PC64LE9-NEXT: nop 4229; PC64LE9-NEXT: fmr 3, 1 4230; PC64LE9-NEXT: xxswapd 1, 63 4231; PC64LE9-NEXT: xscpsgndp 2, 63, 63 4232; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 4233; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4234; PC64LE9-NEXT: addi 1, 1, 64 4235; PC64LE9-NEXT: ld 0, 16(1) 4236; PC64LE9-NEXT: mtlr 0 4237; PC64LE9-NEXT: blr 4238entry: 4239 %log10 = call <3 x double> @llvm.experimental.constrained.log10.v3f64( 4240 <3 x double> <double 42.0, double 42.1, double 42.2>, 4241 metadata !"round.dynamic", 4242 metadata !"fpexcept.strict") #1 4243 ret <3 x double> %log10 4244} 4245 4246define <4 x double> @constrained_vector_log10_v4f64() #0 { 4247; PC64LE-LABEL: constrained_vector_log10_v4f64: 4248; PC64LE: # %bb.0: # %entry 4249; PC64LE-NEXT: mflr 0 4250; PC64LE-NEXT: std 0, 16(1) 4251; PC64LE-NEXT: stdu 1, -80(1) 4252; PC64LE-NEXT: li 3, 64 4253; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4254; PC64LE-NEXT: addis 3, 2, .LCPI69_0@toc@ha 4255; PC64LE-NEXT: lfd 1, .LCPI69_0@toc@l(3) 4256; PC64LE-NEXT: bl log10 4257; PC64LE-NEXT: nop 4258; PC64LE-NEXT: li 3, 48 4259; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4260; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 4261; PC64LE-NEXT: addis 3, 2, .LCPI69_1@toc@ha 4262; PC64LE-NEXT: lfd 1, .LCPI69_1@toc@l(3) 4263; PC64LE-NEXT: bl log10 4264; PC64LE-NEXT: nop 4265; PC64LE-NEXT: li 3, 48 4266; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4267; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 4268; PC64LE-NEXT: addis 3, 2, .LCPI69_2@toc@ha 4269; PC64LE-NEXT: xxmrghd 63, 1, 0 4270; PC64LE-NEXT: lfd 1, .LCPI69_2@toc@l(3) 4271; PC64LE-NEXT: bl log10 4272; PC64LE-NEXT: nop 4273; PC64LE-NEXT: li 3, 48 4274; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4275; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 4276; PC64LE-NEXT: addis 3, 2, .LCPI69_3@toc@ha 4277; PC64LE-NEXT: lfs 1, .LCPI69_3@toc@l(3) 4278; PC64LE-NEXT: bl log10 4279; PC64LE-NEXT: nop 4280; PC64LE-NEXT: li 3, 48 4281; PC64LE-NEXT: vmr 3, 31 4282; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4283; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 4284; PC64LE-NEXT: li 3, 64 4285; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4286; PC64LE-NEXT: xxmrghd 34, 0, 1 4287; PC64LE-NEXT: addi 1, 1, 80 4288; PC64LE-NEXT: ld 0, 16(1) 4289; PC64LE-NEXT: mtlr 0 4290; PC64LE-NEXT: blr 4291; 4292; PC64LE9-LABEL: constrained_vector_log10_v4f64: 4293; PC64LE9: # %bb.0: # %entry 4294; PC64LE9-NEXT: mflr 0 4295; PC64LE9-NEXT: std 0, 16(1) 4296; PC64LE9-NEXT: stdu 1, -64(1) 4297; PC64LE9-NEXT: addis 3, 2, .LCPI69_0@toc@ha 4298; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 4299; PC64LE9-NEXT: lfd 1, .LCPI69_0@toc@l(3) 4300; PC64LE9-NEXT: bl log10 4301; PC64LE9-NEXT: nop 4302; PC64LE9-NEXT: addis 3, 2, .LCPI69_1@toc@ha 4303; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4304; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 4305; PC64LE9-NEXT: lfd 1, .LCPI69_1@toc@l(3) 4306; PC64LE9-NEXT: bl log10 4307; PC64LE9-NEXT: nop 4308; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 4309; PC64LE9-NEXT: addis 3, 2, .LCPI69_2@toc@ha 4310; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4311; PC64LE9-NEXT: xxmrghd 63, 1, 0 4312; PC64LE9-NEXT: lfd 1, .LCPI69_2@toc@l(3) 4313; PC64LE9-NEXT: bl log10 4314; PC64LE9-NEXT: nop 4315; PC64LE9-NEXT: addis 3, 2, .LCPI69_3@toc@ha 4316; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4317; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 4318; PC64LE9-NEXT: lfs 1, .LCPI69_3@toc@l(3) 4319; PC64LE9-NEXT: bl log10 4320; PC64LE9-NEXT: nop 4321; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 4322; PC64LE9-NEXT: vmr 3, 31 4323; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 4324; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4325; PC64LE9-NEXT: xxmrghd 34, 0, 1 4326; PC64LE9-NEXT: addi 1, 1, 64 4327; PC64LE9-NEXT: ld 0, 16(1) 4328; PC64LE9-NEXT: mtlr 0 4329; PC64LE9-NEXT: blr 4330entry: 4331 %log10 = call <4 x double> @llvm.experimental.constrained.log10.v4f64( 4332 <4 x double> <double 42.0, double 42.1, 4333 double 42.2, double 42.3>, 4334 metadata !"round.dynamic", 4335 metadata !"fpexcept.strict") #1 4336 ret <4 x double> %log10 4337} 4338 4339define <1 x float> @constrained_vector_log2_v1f32() #0 { 4340; PC64LE-LABEL: constrained_vector_log2_v1f32: 4341; PC64LE: # %bb.0: # %entry 4342; PC64LE-NEXT: mflr 0 4343; PC64LE-NEXT: std 0, 16(1) 4344; PC64LE-NEXT: stdu 1, -32(1) 4345; PC64LE-NEXT: addis 3, 2, .LCPI70_0@toc@ha 4346; PC64LE-NEXT: lfs 1, .LCPI70_0@toc@l(3) 4347; PC64LE-NEXT: bl log2f 4348; PC64LE-NEXT: nop 4349; PC64LE-NEXT: addi 1, 1, 32 4350; PC64LE-NEXT: ld 0, 16(1) 4351; PC64LE-NEXT: mtlr 0 4352; PC64LE-NEXT: blr 4353; 4354; PC64LE9-LABEL: constrained_vector_log2_v1f32: 4355; PC64LE9: # %bb.0: # %entry 4356; PC64LE9-NEXT: mflr 0 4357; PC64LE9-NEXT: std 0, 16(1) 4358; PC64LE9-NEXT: stdu 1, -32(1) 4359; PC64LE9-NEXT: addis 3, 2, .LCPI70_0@toc@ha 4360; PC64LE9-NEXT: lfs 1, .LCPI70_0@toc@l(3) 4361; PC64LE9-NEXT: bl log2f 4362; PC64LE9-NEXT: nop 4363; PC64LE9-NEXT: addi 1, 1, 32 4364; PC64LE9-NEXT: ld 0, 16(1) 4365; PC64LE9-NEXT: mtlr 0 4366; PC64LE9-NEXT: blr 4367entry: 4368 %log2 = call <1 x float> @llvm.experimental.constrained.log2.v1f32( 4369 <1 x float> <float 42.0>, 4370 metadata !"round.dynamic", 4371 metadata !"fpexcept.strict") #1 4372 ret <1 x float> %log2 4373} 4374 4375define <2 x double> @constrained_vector_log2_v2f64() #0 { 4376; PC64LE-LABEL: constrained_vector_log2_v2f64: 4377; PC64LE: # %bb.0: # %entry 4378; PC64LE-NEXT: mflr 0 4379; PC64LE-NEXT: std 0, 16(1) 4380; PC64LE-NEXT: stdu 1, -64(1) 4381; PC64LE-NEXT: addis 3, 2, .LCPI71_0@toc@ha 4382; PC64LE-NEXT: lfd 1, .LCPI71_0@toc@l(3) 4383; PC64LE-NEXT: bl log2 4384; PC64LE-NEXT: nop 4385; PC64LE-NEXT: li 3, 48 4386; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4387; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 4388; PC64LE-NEXT: addis 3, 2, .LCPI71_1@toc@ha 4389; PC64LE-NEXT: lfs 1, .LCPI71_1@toc@l(3) 4390; PC64LE-NEXT: bl log2 4391; PC64LE-NEXT: nop 4392; PC64LE-NEXT: li 3, 48 4393; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4394; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 4395; PC64LE-NEXT: xxmrghd 34, 0, 1 4396; PC64LE-NEXT: addi 1, 1, 64 4397; PC64LE-NEXT: ld 0, 16(1) 4398; PC64LE-NEXT: mtlr 0 4399; PC64LE-NEXT: blr 4400; 4401; PC64LE9-LABEL: constrained_vector_log2_v2f64: 4402; PC64LE9: # %bb.0: # %entry 4403; PC64LE9-NEXT: mflr 0 4404; PC64LE9-NEXT: std 0, 16(1) 4405; PC64LE9-NEXT: stdu 1, -48(1) 4406; PC64LE9-NEXT: addis 3, 2, .LCPI71_0@toc@ha 4407; PC64LE9-NEXT: lfd 1, .LCPI71_0@toc@l(3) 4408; PC64LE9-NEXT: bl log2 4409; PC64LE9-NEXT: nop 4410; PC64LE9-NEXT: addis 3, 2, .LCPI71_1@toc@ha 4411; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4412; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 4413; PC64LE9-NEXT: lfs 1, .LCPI71_1@toc@l(3) 4414; PC64LE9-NEXT: bl log2 4415; PC64LE9-NEXT: nop 4416; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 4417; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4418; PC64LE9-NEXT: xxmrghd 34, 0, 1 4419; PC64LE9-NEXT: addi 1, 1, 48 4420; PC64LE9-NEXT: ld 0, 16(1) 4421; PC64LE9-NEXT: mtlr 0 4422; PC64LE9-NEXT: blr 4423entry: 4424 %log2 = call <2 x double> @llvm.experimental.constrained.log2.v2f64( 4425 <2 x double> <double 42.0, double 42.1>, 4426 metadata !"round.dynamic", 4427 metadata !"fpexcept.strict") #1 4428 ret <2 x double> %log2 4429} 4430 4431define <3 x float> @constrained_vector_log2_v3f32() #0 { 4432; PC64LE-LABEL: constrained_vector_log2_v3f32: 4433; PC64LE: # %bb.0: # %entry 4434; PC64LE-NEXT: mflr 0 4435; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 4436; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 4437; PC64LE-NEXT: std 0, 16(1) 4438; PC64LE-NEXT: stdu 1, -48(1) 4439; PC64LE-NEXT: addis 3, 2, .LCPI72_0@toc@ha 4440; PC64LE-NEXT: lfs 1, .LCPI72_0@toc@l(3) 4441; PC64LE-NEXT: bl log2f 4442; PC64LE-NEXT: nop 4443; PC64LE-NEXT: addis 3, 2, .LCPI72_1@toc@ha 4444; PC64LE-NEXT: fmr 31, 1 4445; PC64LE-NEXT: lfs 1, .LCPI72_1@toc@l(3) 4446; PC64LE-NEXT: bl log2f 4447; PC64LE-NEXT: nop 4448; PC64LE-NEXT: addis 3, 2, .LCPI72_2@toc@ha 4449; PC64LE-NEXT: fmr 30, 1 4450; PC64LE-NEXT: lfs 1, .LCPI72_2@toc@l(3) 4451; PC64LE-NEXT: bl log2f 4452; PC64LE-NEXT: nop 4453; PC64LE-NEXT: xscvdpspn 0, 30 4454; PC64LE-NEXT: addis 3, 2, .LCPI72_3@toc@ha 4455; PC64LE-NEXT: xscvdpspn 1, 1 4456; PC64LE-NEXT: addi 3, 3, .LCPI72_3@toc@l 4457; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 4458; PC64LE-NEXT: xscvdpspn 0, 31 4459; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 4460; PC64LE-NEXT: vmrghw 2, 2, 3 4461; PC64LE-NEXT: lvx 3, 0, 3 4462; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 4463; PC64LE-NEXT: vperm 2, 4, 2, 3 4464; PC64LE-NEXT: addi 1, 1, 48 4465; PC64LE-NEXT: ld 0, 16(1) 4466; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 4467; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 4468; PC64LE-NEXT: mtlr 0 4469; PC64LE-NEXT: blr 4470; 4471; PC64LE9-LABEL: constrained_vector_log2_v3f32: 4472; PC64LE9: # %bb.0: # %entry 4473; PC64LE9-NEXT: mflr 0 4474; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 4475; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 4476; PC64LE9-NEXT: std 0, 16(1) 4477; PC64LE9-NEXT: stdu 1, -48(1) 4478; PC64LE9-NEXT: addis 3, 2, .LCPI72_0@toc@ha 4479; PC64LE9-NEXT: lfs 1, .LCPI72_0@toc@l(3) 4480; PC64LE9-NEXT: bl log2f 4481; PC64LE9-NEXT: nop 4482; PC64LE9-NEXT: addis 3, 2, .LCPI72_1@toc@ha 4483; PC64LE9-NEXT: fmr 31, 1 4484; PC64LE9-NEXT: lfs 1, .LCPI72_1@toc@l(3) 4485; PC64LE9-NEXT: bl log2f 4486; PC64LE9-NEXT: nop 4487; PC64LE9-NEXT: addis 3, 2, .LCPI72_2@toc@ha 4488; PC64LE9-NEXT: fmr 30, 1 4489; PC64LE9-NEXT: lfs 1, .LCPI72_2@toc@l(3) 4490; PC64LE9-NEXT: bl log2f 4491; PC64LE9-NEXT: nop 4492; PC64LE9-NEXT: xscvdpspn 0, 1 4493; PC64LE9-NEXT: addis 3, 2, .LCPI72_3@toc@ha 4494; PC64LE9-NEXT: addi 3, 3, .LCPI72_3@toc@l 4495; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 4496; PC64LE9-NEXT: xscvdpspn 0, 30 4497; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 4498; PC64LE9-NEXT: xscvdpspn 0, 31 4499; PC64LE9-NEXT: vmrghw 2, 3, 2 4500; PC64LE9-NEXT: lxvx 35, 0, 3 4501; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 4502; PC64LE9-NEXT: vperm 2, 4, 2, 3 4503; PC64LE9-NEXT: addi 1, 1, 48 4504; PC64LE9-NEXT: ld 0, 16(1) 4505; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 4506; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 4507; PC64LE9-NEXT: mtlr 0 4508; PC64LE9-NEXT: blr 4509entry: 4510 %log2 = call <3 x float> @llvm.experimental.constrained.log2.v3f32( 4511 <3 x float> <float 42.0, float 43.0, float 44.0>, 4512 metadata !"round.dynamic", 4513 metadata !"fpexcept.strict") #1 4514 ret <3 x float> %log2 4515} 4516 4517define <3 x double> @constrained_vector_log2_v3f64() #0 { 4518; PC64LE-LABEL: constrained_vector_log2_v3f64: 4519; PC64LE: # %bb.0: # %entry 4520; PC64LE-NEXT: mflr 0 4521; PC64LE-NEXT: std 0, 16(1) 4522; PC64LE-NEXT: stdu 1, -80(1) 4523; PC64LE-NEXT: li 3, 64 4524; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4525; PC64LE-NEXT: addis 3, 2, .LCPI73_0@toc@ha 4526; PC64LE-NEXT: lfd 1, .LCPI73_0@toc@l(3) 4527; PC64LE-NEXT: bl log2 4528; PC64LE-NEXT: nop 4529; PC64LE-NEXT: li 3, 48 4530; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4531; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 4532; PC64LE-NEXT: addis 3, 2, .LCPI73_1@toc@ha 4533; PC64LE-NEXT: lfs 1, .LCPI73_1@toc@l(3) 4534; PC64LE-NEXT: bl log2 4535; PC64LE-NEXT: nop 4536; PC64LE-NEXT: li 3, 48 4537; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4538; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 4539; PC64LE-NEXT: addis 3, 2, .LCPI73_2@toc@ha 4540; PC64LE-NEXT: xxmrghd 63, 0, 1 4541; PC64LE-NEXT: lfd 1, .LCPI73_2@toc@l(3) 4542; PC64LE-NEXT: bl log2 4543; PC64LE-NEXT: nop 4544; PC64LE-NEXT: xxswapd 0, 63 4545; PC64LE-NEXT: li 3, 64 4546; PC64LE-NEXT: xxlor 2, 63, 63 4547; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4548; PC64LE-NEXT: fmr 3, 1 4549; PC64LE-NEXT: fmr 1, 0 4550; PC64LE-NEXT: addi 1, 1, 80 4551; PC64LE-NEXT: ld 0, 16(1) 4552; PC64LE-NEXT: mtlr 0 4553; PC64LE-NEXT: blr 4554; 4555; PC64LE9-LABEL: constrained_vector_log2_v3f64: 4556; PC64LE9: # %bb.0: # %entry 4557; PC64LE9-NEXT: mflr 0 4558; PC64LE9-NEXT: std 0, 16(1) 4559; PC64LE9-NEXT: stdu 1, -64(1) 4560; PC64LE9-NEXT: addis 3, 2, .LCPI73_0@toc@ha 4561; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 4562; PC64LE9-NEXT: lfd 1, .LCPI73_0@toc@l(3) 4563; PC64LE9-NEXT: bl log2 4564; PC64LE9-NEXT: nop 4565; PC64LE9-NEXT: addis 3, 2, .LCPI73_1@toc@ha 4566; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4567; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 4568; PC64LE9-NEXT: lfs 1, .LCPI73_1@toc@l(3) 4569; PC64LE9-NEXT: bl log2 4570; PC64LE9-NEXT: nop 4571; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 4572; PC64LE9-NEXT: addis 3, 2, .LCPI73_2@toc@ha 4573; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4574; PC64LE9-NEXT: xxmrghd 63, 0, 1 4575; PC64LE9-NEXT: lfd 1, .LCPI73_2@toc@l(3) 4576; PC64LE9-NEXT: bl log2 4577; PC64LE9-NEXT: nop 4578; PC64LE9-NEXT: fmr 3, 1 4579; PC64LE9-NEXT: xxswapd 1, 63 4580; PC64LE9-NEXT: xscpsgndp 2, 63, 63 4581; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 4582; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4583; PC64LE9-NEXT: addi 1, 1, 64 4584; PC64LE9-NEXT: ld 0, 16(1) 4585; PC64LE9-NEXT: mtlr 0 4586; PC64LE9-NEXT: blr 4587entry: 4588 %log2 = call <3 x double> @llvm.experimental.constrained.log2.v3f64( 4589 <3 x double> <double 42.0, double 42.1, double 42.2>, 4590 metadata !"round.dynamic", 4591 metadata !"fpexcept.strict") #1 4592 ret <3 x double> %log2 4593} 4594 4595define <4 x double> @constrained_vector_log2_v4f64() #0 { 4596; PC64LE-LABEL: constrained_vector_log2_v4f64: 4597; PC64LE: # %bb.0: # %entry 4598; PC64LE-NEXT: mflr 0 4599; PC64LE-NEXT: std 0, 16(1) 4600; PC64LE-NEXT: stdu 1, -80(1) 4601; PC64LE-NEXT: li 3, 64 4602; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4603; PC64LE-NEXT: addis 3, 2, .LCPI74_0@toc@ha 4604; PC64LE-NEXT: lfd 1, .LCPI74_0@toc@l(3) 4605; PC64LE-NEXT: bl log2 4606; PC64LE-NEXT: nop 4607; PC64LE-NEXT: li 3, 48 4608; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4609; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 4610; PC64LE-NEXT: addis 3, 2, .LCPI74_1@toc@ha 4611; PC64LE-NEXT: lfd 1, .LCPI74_1@toc@l(3) 4612; PC64LE-NEXT: bl log2 4613; PC64LE-NEXT: nop 4614; PC64LE-NEXT: li 3, 48 4615; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4616; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 4617; PC64LE-NEXT: addis 3, 2, .LCPI74_2@toc@ha 4618; PC64LE-NEXT: xxmrghd 63, 1, 0 4619; PC64LE-NEXT: lfd 1, .LCPI74_2@toc@l(3) 4620; PC64LE-NEXT: bl log2 4621; PC64LE-NEXT: nop 4622; PC64LE-NEXT: li 3, 48 4623; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4624; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 4625; PC64LE-NEXT: addis 3, 2, .LCPI74_3@toc@ha 4626; PC64LE-NEXT: lfs 1, .LCPI74_3@toc@l(3) 4627; PC64LE-NEXT: bl log2 4628; PC64LE-NEXT: nop 4629; PC64LE-NEXT: li 3, 48 4630; PC64LE-NEXT: vmr 3, 31 4631; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4632; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 4633; PC64LE-NEXT: li 3, 64 4634; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4635; PC64LE-NEXT: xxmrghd 34, 0, 1 4636; PC64LE-NEXT: addi 1, 1, 80 4637; PC64LE-NEXT: ld 0, 16(1) 4638; PC64LE-NEXT: mtlr 0 4639; PC64LE-NEXT: blr 4640; 4641; PC64LE9-LABEL: constrained_vector_log2_v4f64: 4642; PC64LE9: # %bb.0: # %entry 4643; PC64LE9-NEXT: mflr 0 4644; PC64LE9-NEXT: std 0, 16(1) 4645; PC64LE9-NEXT: stdu 1, -64(1) 4646; PC64LE9-NEXT: addis 3, 2, .LCPI74_0@toc@ha 4647; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 4648; PC64LE9-NEXT: lfd 1, .LCPI74_0@toc@l(3) 4649; PC64LE9-NEXT: bl log2 4650; PC64LE9-NEXT: nop 4651; PC64LE9-NEXT: addis 3, 2, .LCPI74_1@toc@ha 4652; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4653; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 4654; PC64LE9-NEXT: lfd 1, .LCPI74_1@toc@l(3) 4655; PC64LE9-NEXT: bl log2 4656; PC64LE9-NEXT: nop 4657; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 4658; PC64LE9-NEXT: addis 3, 2, .LCPI74_2@toc@ha 4659; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4660; PC64LE9-NEXT: xxmrghd 63, 1, 0 4661; PC64LE9-NEXT: lfd 1, .LCPI74_2@toc@l(3) 4662; PC64LE9-NEXT: bl log2 4663; PC64LE9-NEXT: nop 4664; PC64LE9-NEXT: addis 3, 2, .LCPI74_3@toc@ha 4665; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4666; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 4667; PC64LE9-NEXT: lfs 1, .LCPI74_3@toc@l(3) 4668; PC64LE9-NEXT: bl log2 4669; PC64LE9-NEXT: nop 4670; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 4671; PC64LE9-NEXT: vmr 3, 31 4672; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 4673; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4674; PC64LE9-NEXT: xxmrghd 34, 0, 1 4675; PC64LE9-NEXT: addi 1, 1, 64 4676; PC64LE9-NEXT: ld 0, 16(1) 4677; PC64LE9-NEXT: mtlr 0 4678; PC64LE9-NEXT: blr 4679entry: 4680 %log2 = call <4 x double> @llvm.experimental.constrained.log2.v4f64( 4681 <4 x double> <double 42.0, double 42.1, 4682 double 42.2, double 42.3>, 4683 metadata !"round.dynamic", 4684 metadata !"fpexcept.strict") #1 4685 ret <4 x double> %log2 4686} 4687 4688define <1 x float> @constrained_vector_rint_v1f32() #0 { 4689; PC64LE-LABEL: constrained_vector_rint_v1f32: 4690; PC64LE: # %bb.0: # %entry 4691; PC64LE-NEXT: addis 3, 2, .LCPI75_0@toc@ha 4692; PC64LE-NEXT: lfs 0, .LCPI75_0@toc@l(3) 4693; PC64LE-NEXT: xsrdpic 1, 0 4694; PC64LE-NEXT: blr 4695; 4696; PC64LE9-LABEL: constrained_vector_rint_v1f32: 4697; PC64LE9: # %bb.0: # %entry 4698; PC64LE9-NEXT: addis 3, 2, .LCPI75_0@toc@ha 4699; PC64LE9-NEXT: lfs 0, .LCPI75_0@toc@l(3) 4700; PC64LE9-NEXT: xsrdpic 1, 0 4701; PC64LE9-NEXT: blr 4702entry: 4703 %rint = call <1 x float> @llvm.experimental.constrained.rint.v1f32( 4704 <1 x float> <float 42.0>, 4705 metadata !"round.dynamic", 4706 metadata !"fpexcept.strict") #1 4707 ret <1 x float> %rint 4708} 4709 4710define <2 x double> @constrained_vector_rint_v2f64() #0 { 4711; PC64LE-LABEL: constrained_vector_rint_v2f64: 4712; PC64LE: # %bb.0: # %entry 4713; PC64LE-NEXT: addis 3, 2, .LCPI76_0@toc@ha 4714; PC64LE-NEXT: addi 3, 3, .LCPI76_0@toc@l 4715; PC64LE-NEXT: lxvd2x 0, 0, 3 4716; PC64LE-NEXT: xxswapd 0, 0 4717; PC64LE-NEXT: xvrdpic 34, 0 4718; PC64LE-NEXT: blr 4719; 4720; PC64LE9-LABEL: constrained_vector_rint_v2f64: 4721; PC64LE9: # %bb.0: # %entry 4722; PC64LE9-NEXT: addis 3, 2, .LCPI76_0@toc@ha 4723; PC64LE9-NEXT: addi 3, 3, .LCPI76_0@toc@l 4724; PC64LE9-NEXT: lxvx 0, 0, 3 4725; PC64LE9-NEXT: xvrdpic 34, 0 4726; PC64LE9-NEXT: blr 4727entry: 4728 %rint = call <2 x double> @llvm.experimental.constrained.rint.v2f64( 4729 <2 x double> <double 42.1, double 42.0>, 4730 metadata !"round.dynamic", 4731 metadata !"fpexcept.strict") #1 4732 ret <2 x double> %rint 4733} 4734 4735define <3 x float> @constrained_vector_rint_v3f32() #0 { 4736; PC64LE-LABEL: constrained_vector_rint_v3f32: 4737; PC64LE: # %bb.0: # %entry 4738; PC64LE-NEXT: addis 3, 2, .LCPI77_2@toc@ha 4739; PC64LE-NEXT: addis 4, 2, .LCPI77_1@toc@ha 4740; PC64LE-NEXT: lfs 0, .LCPI77_2@toc@l(3) 4741; PC64LE-NEXT: lfs 1, .LCPI77_1@toc@l(4) 4742; PC64LE-NEXT: addis 3, 2, .LCPI77_0@toc@ha 4743; PC64LE-NEXT: xsrdpic 0, 0 4744; PC64LE-NEXT: lfs 2, .LCPI77_0@toc@l(3) 4745; PC64LE-NEXT: addis 3, 2, .LCPI77_3@toc@ha 4746; PC64LE-NEXT: xsrdpic 1, 1 4747; PC64LE-NEXT: addi 3, 3, .LCPI77_3@toc@l 4748; PC64LE-NEXT: xsrdpic 2, 2 4749; PC64LE-NEXT: xscvdpspn 0, 0 4750; PC64LE-NEXT: xscvdpspn 1, 1 4751; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 4752; PC64LE-NEXT: xscvdpspn 0, 2 4753; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 4754; PC64LE-NEXT: vmrghw 2, 3, 2 4755; PC64LE-NEXT: lvx 3, 0, 3 4756; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 4757; PC64LE-NEXT: vperm 2, 4, 2, 3 4758; PC64LE-NEXT: blr 4759; 4760; PC64LE9-LABEL: constrained_vector_rint_v3f32: 4761; PC64LE9: # %bb.0: # %entry 4762; PC64LE9-NEXT: addis 3, 2, .LCPI77_0@toc@ha 4763; PC64LE9-NEXT: lfs 0, .LCPI77_0@toc@l(3) 4764; PC64LE9-NEXT: addis 3, 2, .LCPI77_1@toc@ha 4765; PC64LE9-NEXT: lfs 1, .LCPI77_1@toc@l(3) 4766; PC64LE9-NEXT: addis 3, 2, .LCPI77_2@toc@ha 4767; PC64LE9-NEXT: xsrdpic 0, 0 4768; PC64LE9-NEXT: lfs 2, .LCPI77_2@toc@l(3) 4769; PC64LE9-NEXT: addis 3, 2, .LCPI77_3@toc@ha 4770; PC64LE9-NEXT: addi 3, 3, .LCPI77_3@toc@l 4771; PC64LE9-NEXT: xsrdpic 1, 1 4772; PC64LE9-NEXT: xsrdpic 2, 2 4773; PC64LE9-NEXT: xscvdpspn 0, 0 4774; PC64LE9-NEXT: xscvdpspn 1, 1 4775; PC64LE9-NEXT: xscvdpspn 2, 2 4776; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 4777; PC64LE9-NEXT: xxsldwi 35, 1, 1, 3 4778; PC64LE9-NEXT: xxsldwi 34, 2, 2, 3 4779; PC64LE9-NEXT: vmrghw 2, 3, 2 4780; PC64LE9-NEXT: lxvx 35, 0, 3 4781; PC64LE9-NEXT: vperm 2, 4, 2, 3 4782; PC64LE9-NEXT: blr 4783 entry: 4784 %rint = call <3 x float> @llvm.experimental.constrained.rint.v3f32( 4785 <3 x float> <float 42.0, float 43.0, float 44.0>, 4786 metadata !"round.dynamic", 4787 metadata !"fpexcept.strict") #1 4788 ret <3 x float> %rint 4789} 4790 4791define <3 x double> @constrained_vector_rint_v3f64() #0 { 4792; PC64LE-LABEL: constrained_vector_rint_v3f64: 4793; PC64LE: # %bb.0: # %entry 4794; PC64LE-NEXT: addis 3, 2, .LCPI78_1@toc@ha 4795; PC64LE-NEXT: addi 3, 3, .LCPI78_1@toc@l 4796; PC64LE-NEXT: lxvd2x 0, 0, 3 4797; PC64LE-NEXT: addis 3, 2, .LCPI78_0@toc@ha 4798; PC64LE-NEXT: lfd 1, .LCPI78_0@toc@l(3) 4799; PC64LE-NEXT: xxswapd 0, 0 4800; PC64LE-NEXT: xsrdpic 3, 1 4801; PC64LE-NEXT: xvrdpic 2, 0 4802; PC64LE-NEXT: xxswapd 1, 2 4803; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 4804; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4805; PC64LE-NEXT: blr 4806; 4807; PC64LE9-LABEL: constrained_vector_rint_v3f64: 4808; PC64LE9: # %bb.0: # %entry 4809; PC64LE9-NEXT: addis 3, 2, .LCPI78_0@toc@ha 4810; PC64LE9-NEXT: lfd 0, .LCPI78_0@toc@l(3) 4811; PC64LE9-NEXT: addis 3, 2, .LCPI78_1@toc@ha 4812; PC64LE9-NEXT: addi 3, 3, .LCPI78_1@toc@l 4813; PC64LE9-NEXT: xsrdpic 3, 0 4814; PC64LE9-NEXT: lxvx 0, 0, 3 4815; PC64LE9-NEXT: xvrdpic 2, 0 4816; PC64LE9-NEXT: xxswapd 1, 2 4817; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4818; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 4819; PC64LE9-NEXT: blr 4820entry: 4821 %rint = call <3 x double> @llvm.experimental.constrained.rint.v3f64( 4822 <3 x double> <double 42.0, double 42.1, double 42.2>, 4823 metadata !"round.dynamic", 4824 metadata !"fpexcept.strict") #1 4825 ret <3 x double> %rint 4826} 4827 4828define <4 x double> @constrained_vector_rint_v4f64() #0 { 4829; PC64LE-LABEL: constrained_vector_rint_v4f64: 4830; PC64LE: # %bb.0: # %entry 4831; PC64LE-NEXT: addis 3, 2, .LCPI79_0@toc@ha 4832; PC64LE-NEXT: addis 4, 2, .LCPI79_1@toc@ha 4833; PC64LE-NEXT: addi 3, 3, .LCPI79_0@toc@l 4834; PC64LE-NEXT: lxvd2x 0, 0, 3 4835; PC64LE-NEXT: addi 3, 4, .LCPI79_1@toc@l 4836; PC64LE-NEXT: lxvd2x 1, 0, 3 4837; PC64LE-NEXT: xxswapd 0, 0 4838; PC64LE-NEXT: xxswapd 1, 1 4839; PC64LE-NEXT: xvrdpic 34, 0 4840; PC64LE-NEXT: xvrdpic 35, 1 4841; PC64LE-NEXT: blr 4842; 4843; PC64LE9-LABEL: constrained_vector_rint_v4f64: 4844; PC64LE9: # %bb.0: # %entry 4845; PC64LE9-NEXT: addis 3, 2, .LCPI79_0@toc@ha 4846; PC64LE9-NEXT: addi 3, 3, .LCPI79_0@toc@l 4847; PC64LE9-NEXT: lxvx 0, 0, 3 4848; PC64LE9-NEXT: addis 3, 2, .LCPI79_1@toc@ha 4849; PC64LE9-NEXT: addi 3, 3, .LCPI79_1@toc@l 4850; PC64LE9-NEXT: xvrdpic 34, 0 4851; PC64LE9-NEXT: lxvx 0, 0, 3 4852; PC64LE9-NEXT: xvrdpic 35, 0 4853; PC64LE9-NEXT: blr 4854entry: 4855 %rint = call <4 x double> @llvm.experimental.constrained.rint.v4f64( 4856 <4 x double> <double 42.1, double 42.2, 4857 double 42.3, double 42.4>, 4858 metadata !"round.dynamic", 4859 metadata !"fpexcept.strict") #1 4860 ret <4 x double> %rint 4861} 4862 4863define <1 x float> @constrained_vector_nearbyint_v1f32() #0 { 4864; PC64LE-LABEL: constrained_vector_nearbyint_v1f32: 4865; PC64LE: # %bb.0: # %entry 4866; PC64LE-NEXT: mflr 0 4867; PC64LE-NEXT: std 0, 16(1) 4868; PC64LE-NEXT: stdu 1, -32(1) 4869; PC64LE-NEXT: addis 3, 2, .LCPI80_0@toc@ha 4870; PC64LE-NEXT: lfs 1, .LCPI80_0@toc@l(3) 4871; PC64LE-NEXT: bl nearbyintf 4872; PC64LE-NEXT: nop 4873; PC64LE-NEXT: addi 1, 1, 32 4874; PC64LE-NEXT: ld 0, 16(1) 4875; PC64LE-NEXT: mtlr 0 4876; PC64LE-NEXT: blr 4877; 4878; PC64LE9-LABEL: constrained_vector_nearbyint_v1f32: 4879; PC64LE9: # %bb.0: # %entry 4880; PC64LE9-NEXT: mflr 0 4881; PC64LE9-NEXT: std 0, 16(1) 4882; PC64LE9-NEXT: stdu 1, -32(1) 4883; PC64LE9-NEXT: addis 3, 2, .LCPI80_0@toc@ha 4884; PC64LE9-NEXT: lfs 1, .LCPI80_0@toc@l(3) 4885; PC64LE9-NEXT: bl nearbyintf 4886; PC64LE9-NEXT: nop 4887; PC64LE9-NEXT: addi 1, 1, 32 4888; PC64LE9-NEXT: ld 0, 16(1) 4889; PC64LE9-NEXT: mtlr 0 4890; PC64LE9-NEXT: blr 4891entry: 4892 %nearby = call <1 x float> @llvm.experimental.constrained.nearbyint.v1f32( 4893 <1 x float> <float 42.0>, 4894 metadata !"round.dynamic", 4895 metadata !"fpexcept.strict") #1 4896 ret <1 x float> %nearby 4897} 4898 4899define <2 x double> @constrained_vector_nearbyint_v2f64() #0 { 4900; PC64LE-LABEL: constrained_vector_nearbyint_v2f64: 4901; PC64LE: # %bb.0: # %entry 4902; PC64LE-NEXT: mflr 0 4903; PC64LE-NEXT: std 0, 16(1) 4904; PC64LE-NEXT: stdu 1, -64(1) 4905; PC64LE-NEXT: addis 3, 2, .LCPI81_0@toc@ha 4906; PC64LE-NEXT: lfd 1, .LCPI81_0@toc@l(3) 4907; PC64LE-NEXT: bl nearbyint 4908; PC64LE-NEXT: nop 4909; PC64LE-NEXT: li 3, 48 4910; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4911; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 4912; PC64LE-NEXT: addis 3, 2, .LCPI81_1@toc@ha 4913; PC64LE-NEXT: lfs 1, .LCPI81_1@toc@l(3) 4914; PC64LE-NEXT: bl nearbyint 4915; PC64LE-NEXT: nop 4916; PC64LE-NEXT: li 3, 48 4917; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4918; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 4919; PC64LE-NEXT: xxmrghd 34, 1, 0 4920; PC64LE-NEXT: addi 1, 1, 64 4921; PC64LE-NEXT: ld 0, 16(1) 4922; PC64LE-NEXT: mtlr 0 4923; PC64LE-NEXT: blr 4924; 4925; PC64LE9-LABEL: constrained_vector_nearbyint_v2f64: 4926; PC64LE9: # %bb.0: # %entry 4927; PC64LE9-NEXT: mflr 0 4928; PC64LE9-NEXT: std 0, 16(1) 4929; PC64LE9-NEXT: stdu 1, -48(1) 4930; PC64LE9-NEXT: addis 3, 2, .LCPI81_0@toc@ha 4931; PC64LE9-NEXT: lfd 1, .LCPI81_0@toc@l(3) 4932; PC64LE9-NEXT: bl nearbyint 4933; PC64LE9-NEXT: nop 4934; PC64LE9-NEXT: addis 3, 2, .LCPI81_1@toc@ha 4935; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4936; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 4937; PC64LE9-NEXT: lfs 1, .LCPI81_1@toc@l(3) 4938; PC64LE9-NEXT: bl nearbyint 4939; PC64LE9-NEXT: nop 4940; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 4941; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4942; PC64LE9-NEXT: xxmrghd 34, 1, 0 4943; PC64LE9-NEXT: addi 1, 1, 48 4944; PC64LE9-NEXT: ld 0, 16(1) 4945; PC64LE9-NEXT: mtlr 0 4946; PC64LE9-NEXT: blr 4947entry: 4948 %nearby = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64( 4949 <2 x double> <double 42.1, double 42.0>, 4950 metadata !"round.dynamic", 4951 metadata !"fpexcept.strict") #1 4952 ret <2 x double> %nearby 4953} 4954 4955define <3 x float> @constrained_vector_nearbyint_v3f32() #0 { 4956; PC64LE-LABEL: constrained_vector_nearbyint_v3f32: 4957; PC64LE: # %bb.0: # %entry 4958; PC64LE-NEXT: mflr 0 4959; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 4960; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 4961; PC64LE-NEXT: std 0, 16(1) 4962; PC64LE-NEXT: stdu 1, -48(1) 4963; PC64LE-NEXT: addis 3, 2, .LCPI82_0@toc@ha 4964; PC64LE-NEXT: lfs 1, .LCPI82_0@toc@l(3) 4965; PC64LE-NEXT: bl nearbyintf 4966; PC64LE-NEXT: nop 4967; PC64LE-NEXT: addis 3, 2, .LCPI82_1@toc@ha 4968; PC64LE-NEXT: fmr 31, 1 4969; PC64LE-NEXT: lfs 1, .LCPI82_1@toc@l(3) 4970; PC64LE-NEXT: bl nearbyintf 4971; PC64LE-NEXT: nop 4972; PC64LE-NEXT: addis 3, 2, .LCPI82_2@toc@ha 4973; PC64LE-NEXT: fmr 30, 1 4974; PC64LE-NEXT: lfs 1, .LCPI82_2@toc@l(3) 4975; PC64LE-NEXT: bl nearbyintf 4976; PC64LE-NEXT: nop 4977; PC64LE-NEXT: xscvdpspn 0, 30 4978; PC64LE-NEXT: addis 3, 2, .LCPI82_3@toc@ha 4979; PC64LE-NEXT: xscvdpspn 1, 1 4980; PC64LE-NEXT: addi 3, 3, .LCPI82_3@toc@l 4981; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 4982; PC64LE-NEXT: xscvdpspn 0, 31 4983; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 4984; PC64LE-NEXT: vmrghw 2, 2, 3 4985; PC64LE-NEXT: lvx 3, 0, 3 4986; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 4987; PC64LE-NEXT: vperm 2, 4, 2, 3 4988; PC64LE-NEXT: addi 1, 1, 48 4989; PC64LE-NEXT: ld 0, 16(1) 4990; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 4991; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 4992; PC64LE-NEXT: mtlr 0 4993; PC64LE-NEXT: blr 4994; 4995; PC64LE9-LABEL: constrained_vector_nearbyint_v3f32: 4996; PC64LE9: # %bb.0: # %entry 4997; PC64LE9-NEXT: mflr 0 4998; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 4999; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 5000; PC64LE9-NEXT: std 0, 16(1) 5001; PC64LE9-NEXT: stdu 1, -48(1) 5002; PC64LE9-NEXT: addis 3, 2, .LCPI82_0@toc@ha 5003; PC64LE9-NEXT: lfs 1, .LCPI82_0@toc@l(3) 5004; PC64LE9-NEXT: bl nearbyintf 5005; PC64LE9-NEXT: nop 5006; PC64LE9-NEXT: addis 3, 2, .LCPI82_1@toc@ha 5007; PC64LE9-NEXT: fmr 31, 1 5008; PC64LE9-NEXT: lfs 1, .LCPI82_1@toc@l(3) 5009; PC64LE9-NEXT: bl nearbyintf 5010; PC64LE9-NEXT: nop 5011; PC64LE9-NEXT: addis 3, 2, .LCPI82_2@toc@ha 5012; PC64LE9-NEXT: fmr 30, 1 5013; PC64LE9-NEXT: lfs 1, .LCPI82_2@toc@l(3) 5014; PC64LE9-NEXT: bl nearbyintf 5015; PC64LE9-NEXT: nop 5016; PC64LE9-NEXT: xscvdpspn 0, 1 5017; PC64LE9-NEXT: addis 3, 2, .LCPI82_3@toc@ha 5018; PC64LE9-NEXT: addi 3, 3, .LCPI82_3@toc@l 5019; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 5020; PC64LE9-NEXT: xscvdpspn 0, 30 5021; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 5022; PC64LE9-NEXT: xscvdpspn 0, 31 5023; PC64LE9-NEXT: vmrghw 2, 3, 2 5024; PC64LE9-NEXT: lxvx 35, 0, 3 5025; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 5026; PC64LE9-NEXT: vperm 2, 4, 2, 3 5027; PC64LE9-NEXT: addi 1, 1, 48 5028; PC64LE9-NEXT: ld 0, 16(1) 5029; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 5030; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 5031; PC64LE9-NEXT: mtlr 0 5032; PC64LE9-NEXT: blr 5033entry: 5034 %nearby = call <3 x float> @llvm.experimental.constrained.nearbyint.v3f32( 5035 <3 x float> <float 42.0, float 43.0, float 44.0>, 5036 metadata !"round.dynamic", 5037 metadata !"fpexcept.strict") #1 5038 ret <3 x float> %nearby 5039} 5040 5041define <3 x double> @constrained_vector_nearby_v3f64() #0 { 5042; PC64LE-LABEL: constrained_vector_nearby_v3f64: 5043; PC64LE: # %bb.0: # %entry 5044; PC64LE-NEXT: mflr 0 5045; PC64LE-NEXT: std 0, 16(1) 5046; PC64LE-NEXT: stdu 1, -80(1) 5047; PC64LE-NEXT: li 3, 64 5048; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 5049; PC64LE-NEXT: addis 3, 2, .LCPI83_0@toc@ha 5050; PC64LE-NEXT: lfd 1, .LCPI83_0@toc@l(3) 5051; PC64LE-NEXT: bl nearbyint 5052; PC64LE-NEXT: nop 5053; PC64LE-NEXT: li 3, 48 5054; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 5055; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 5056; PC64LE-NEXT: addis 3, 2, .LCPI83_1@toc@ha 5057; PC64LE-NEXT: lfs 1, .LCPI83_1@toc@l(3) 5058; PC64LE-NEXT: bl nearbyint 5059; PC64LE-NEXT: nop 5060; PC64LE-NEXT: li 3, 48 5061; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 5062; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 5063; PC64LE-NEXT: addis 3, 2, .LCPI83_2@toc@ha 5064; PC64LE-NEXT: xxmrghd 63, 0, 1 5065; PC64LE-NEXT: lfd 1, .LCPI83_2@toc@l(3) 5066; PC64LE-NEXT: bl nearbyint 5067; PC64LE-NEXT: nop 5068; PC64LE-NEXT: xxswapd 0, 63 5069; PC64LE-NEXT: li 3, 64 5070; PC64LE-NEXT: xxlor 2, 63, 63 5071; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 5072; PC64LE-NEXT: fmr 3, 1 5073; PC64LE-NEXT: fmr 1, 0 5074; PC64LE-NEXT: addi 1, 1, 80 5075; PC64LE-NEXT: ld 0, 16(1) 5076; PC64LE-NEXT: mtlr 0 5077; PC64LE-NEXT: blr 5078; 5079; PC64LE9-LABEL: constrained_vector_nearby_v3f64: 5080; PC64LE9: # %bb.0: # %entry 5081; PC64LE9-NEXT: mflr 0 5082; PC64LE9-NEXT: std 0, 16(1) 5083; PC64LE9-NEXT: stdu 1, -64(1) 5084; PC64LE9-NEXT: addis 3, 2, .LCPI83_0@toc@ha 5085; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 5086; PC64LE9-NEXT: lfd 1, .LCPI83_0@toc@l(3) 5087; PC64LE9-NEXT: bl nearbyint 5088; PC64LE9-NEXT: nop 5089; PC64LE9-NEXT: addis 3, 2, .LCPI83_1@toc@ha 5090; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 5091; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 5092; PC64LE9-NEXT: lfs 1, .LCPI83_1@toc@l(3) 5093; PC64LE9-NEXT: bl nearbyint 5094; PC64LE9-NEXT: nop 5095; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 5096; PC64LE9-NEXT: addis 3, 2, .LCPI83_2@toc@ha 5097; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 5098; PC64LE9-NEXT: xxmrghd 63, 0, 1 5099; PC64LE9-NEXT: lfd 1, .LCPI83_2@toc@l(3) 5100; PC64LE9-NEXT: bl nearbyint 5101; PC64LE9-NEXT: nop 5102; PC64LE9-NEXT: fmr 3, 1 5103; PC64LE9-NEXT: xxswapd 1, 63 5104; PC64LE9-NEXT: xscpsgndp 2, 63, 63 5105; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 5106; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 5107; PC64LE9-NEXT: addi 1, 1, 64 5108; PC64LE9-NEXT: ld 0, 16(1) 5109; PC64LE9-NEXT: mtlr 0 5110; PC64LE9-NEXT: blr 5111entry: 5112 %nearby = call <3 x double> @llvm.experimental.constrained.nearbyint.v3f64( 5113 <3 x double> <double 42.0, double 42.1, double 42.2>, 5114 metadata !"round.dynamic", 5115 metadata !"fpexcept.strict") #1 5116 ret <3 x double> %nearby 5117} 5118 5119define <4 x double> @constrained_vector_nearbyint_v4f64() #0 { 5120; PC64LE-LABEL: constrained_vector_nearbyint_v4f64: 5121; PC64LE: # %bb.0: # %entry 5122; PC64LE-NEXT: mflr 0 5123; PC64LE-NEXT: std 0, 16(1) 5124; PC64LE-NEXT: stdu 1, -80(1) 5125; PC64LE-NEXT: li 3, 64 5126; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 5127; PC64LE-NEXT: addis 3, 2, .LCPI84_0@toc@ha 5128; PC64LE-NEXT: lfd 1, .LCPI84_0@toc@l(3) 5129; PC64LE-NEXT: bl nearbyint 5130; PC64LE-NEXT: nop 5131; PC64LE-NEXT: li 3, 48 5132; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 5133; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 5134; PC64LE-NEXT: addis 3, 2, .LCPI84_1@toc@ha 5135; PC64LE-NEXT: lfd 1, .LCPI84_1@toc@l(3) 5136; PC64LE-NEXT: bl nearbyint 5137; PC64LE-NEXT: nop 5138; PC64LE-NEXT: li 3, 48 5139; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 5140; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 5141; PC64LE-NEXT: addis 3, 2, .LCPI84_2@toc@ha 5142; PC64LE-NEXT: xxmrghd 63, 1, 0 5143; PC64LE-NEXT: lfd 1, .LCPI84_2@toc@l(3) 5144; PC64LE-NEXT: bl nearbyint 5145; PC64LE-NEXT: nop 5146; PC64LE-NEXT: li 3, 48 5147; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 5148; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 5149; PC64LE-NEXT: addis 3, 2, .LCPI84_3@toc@ha 5150; PC64LE-NEXT: lfd 1, .LCPI84_3@toc@l(3) 5151; PC64LE-NEXT: bl nearbyint 5152; PC64LE-NEXT: nop 5153; PC64LE-NEXT: li 3, 48 5154; PC64LE-NEXT: vmr 2, 31 5155; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 5156; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 5157; PC64LE-NEXT: li 3, 64 5158; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 5159; PC64LE-NEXT: xxmrghd 35, 1, 0 5160; PC64LE-NEXT: addi 1, 1, 80 5161; PC64LE-NEXT: ld 0, 16(1) 5162; PC64LE-NEXT: mtlr 0 5163; PC64LE-NEXT: blr 5164; 5165; PC64LE9-LABEL: constrained_vector_nearbyint_v4f64: 5166; PC64LE9: # %bb.0: # %entry 5167; PC64LE9-NEXT: mflr 0 5168; PC64LE9-NEXT: std 0, 16(1) 5169; PC64LE9-NEXT: stdu 1, -64(1) 5170; PC64LE9-NEXT: addis 3, 2, .LCPI84_0@toc@ha 5171; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 5172; PC64LE9-NEXT: lfd 1, .LCPI84_0@toc@l(3) 5173; PC64LE9-NEXT: bl nearbyint 5174; PC64LE9-NEXT: nop 5175; PC64LE9-NEXT: addis 3, 2, .LCPI84_1@toc@ha 5176; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 5177; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 5178; PC64LE9-NEXT: lfd 1, .LCPI84_1@toc@l(3) 5179; PC64LE9-NEXT: bl nearbyint 5180; PC64LE9-NEXT: nop 5181; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 5182; PC64LE9-NEXT: addis 3, 2, .LCPI84_2@toc@ha 5183; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 5184; PC64LE9-NEXT: xxmrghd 63, 1, 0 5185; PC64LE9-NEXT: lfd 1, .LCPI84_2@toc@l(3) 5186; PC64LE9-NEXT: bl nearbyint 5187; PC64LE9-NEXT: nop 5188; PC64LE9-NEXT: addis 3, 2, .LCPI84_3@toc@ha 5189; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 5190; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 5191; PC64LE9-NEXT: lfd 1, .LCPI84_3@toc@l(3) 5192; PC64LE9-NEXT: bl nearbyint 5193; PC64LE9-NEXT: nop 5194; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 5195; PC64LE9-NEXT: vmr 2, 31 5196; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 5197; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 5198; PC64LE9-NEXT: xxmrghd 35, 1, 0 5199; PC64LE9-NEXT: addi 1, 1, 64 5200; PC64LE9-NEXT: ld 0, 16(1) 5201; PC64LE9-NEXT: mtlr 0 5202; PC64LE9-NEXT: blr 5203entry: 5204 %nearby = call <4 x double> @llvm.experimental.constrained.nearbyint.v4f64( 5205 <4 x double> <double 42.1, double 42.2, 5206 double 42.3, double 42.4>, 5207 metadata !"round.dynamic", 5208 metadata !"fpexcept.strict") #1 5209 ret <4 x double> %nearby 5210} 5211 5212define <1 x float> @constrained_vector_maxnum_v1f32() #0 { 5213; PC64LE-LABEL: constrained_vector_maxnum_v1f32: 5214; PC64LE: # %bb.0: # %entry 5215; PC64LE-NEXT: mflr 0 5216; PC64LE-NEXT: std 0, 16(1) 5217; PC64LE-NEXT: stdu 1, -32(1) 5218; PC64LE-NEXT: addis 3, 2, .LCPI85_0@toc@ha 5219; PC64LE-NEXT: addis 4, 2, .LCPI85_1@toc@ha 5220; PC64LE-NEXT: lfs 1, .LCPI85_0@toc@l(3) 5221; PC64LE-NEXT: lfs 2, .LCPI85_1@toc@l(4) 5222; PC64LE-NEXT: bl fmaxf 5223; PC64LE-NEXT: nop 5224; PC64LE-NEXT: addi 1, 1, 32 5225; PC64LE-NEXT: ld 0, 16(1) 5226; PC64LE-NEXT: mtlr 0 5227; PC64LE-NEXT: blr 5228; 5229; PC64LE9-LABEL: constrained_vector_maxnum_v1f32: 5230; PC64LE9: # %bb.0: # %entry 5231; PC64LE9-NEXT: mflr 0 5232; PC64LE9-NEXT: std 0, 16(1) 5233; PC64LE9-NEXT: stdu 1, -32(1) 5234; PC64LE9-NEXT: addis 3, 2, .LCPI85_0@toc@ha 5235; PC64LE9-NEXT: lfs 1, .LCPI85_0@toc@l(3) 5236; PC64LE9-NEXT: addis 3, 2, .LCPI85_1@toc@ha 5237; PC64LE9-NEXT: lfs 2, .LCPI85_1@toc@l(3) 5238; PC64LE9-NEXT: bl fmaxf 5239; PC64LE9-NEXT: nop 5240; PC64LE9-NEXT: addi 1, 1, 32 5241; PC64LE9-NEXT: ld 0, 16(1) 5242; PC64LE9-NEXT: mtlr 0 5243; PC64LE9-NEXT: blr 5244entry: 5245 %max = call <1 x float> @llvm.experimental.constrained.maxnum.v1f32( 5246 <1 x float> <float 42.0>, <1 x float> <float 41.0>, 5247 metadata !"fpexcept.strict") #1 5248 ret <1 x float> %max 5249} 5250 5251define <2 x double> @constrained_vector_maxnum_v2f64() #0 { 5252; PC64LE-LABEL: constrained_vector_maxnum_v2f64: 5253; PC64LE: # %bb.0: # %entry 5254; PC64LE-NEXT: addis 3, 2, .LCPI86_0@toc@ha 5255; PC64LE-NEXT: addis 4, 2, .LCPI86_1@toc@ha 5256; PC64LE-NEXT: addi 3, 3, .LCPI86_0@toc@l 5257; PC64LE-NEXT: addi 4, 4, .LCPI86_1@toc@l 5258; PC64LE-NEXT: lxvd2x 0, 0, 3 5259; PC64LE-NEXT: lxvd2x 1, 0, 4 5260; PC64LE-NEXT: xxswapd 0, 0 5261; PC64LE-NEXT: xxswapd 1, 1 5262; PC64LE-NEXT: xvmaxdp 34, 1, 0 5263; PC64LE-NEXT: blr 5264; 5265; PC64LE9-LABEL: constrained_vector_maxnum_v2f64: 5266; PC64LE9: # %bb.0: # %entry 5267; PC64LE9-NEXT: addis 3, 2, .LCPI86_0@toc@ha 5268; PC64LE9-NEXT: addi 3, 3, .LCPI86_0@toc@l 5269; PC64LE9-NEXT: lxvx 0, 0, 3 5270; PC64LE9-NEXT: addis 3, 2, .LCPI86_1@toc@ha 5271; PC64LE9-NEXT: addi 3, 3, .LCPI86_1@toc@l 5272; PC64LE9-NEXT: lxvx 1, 0, 3 5273; PC64LE9-NEXT: xvmaxdp 34, 1, 0 5274; PC64LE9-NEXT: blr 5275entry: 5276 %max = call <2 x double> @llvm.experimental.constrained.maxnum.v2f64( 5277 <2 x double> <double 43.0, double 42.0>, 5278 <2 x double> <double 41.0, double 40.0>, 5279 metadata !"fpexcept.strict") #1 5280 ret <2 x double> %max 5281} 5282 5283define <3 x float> @constrained_vector_maxnum_v3f32() #0 { 5284; PC64LE-LABEL: constrained_vector_maxnum_v3f32: 5285; PC64LE: # %bb.0: # %entry 5286; PC64LE-NEXT: mflr 0 5287; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 5288; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 5289; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 5290; PC64LE-NEXT: std 0, 16(1) 5291; PC64LE-NEXT: stdu 1, -64(1) 5292; PC64LE-NEXT: addis 4, 2, .LCPI87_1@toc@ha 5293; PC64LE-NEXT: addis 3, 2, .LCPI87_0@toc@ha 5294; PC64LE-NEXT: lfs 31, .LCPI87_1@toc@l(4) 5295; PC64LE-NEXT: lfs 1, .LCPI87_0@toc@l(3) 5296; PC64LE-NEXT: fmr 2, 31 5297; PC64LE-NEXT: bl fmaxf 5298; PC64LE-NEXT: nop 5299; PC64LE-NEXT: addis 3, 2, .LCPI87_2@toc@ha 5300; PC64LE-NEXT: addis 4, 2, .LCPI87_3@toc@ha 5301; PC64LE-NEXT: fmr 30, 1 5302; PC64LE-NEXT: lfs 1, .LCPI87_2@toc@l(3) 5303; PC64LE-NEXT: lfs 2, .LCPI87_3@toc@l(4) 5304; PC64LE-NEXT: bl fmaxf 5305; PC64LE-NEXT: nop 5306; PC64LE-NEXT: fmr 29, 1 5307; PC64LE-NEXT: addis 3, 2, .LCPI87_4@toc@ha 5308; PC64LE-NEXT: fmr 1, 31 5309; PC64LE-NEXT: lfs 2, .LCPI87_4@toc@l(3) 5310; PC64LE-NEXT: bl fmaxf 5311; PC64LE-NEXT: nop 5312; PC64LE-NEXT: xscvdpspn 0, 29 5313; PC64LE-NEXT: addis 3, 2, .LCPI87_5@toc@ha 5314; PC64LE-NEXT: xscvdpspn 1, 1 5315; PC64LE-NEXT: addi 3, 3, .LCPI87_5@toc@l 5316; PC64LE-NEXT: lvx 4, 0, 3 5317; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 5318; PC64LE-NEXT: xscvdpspn 0, 30 5319; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 5320; PC64LE-NEXT: vmrghw 2, 2, 3 5321; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 5322; PC64LE-NEXT: vperm 2, 3, 2, 4 5323; PC64LE-NEXT: addi 1, 1, 64 5324; PC64LE-NEXT: ld 0, 16(1) 5325; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 5326; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 5327; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 5328; PC64LE-NEXT: mtlr 0 5329; PC64LE-NEXT: blr 5330; 5331; PC64LE9-LABEL: constrained_vector_maxnum_v3f32: 5332; PC64LE9: # %bb.0: # %entry 5333; PC64LE9-NEXT: mflr 0 5334; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 5335; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 5336; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 5337; PC64LE9-NEXT: std 0, 16(1) 5338; PC64LE9-NEXT: stdu 1, -64(1) 5339; PC64LE9-NEXT: addis 3, 2, .LCPI87_0@toc@ha 5340; PC64LE9-NEXT: lfs 1, .LCPI87_0@toc@l(3) 5341; PC64LE9-NEXT: addis 3, 2, .LCPI87_1@toc@ha 5342; PC64LE9-NEXT: lfs 31, .LCPI87_1@toc@l(3) 5343; PC64LE9-NEXT: fmr 2, 31 5344; PC64LE9-NEXT: bl fmaxf 5345; PC64LE9-NEXT: nop 5346; PC64LE9-NEXT: addis 3, 2, .LCPI87_2@toc@ha 5347; PC64LE9-NEXT: fmr 30, 1 5348; PC64LE9-NEXT: lfs 1, .LCPI87_2@toc@l(3) 5349; PC64LE9-NEXT: addis 3, 2, .LCPI87_3@toc@ha 5350; PC64LE9-NEXT: lfs 2, .LCPI87_3@toc@l(3) 5351; PC64LE9-NEXT: bl fmaxf 5352; PC64LE9-NEXT: nop 5353; PC64LE9-NEXT: addis 3, 2, .LCPI87_4@toc@ha 5354; PC64LE9-NEXT: fmr 29, 1 5355; PC64LE9-NEXT: fmr 1, 31 5356; PC64LE9-NEXT: lfs 2, .LCPI87_4@toc@l(3) 5357; PC64LE9-NEXT: bl fmaxf 5358; PC64LE9-NEXT: nop 5359; PC64LE9-NEXT: xscvdpspn 0, 1 5360; PC64LE9-NEXT: addis 3, 2, .LCPI87_5@toc@ha 5361; PC64LE9-NEXT: addi 3, 3, .LCPI87_5@toc@l 5362; PC64LE9-NEXT: lxvx 36, 0, 3 5363; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 5364; PC64LE9-NEXT: xscvdpspn 0, 29 5365; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 5366; PC64LE9-NEXT: xscvdpspn 0, 30 5367; PC64LE9-NEXT: vmrghw 2, 3, 2 5368; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 5369; PC64LE9-NEXT: vperm 2, 3, 2, 4 5370; PC64LE9-NEXT: addi 1, 1, 64 5371; PC64LE9-NEXT: ld 0, 16(1) 5372; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 5373; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 5374; PC64LE9-NEXT: mtlr 0 5375; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 5376; PC64LE9-NEXT: blr 5377entry: 5378 %max = call <3 x float> @llvm.experimental.constrained.maxnum.v3f32( 5379 <3 x float> <float 43.0, float 44.0, float 45.0>, 5380 <3 x float> <float 41.0, float 42.0, float 43.0>, 5381 metadata !"fpexcept.strict") #1 5382 ret <3 x float> %max 5383} 5384 5385define <3 x double> @constrained_vector_max_v3f64() #0 { 5386; PC64LE-LABEL: constrained_vector_max_v3f64: 5387; PC64LE: # %bb.0: # %entry 5388; PC64LE-NEXT: mflr 0 5389; PC64LE-NEXT: std 0, 16(1) 5390; PC64LE-NEXT: stdu 1, -32(1) 5391; PC64LE-NEXT: addis 3, 2, .LCPI88_0@toc@ha 5392; PC64LE-NEXT: addis 4, 2, .LCPI88_1@toc@ha 5393; PC64LE-NEXT: lfs 1, .LCPI88_0@toc@l(3) 5394; PC64LE-NEXT: lfs 2, .LCPI88_1@toc@l(4) 5395; PC64LE-NEXT: bl fmax 5396; PC64LE-NEXT: nop 5397; PC64LE-NEXT: addis 3, 2, .LCPI88_2@toc@ha 5398; PC64LE-NEXT: addis 4, 2, .LCPI88_3@toc@ha 5399; PC64LE-NEXT: fmr 3, 1 5400; PC64LE-NEXT: addi 3, 3, .LCPI88_2@toc@l 5401; PC64LE-NEXT: addi 4, 4, .LCPI88_3@toc@l 5402; PC64LE-NEXT: lxvd2x 0, 0, 3 5403; PC64LE-NEXT: lxvd2x 2, 0, 4 5404; PC64LE-NEXT: xxswapd 0, 0 5405; PC64LE-NEXT: xxswapd 2, 2 5406; PC64LE-NEXT: xvmaxdp 2, 2, 0 5407; PC64LE-NEXT: xxswapd 0, 2 5408; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 5409; PC64LE-NEXT: fmr 1, 0 5410; PC64LE-NEXT: addi 1, 1, 32 5411; PC64LE-NEXT: ld 0, 16(1) 5412; PC64LE-NEXT: mtlr 0 5413; PC64LE-NEXT: blr 5414; 5415; PC64LE9-LABEL: constrained_vector_max_v3f64: 5416; PC64LE9: # %bb.0: # %entry 5417; PC64LE9-NEXT: mflr 0 5418; PC64LE9-NEXT: std 0, 16(1) 5419; PC64LE9-NEXT: stdu 1, -32(1) 5420; PC64LE9-NEXT: addis 3, 2, .LCPI88_0@toc@ha 5421; PC64LE9-NEXT: lfs 1, .LCPI88_0@toc@l(3) 5422; PC64LE9-NEXT: addis 3, 2, .LCPI88_1@toc@ha 5423; PC64LE9-NEXT: lfs 2, .LCPI88_1@toc@l(3) 5424; PC64LE9-NEXT: bl fmax 5425; PC64LE9-NEXT: nop 5426; PC64LE9-NEXT: addis 3, 2, .LCPI88_2@toc@ha 5427; PC64LE9-NEXT: fmr 3, 1 5428; PC64LE9-NEXT: addi 3, 3, .LCPI88_2@toc@l 5429; PC64LE9-NEXT: lxvx 0, 0, 3 5430; PC64LE9-NEXT: addis 3, 2, .LCPI88_3@toc@ha 5431; PC64LE9-NEXT: addi 3, 3, .LCPI88_3@toc@l 5432; PC64LE9-NEXT: lxvx 1, 0, 3 5433; PC64LE9-NEXT: xvmaxdp 2, 1, 0 5434; PC64LE9-NEXT: xxswapd 1, 2 5435; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 5436; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 5437; PC64LE9-NEXT: addi 1, 1, 32 5438; PC64LE9-NEXT: ld 0, 16(1) 5439; PC64LE9-NEXT: mtlr 0 5440; PC64LE9-NEXT: blr 5441entry: 5442 %max = call <3 x double> @llvm.experimental.constrained.maxnum.v3f64( 5443 <3 x double> <double 43.0, double 44.0, double 45.0>, 5444 <3 x double> <double 40.0, double 41.0, double 42.0>, 5445 metadata !"fpexcept.strict") #1 5446 ret <3 x double> %max 5447} 5448 5449define <4 x double> @constrained_vector_maxnum_v4f64() #0 { 5450; PC64LE-LABEL: constrained_vector_maxnum_v4f64: 5451; PC64LE: # %bb.0: # %entry 5452; PC64LE-NEXT: addis 3, 2, .LCPI89_0@toc@ha 5453; PC64LE-NEXT: addis 4, 2, .LCPI89_1@toc@ha 5454; PC64LE-NEXT: addis 5, 2, .LCPI89_2@toc@ha 5455; PC64LE-NEXT: addis 6, 2, .LCPI89_3@toc@ha 5456; PC64LE-NEXT: addi 3, 3, .LCPI89_0@toc@l 5457; PC64LE-NEXT: addi 4, 4, .LCPI89_1@toc@l 5458; PC64LE-NEXT: lxvd2x 0, 0, 3 5459; PC64LE-NEXT: lxvd2x 1, 0, 4 5460; PC64LE-NEXT: addi 3, 5, .LCPI89_2@toc@l 5461; PC64LE-NEXT: addi 4, 6, .LCPI89_3@toc@l 5462; PC64LE-NEXT: lxvd2x 2, 0, 3 5463; PC64LE-NEXT: lxvd2x 3, 0, 4 5464; PC64LE-NEXT: xxswapd 0, 0 5465; PC64LE-NEXT: xxswapd 1, 1 5466; PC64LE-NEXT: xxswapd 2, 2 5467; PC64LE-NEXT: xxswapd 3, 3 5468; PC64LE-NEXT: xvmaxdp 34, 1, 0 5469; PC64LE-NEXT: xvmaxdp 35, 3, 2 5470; PC64LE-NEXT: blr 5471; 5472; PC64LE9-LABEL: constrained_vector_maxnum_v4f64: 5473; PC64LE9: # %bb.0: # %entry 5474; PC64LE9-NEXT: addis 3, 2, .LCPI89_0@toc@ha 5475; PC64LE9-NEXT: addi 3, 3, .LCPI89_0@toc@l 5476; PC64LE9-NEXT: lxvx 0, 0, 3 5477; PC64LE9-NEXT: addis 3, 2, .LCPI89_1@toc@ha 5478; PC64LE9-NEXT: addi 3, 3, .LCPI89_1@toc@l 5479; PC64LE9-NEXT: lxvx 1, 0, 3 5480; PC64LE9-NEXT: addis 3, 2, .LCPI89_2@toc@ha 5481; PC64LE9-NEXT: addi 3, 3, .LCPI89_2@toc@l 5482; PC64LE9-NEXT: xvmaxdp 34, 1, 0 5483; PC64LE9-NEXT: lxvx 0, 0, 3 5484; PC64LE9-NEXT: addis 3, 2, .LCPI89_3@toc@ha 5485; PC64LE9-NEXT: addi 3, 3, .LCPI89_3@toc@l 5486; PC64LE9-NEXT: lxvx 1, 0, 3 5487; PC64LE9-NEXT: xvmaxdp 35, 1, 0 5488; PC64LE9-NEXT: blr 5489entry: 5490 %max = call <4 x double> @llvm.experimental.constrained.maxnum.v4f64( 5491 <4 x double> <double 44.0, double 45.0, 5492 double 46.0, double 47.0>, 5493 <4 x double> <double 40.0, double 41.0, 5494 double 42.0, double 43.0>, 5495 metadata !"fpexcept.strict") #1 5496 ret <4 x double> %max 5497} 5498 5499define <1 x float> @constrained_vector_minnum_v1f32() #0 { 5500; PC64LE-LABEL: constrained_vector_minnum_v1f32: 5501; PC64LE: # %bb.0: # %entry 5502; PC64LE-NEXT: mflr 0 5503; PC64LE-NEXT: std 0, 16(1) 5504; PC64LE-NEXT: stdu 1, -32(1) 5505; PC64LE-NEXT: addis 3, 2, .LCPI90_0@toc@ha 5506; PC64LE-NEXT: addis 4, 2, .LCPI90_1@toc@ha 5507; PC64LE-NEXT: lfs 1, .LCPI90_0@toc@l(3) 5508; PC64LE-NEXT: lfs 2, .LCPI90_1@toc@l(4) 5509; PC64LE-NEXT: bl fminf 5510; PC64LE-NEXT: nop 5511; PC64LE-NEXT: addi 1, 1, 32 5512; PC64LE-NEXT: ld 0, 16(1) 5513; PC64LE-NEXT: mtlr 0 5514; PC64LE-NEXT: blr 5515; 5516; PC64LE9-LABEL: constrained_vector_minnum_v1f32: 5517; PC64LE9: # %bb.0: # %entry 5518; PC64LE9-NEXT: mflr 0 5519; PC64LE9-NEXT: std 0, 16(1) 5520; PC64LE9-NEXT: stdu 1, -32(1) 5521; PC64LE9-NEXT: addis 3, 2, .LCPI90_0@toc@ha 5522; PC64LE9-NEXT: lfs 1, .LCPI90_0@toc@l(3) 5523; PC64LE9-NEXT: addis 3, 2, .LCPI90_1@toc@ha 5524; PC64LE9-NEXT: lfs 2, .LCPI90_1@toc@l(3) 5525; PC64LE9-NEXT: bl fminf 5526; PC64LE9-NEXT: nop 5527; PC64LE9-NEXT: addi 1, 1, 32 5528; PC64LE9-NEXT: ld 0, 16(1) 5529; PC64LE9-NEXT: mtlr 0 5530; PC64LE9-NEXT: blr 5531 entry: 5532 %min = call <1 x float> @llvm.experimental.constrained.minnum.v1f32( 5533 <1 x float> <float 42.0>, <1 x float> <float 41.0>, 5534 metadata !"fpexcept.strict") #1 5535 ret <1 x float> %min 5536} 5537 5538define <2 x double> @constrained_vector_minnum_v2f64() #0 { 5539; PC64LE-LABEL: constrained_vector_minnum_v2f64: 5540; PC64LE: # %bb.0: # %entry 5541; PC64LE-NEXT: addis 3, 2, .LCPI91_0@toc@ha 5542; PC64LE-NEXT: addis 4, 2, .LCPI91_1@toc@ha 5543; PC64LE-NEXT: addi 3, 3, .LCPI91_0@toc@l 5544; PC64LE-NEXT: addi 4, 4, .LCPI91_1@toc@l 5545; PC64LE-NEXT: lxvd2x 0, 0, 3 5546; PC64LE-NEXT: lxvd2x 1, 0, 4 5547; PC64LE-NEXT: xxswapd 0, 0 5548; PC64LE-NEXT: xxswapd 1, 1 5549; PC64LE-NEXT: xvmindp 34, 1, 0 5550; PC64LE-NEXT: blr 5551; 5552; PC64LE9-LABEL: constrained_vector_minnum_v2f64: 5553; PC64LE9: # %bb.0: # %entry 5554; PC64LE9-NEXT: addis 3, 2, .LCPI91_0@toc@ha 5555; PC64LE9-NEXT: addi 3, 3, .LCPI91_0@toc@l 5556; PC64LE9-NEXT: lxvx 0, 0, 3 5557; PC64LE9-NEXT: addis 3, 2, .LCPI91_1@toc@ha 5558; PC64LE9-NEXT: addi 3, 3, .LCPI91_1@toc@l 5559; PC64LE9-NEXT: lxvx 1, 0, 3 5560; PC64LE9-NEXT: xvmindp 34, 1, 0 5561; PC64LE9-NEXT: blr 5562entry: 5563 %min = call <2 x double> @llvm.experimental.constrained.minnum.v2f64( 5564 <2 x double> <double 43.0, double 42.0>, 5565 <2 x double> <double 41.0, double 40.0>, 5566 metadata !"fpexcept.strict") #1 5567 ret <2 x double> %min 5568} 5569 5570define <3 x float> @constrained_vector_minnum_v3f32() #0 { 5571; PC64LE-LABEL: constrained_vector_minnum_v3f32: 5572; PC64LE: # %bb.0: # %entry 5573; PC64LE-NEXT: mflr 0 5574; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 5575; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 5576; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 5577; PC64LE-NEXT: std 0, 16(1) 5578; PC64LE-NEXT: stdu 1, -64(1) 5579; PC64LE-NEXT: addis 4, 2, .LCPI92_1@toc@ha 5580; PC64LE-NEXT: addis 3, 2, .LCPI92_0@toc@ha 5581; PC64LE-NEXT: lfs 31, .LCPI92_1@toc@l(4) 5582; PC64LE-NEXT: lfs 1, .LCPI92_0@toc@l(3) 5583; PC64LE-NEXT: fmr 2, 31 5584; PC64LE-NEXT: bl fminf 5585; PC64LE-NEXT: nop 5586; PC64LE-NEXT: addis 3, 2, .LCPI92_2@toc@ha 5587; PC64LE-NEXT: addis 4, 2, .LCPI92_3@toc@ha 5588; PC64LE-NEXT: fmr 30, 1 5589; PC64LE-NEXT: lfs 1, .LCPI92_2@toc@l(3) 5590; PC64LE-NEXT: lfs 2, .LCPI92_3@toc@l(4) 5591; PC64LE-NEXT: bl fminf 5592; PC64LE-NEXT: nop 5593; PC64LE-NEXT: fmr 29, 1 5594; PC64LE-NEXT: addis 3, 2, .LCPI92_4@toc@ha 5595; PC64LE-NEXT: fmr 1, 31 5596; PC64LE-NEXT: lfs 2, .LCPI92_4@toc@l(3) 5597; PC64LE-NEXT: bl fminf 5598; PC64LE-NEXT: nop 5599; PC64LE-NEXT: xscvdpspn 0, 29 5600; PC64LE-NEXT: addis 3, 2, .LCPI92_5@toc@ha 5601; PC64LE-NEXT: xscvdpspn 1, 1 5602; PC64LE-NEXT: addi 3, 3, .LCPI92_5@toc@l 5603; PC64LE-NEXT: lvx 4, 0, 3 5604; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 5605; PC64LE-NEXT: xscvdpspn 0, 30 5606; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 5607; PC64LE-NEXT: vmrghw 2, 2, 3 5608; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 5609; PC64LE-NEXT: vperm 2, 3, 2, 4 5610; PC64LE-NEXT: addi 1, 1, 64 5611; PC64LE-NEXT: ld 0, 16(1) 5612; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 5613; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 5614; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 5615; PC64LE-NEXT: mtlr 0 5616; PC64LE-NEXT: blr 5617; 5618; PC64LE9-LABEL: constrained_vector_minnum_v3f32: 5619; PC64LE9: # %bb.0: # %entry 5620; PC64LE9-NEXT: mflr 0 5621; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 5622; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 5623; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 5624; PC64LE9-NEXT: std 0, 16(1) 5625; PC64LE9-NEXT: stdu 1, -64(1) 5626; PC64LE9-NEXT: addis 3, 2, .LCPI92_0@toc@ha 5627; PC64LE9-NEXT: lfs 1, .LCPI92_0@toc@l(3) 5628; PC64LE9-NEXT: addis 3, 2, .LCPI92_1@toc@ha 5629; PC64LE9-NEXT: lfs 31, .LCPI92_1@toc@l(3) 5630; PC64LE9-NEXT: fmr 2, 31 5631; PC64LE9-NEXT: bl fminf 5632; PC64LE9-NEXT: nop 5633; PC64LE9-NEXT: addis 3, 2, .LCPI92_2@toc@ha 5634; PC64LE9-NEXT: fmr 30, 1 5635; PC64LE9-NEXT: lfs 1, .LCPI92_2@toc@l(3) 5636; PC64LE9-NEXT: addis 3, 2, .LCPI92_3@toc@ha 5637; PC64LE9-NEXT: lfs 2, .LCPI92_3@toc@l(3) 5638; PC64LE9-NEXT: bl fminf 5639; PC64LE9-NEXT: nop 5640; PC64LE9-NEXT: addis 3, 2, .LCPI92_4@toc@ha 5641; PC64LE9-NEXT: fmr 29, 1 5642; PC64LE9-NEXT: fmr 1, 31 5643; PC64LE9-NEXT: lfs 2, .LCPI92_4@toc@l(3) 5644; PC64LE9-NEXT: bl fminf 5645; PC64LE9-NEXT: nop 5646; PC64LE9-NEXT: xscvdpspn 0, 1 5647; PC64LE9-NEXT: addis 3, 2, .LCPI92_5@toc@ha 5648; PC64LE9-NEXT: addi 3, 3, .LCPI92_5@toc@l 5649; PC64LE9-NEXT: lxvx 36, 0, 3 5650; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 5651; PC64LE9-NEXT: xscvdpspn 0, 29 5652; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 5653; PC64LE9-NEXT: xscvdpspn 0, 30 5654; PC64LE9-NEXT: vmrghw 2, 3, 2 5655; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 5656; PC64LE9-NEXT: vperm 2, 3, 2, 4 5657; PC64LE9-NEXT: addi 1, 1, 64 5658; PC64LE9-NEXT: ld 0, 16(1) 5659; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 5660; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 5661; PC64LE9-NEXT: mtlr 0 5662; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 5663; PC64LE9-NEXT: blr 5664entry: 5665 %min = call <3 x float> @llvm.experimental.constrained.minnum.v3f32( 5666 <3 x float> <float 43.0, float 44.0, float 45.0>, 5667 <3 x float> <float 41.0, float 42.0, float 43.0>, 5668 metadata !"fpexcept.strict") #1 5669 ret <3 x float> %min 5670} 5671 5672define <3 x double> @constrained_vector_min_v3f64() #0 { 5673; PC64LE-LABEL: constrained_vector_min_v3f64: 5674; PC64LE: # %bb.0: # %entry 5675; PC64LE-NEXT: mflr 0 5676; PC64LE-NEXT: std 0, 16(1) 5677; PC64LE-NEXT: stdu 1, -32(1) 5678; PC64LE-NEXT: addis 3, 2, .LCPI93_0@toc@ha 5679; PC64LE-NEXT: addis 4, 2, .LCPI93_1@toc@ha 5680; PC64LE-NEXT: lfs 1, .LCPI93_0@toc@l(3) 5681; PC64LE-NEXT: lfs 2, .LCPI93_1@toc@l(4) 5682; PC64LE-NEXT: bl fmin 5683; PC64LE-NEXT: nop 5684; PC64LE-NEXT: addis 3, 2, .LCPI93_2@toc@ha 5685; PC64LE-NEXT: addis 4, 2, .LCPI93_3@toc@ha 5686; PC64LE-NEXT: fmr 3, 1 5687; PC64LE-NEXT: addi 3, 3, .LCPI93_2@toc@l 5688; PC64LE-NEXT: addi 4, 4, .LCPI93_3@toc@l 5689; PC64LE-NEXT: lxvd2x 0, 0, 3 5690; PC64LE-NEXT: lxvd2x 2, 0, 4 5691; PC64LE-NEXT: xxswapd 0, 0 5692; PC64LE-NEXT: xxswapd 2, 2 5693; PC64LE-NEXT: xvmindp 2, 2, 0 5694; PC64LE-NEXT: xxswapd 0, 2 5695; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 5696; PC64LE-NEXT: fmr 1, 0 5697; PC64LE-NEXT: addi 1, 1, 32 5698; PC64LE-NEXT: ld 0, 16(1) 5699; PC64LE-NEXT: mtlr 0 5700; PC64LE-NEXT: blr 5701; 5702; PC64LE9-LABEL: constrained_vector_min_v3f64: 5703; PC64LE9: # %bb.0: # %entry 5704; PC64LE9-NEXT: mflr 0 5705; PC64LE9-NEXT: std 0, 16(1) 5706; PC64LE9-NEXT: stdu 1, -32(1) 5707; PC64LE9-NEXT: addis 3, 2, .LCPI93_0@toc@ha 5708; PC64LE9-NEXT: lfs 1, .LCPI93_0@toc@l(3) 5709; PC64LE9-NEXT: addis 3, 2, .LCPI93_1@toc@ha 5710; PC64LE9-NEXT: lfs 2, .LCPI93_1@toc@l(3) 5711; PC64LE9-NEXT: bl fmin 5712; PC64LE9-NEXT: nop 5713; PC64LE9-NEXT: addis 3, 2, .LCPI93_2@toc@ha 5714; PC64LE9-NEXT: fmr 3, 1 5715; PC64LE9-NEXT: addi 3, 3, .LCPI93_2@toc@l 5716; PC64LE9-NEXT: lxvx 0, 0, 3 5717; PC64LE9-NEXT: addis 3, 2, .LCPI93_3@toc@ha 5718; PC64LE9-NEXT: addi 3, 3, .LCPI93_3@toc@l 5719; PC64LE9-NEXT: lxvx 1, 0, 3 5720; PC64LE9-NEXT: xvmindp 2, 1, 0 5721; PC64LE9-NEXT: xxswapd 1, 2 5722; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 5723; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 5724; PC64LE9-NEXT: addi 1, 1, 32 5725; PC64LE9-NEXT: ld 0, 16(1) 5726; PC64LE9-NEXT: mtlr 0 5727; PC64LE9-NEXT: blr 5728entry: 5729 %min = call <3 x double> @llvm.experimental.constrained.minnum.v3f64( 5730 <3 x double> <double 43.0, double 44.0, double 45.0>, 5731 <3 x double> <double 40.0, double 41.0, double 42.0>, 5732 metadata !"fpexcept.strict") #1 5733 ret <3 x double> %min 5734} 5735 5736define <4 x double> @constrained_vector_minnum_v4f64() #0 { 5737; PC64LE-LABEL: constrained_vector_minnum_v4f64: 5738; PC64LE: # %bb.0: # %entry 5739; PC64LE-NEXT: addis 3, 2, .LCPI94_0@toc@ha 5740; PC64LE-NEXT: addis 4, 2, .LCPI94_1@toc@ha 5741; PC64LE-NEXT: addis 5, 2, .LCPI94_2@toc@ha 5742; PC64LE-NEXT: addis 6, 2, .LCPI94_3@toc@ha 5743; PC64LE-NEXT: addi 3, 3, .LCPI94_0@toc@l 5744; PC64LE-NEXT: addi 4, 4, .LCPI94_1@toc@l 5745; PC64LE-NEXT: lxvd2x 0, 0, 3 5746; PC64LE-NEXT: lxvd2x 1, 0, 4 5747; PC64LE-NEXT: addi 3, 5, .LCPI94_2@toc@l 5748; PC64LE-NEXT: addi 4, 6, .LCPI94_3@toc@l 5749; PC64LE-NEXT: lxvd2x 2, 0, 3 5750; PC64LE-NEXT: lxvd2x 3, 0, 4 5751; PC64LE-NEXT: xxswapd 0, 0 5752; PC64LE-NEXT: xxswapd 1, 1 5753; PC64LE-NEXT: xxswapd 2, 2 5754; PC64LE-NEXT: xxswapd 3, 3 5755; PC64LE-NEXT: xvmindp 34, 1, 0 5756; PC64LE-NEXT: xvmindp 35, 3, 2 5757; PC64LE-NEXT: blr 5758; 5759; PC64LE9-LABEL: constrained_vector_minnum_v4f64: 5760; PC64LE9: # %bb.0: # %entry 5761; PC64LE9-NEXT: addis 3, 2, .LCPI94_0@toc@ha 5762; PC64LE9-NEXT: addi 3, 3, .LCPI94_0@toc@l 5763; PC64LE9-NEXT: lxvx 0, 0, 3 5764; PC64LE9-NEXT: addis 3, 2, .LCPI94_1@toc@ha 5765; PC64LE9-NEXT: addi 3, 3, .LCPI94_1@toc@l 5766; PC64LE9-NEXT: lxvx 1, 0, 3 5767; PC64LE9-NEXT: addis 3, 2, .LCPI94_2@toc@ha 5768; PC64LE9-NEXT: addi 3, 3, .LCPI94_2@toc@l 5769; PC64LE9-NEXT: xvmindp 34, 1, 0 5770; PC64LE9-NEXT: lxvx 0, 0, 3 5771; PC64LE9-NEXT: addis 3, 2, .LCPI94_3@toc@ha 5772; PC64LE9-NEXT: addi 3, 3, .LCPI94_3@toc@l 5773; PC64LE9-NEXT: lxvx 1, 0, 3 5774; PC64LE9-NEXT: xvmindp 35, 1, 0 5775; PC64LE9-NEXT: blr 5776entry: 5777 %min = call <4 x double> @llvm.experimental.constrained.minnum.v4f64( 5778 <4 x double> <double 44.0, double 45.0, 5779 double 46.0, double 47.0>, 5780 <4 x double> <double 40.0, double 41.0, 5781 double 42.0, double 43.0>, 5782 metadata !"fpexcept.strict") #1 5783 ret <4 x double> %min 5784} 5785 5786define <1 x i32> @constrained_vector_fptosi_v1i32_v1f32() #0 { 5787; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f32: 5788; PC64LE: # %bb.0: # %entry 5789; PC64LE-NEXT: addis 3, 2, .LCPI95_0@toc@ha 5790; PC64LE-NEXT: lfs 0, .LCPI95_0@toc@l(3) 5791; PC64LE-NEXT: xscvdpsxws 0, 0 5792; PC64LE-NEXT: mffprwz 3, 0 5793; PC64LE-NEXT: blr 5794; 5795; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f32: 5796; PC64LE9: # %bb.0: # %entry 5797; PC64LE9-NEXT: addis 3, 2, .LCPI95_0@toc@ha 5798; PC64LE9-NEXT: lfs 0, .LCPI95_0@toc@l(3) 5799; PC64LE9-NEXT: xscvdpsxws 0, 0 5800; PC64LE9-NEXT: mffprwz 3, 0 5801; PC64LE9-NEXT: blr 5802entry: 5803 %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32( 5804 <1 x float><float 42.0>, 5805 metadata !"fpexcept.strict") #0 5806 ret <1 x i32> %result 5807} 5808 5809define <2 x i32> @constrained_vector_fptosi_v2i32_v2f32() #0 { 5810; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f32: 5811; PC64LE: # %bb.0: # %entry 5812; PC64LE-NEXT: addis 3, 2, .LCPI96_0@toc@ha 5813; PC64LE-NEXT: addis 4, 2, .LCPI96_1@toc@ha 5814; PC64LE-NEXT: lfs 0, .LCPI96_0@toc@l(3) 5815; PC64LE-NEXT: lfs 1, .LCPI96_1@toc@l(4) 5816; PC64LE-NEXT: xscvdpsxws 0, 0 5817; PC64LE-NEXT: xscvdpsxws 1, 1 5818; PC64LE-NEXT: mffprwz 3, 0 5819; PC64LE-NEXT: mffprwz 4, 1 5820; PC64LE-NEXT: mtvsrwz 34, 3 5821; PC64LE-NEXT: mtvsrwz 35, 4 5822; PC64LE-NEXT: vmrghw 2, 3, 2 5823; PC64LE-NEXT: blr 5824; 5825; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f32: 5826; PC64LE9: # %bb.0: # %entry 5827; PC64LE9-NEXT: addis 3, 2, .LCPI96_0@toc@ha 5828; PC64LE9-NEXT: lfs 0, .LCPI96_0@toc@l(3) 5829; PC64LE9-NEXT: xscvdpsxws 0, 0 5830; PC64LE9-NEXT: mffprwz 3, 0 5831; PC64LE9-NEXT: mtvsrws 34, 3 5832; PC64LE9-NEXT: addis 3, 2, .LCPI96_1@toc@ha 5833; PC64LE9-NEXT: lfs 0, .LCPI96_1@toc@l(3) 5834; PC64LE9-NEXT: xscvdpsxws 0, 0 5835; PC64LE9-NEXT: mffprwz 3, 0 5836; PC64LE9-NEXT: mtvsrws 35, 3 5837; PC64LE9-NEXT: vmrghw 2, 3, 2 5838; PC64LE9-NEXT: blr 5839entry: 5840 %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32( 5841 <2 x float><float 42.0, float 43.0>, 5842 metadata !"fpexcept.strict") #0 5843 ret <2 x i32> %result 5844} 5845 5846define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32() #0 { 5847; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f32: 5848; PC64LE: # %bb.0: # %entry 5849; PC64LE-NEXT: addis 3, 2, .LCPI97_0@toc@ha 5850; PC64LE-NEXT: addis 4, 2, .LCPI97_1@toc@ha 5851; PC64LE-NEXT: lfs 0, .LCPI97_0@toc@l(3) 5852; PC64LE-NEXT: lfs 1, .LCPI97_1@toc@l(4) 5853; PC64LE-NEXT: addis 3, 2, .LCPI97_3@toc@ha 5854; PC64LE-NEXT: lfs 2, .LCPI97_3@toc@l(3) 5855; PC64LE-NEXT: xscvdpsxws 0, 0 5856; PC64LE-NEXT: xscvdpsxws 1, 1 5857; PC64LE-NEXT: xscvdpsxws 2, 2 5858; PC64LE-NEXT: mffprwz 3, 0 5859; PC64LE-NEXT: mffprwz 4, 1 5860; PC64LE-NEXT: mtvsrwz 34, 3 5861; PC64LE-NEXT: addis 3, 2, .LCPI97_2@toc@ha 5862; PC64LE-NEXT: mtvsrwz 35, 4 5863; PC64LE-NEXT: addi 3, 3, .LCPI97_2@toc@l 5864; PC64LE-NEXT: mffprwz 4, 2 5865; PC64LE-NEXT: vmrghw 2, 3, 2 5866; PC64LE-NEXT: lvx 3, 0, 3 5867; PC64LE-NEXT: mtvsrwz 36, 4 5868; PC64LE-NEXT: vperm 2, 4, 2, 3 5869; PC64LE-NEXT: blr 5870; 5871; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f32: 5872; PC64LE9: # %bb.0: # %entry 5873; PC64LE9-NEXT: addis 3, 2, .LCPI97_0@toc@ha 5874; PC64LE9-NEXT: lfs 0, .LCPI97_0@toc@l(3) 5875; PC64LE9-NEXT: addis 3, 2, .LCPI97_1@toc@ha 5876; PC64LE9-NEXT: lfs 1, .LCPI97_1@toc@l(3) 5877; PC64LE9-NEXT: xscvdpsxws 0, 0 5878; PC64LE9-NEXT: mffprwz 3, 0 5879; PC64LE9-NEXT: xscvdpsxws 0, 1 5880; PC64LE9-NEXT: mtvsrws 34, 3 5881; PC64LE9-NEXT: mffprwz 3, 0 5882; PC64LE9-NEXT: mtvsrws 35, 3 5883; PC64LE9-NEXT: addis 3, 2, .LCPI97_2@toc@ha 5884; PC64LE9-NEXT: addi 3, 3, .LCPI97_2@toc@l 5885; PC64LE9-NEXT: vmrghw 2, 3, 2 5886; PC64LE9-NEXT: lxvx 35, 0, 3 5887; PC64LE9-NEXT: addis 3, 2, .LCPI97_3@toc@ha 5888; PC64LE9-NEXT: lfs 0, .LCPI97_3@toc@l(3) 5889; PC64LE9-NEXT: xscvdpsxws 0, 0 5890; PC64LE9-NEXT: mffprwz 3, 0 5891; PC64LE9-NEXT: mtvsrws 36, 3 5892; PC64LE9-NEXT: vperm 2, 4, 2, 3 5893; PC64LE9-NEXT: blr 5894entry: 5895 %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32( 5896 <3 x float><float 42.0, float 43.0, 5897 float 44.0>, 5898 metadata !"fpexcept.strict") #0 5899 ret <3 x i32> %result 5900} 5901 5902define <4 x i32> @constrained_vector_fptosi_v4i32_v4f32() #0 { 5903; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f32: 5904; PC64LE: # %bb.0: # %entry 5905; PC64LE-NEXT: addis 3, 2, .LCPI98_0@toc@ha 5906; PC64LE-NEXT: addi 3, 3, .LCPI98_0@toc@l 5907; PC64LE-NEXT: lvx 2, 0, 3 5908; PC64LE-NEXT: xvcvspsxws 34, 34 5909; PC64LE-NEXT: blr 5910; 5911; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f32: 5912; PC64LE9: # %bb.0: # %entry 5913; PC64LE9-NEXT: addis 3, 2, .LCPI98_0@toc@ha 5914; PC64LE9-NEXT: addi 3, 3, .LCPI98_0@toc@l 5915; PC64LE9-NEXT: lxvx 0, 0, 3 5916; PC64LE9-NEXT: xvcvspsxws 34, 0 5917; PC64LE9-NEXT: blr 5918entry: 5919 %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32( 5920 <4 x float><float 42.0, float 43.0, 5921 float 44.0, float 45.0>, 5922 metadata !"fpexcept.strict") #0 5923 ret <4 x i32> %result 5924} 5925 5926define <1 x i64> @constrained_vector_fptosi_v1i64_v1f32() #0 { 5927; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f32: 5928; PC64LE: # %bb.0: # %entry 5929; PC64LE-NEXT: addis 3, 2, .LCPI99_0@toc@ha 5930; PC64LE-NEXT: lfs 0, .LCPI99_0@toc@l(3) 5931; PC64LE-NEXT: xscvdpsxds 0, 0 5932; PC64LE-NEXT: mffprd 3, 0 5933; PC64LE-NEXT: blr 5934; 5935; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f32: 5936; PC64LE9: # %bb.0: # %entry 5937; PC64LE9-NEXT: addis 3, 2, .LCPI99_0@toc@ha 5938; PC64LE9-NEXT: lfs 0, .LCPI99_0@toc@l(3) 5939; PC64LE9-NEXT: xscvdpsxds 0, 0 5940; PC64LE9-NEXT: mffprd 3, 0 5941; PC64LE9-NEXT: blr 5942entry: 5943 %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32( 5944 <1 x float><float 42.0>, 5945 metadata !"fpexcept.strict") #0 5946 ret <1 x i64> %result 5947} 5948 5949define <2 x i64> @constrained_vector_fptosi_v2i64_v2f32() #0 { 5950; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f32: 5951; PC64LE: # %bb.0: # %entry 5952; PC64LE-NEXT: addis 3, 2, .LCPI100_0@toc@ha 5953; PC64LE-NEXT: addis 4, 2, .LCPI100_1@toc@ha 5954; PC64LE-NEXT: lfs 0, .LCPI100_0@toc@l(3) 5955; PC64LE-NEXT: lfs 1, .LCPI100_1@toc@l(4) 5956; PC64LE-NEXT: xscvdpsxds 0, 0 5957; PC64LE-NEXT: xscvdpsxds 1, 1 5958; PC64LE-NEXT: mffprd 3, 0 5959; PC64LE-NEXT: mffprd 4, 1 5960; PC64LE-NEXT: mtfprd 0, 3 5961; PC64LE-NEXT: mtfprd 1, 4 5962; PC64LE-NEXT: xxmrghd 34, 1, 0 5963; PC64LE-NEXT: blr 5964; 5965; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f32: 5966; PC64LE9: # %bb.0: # %entry 5967; PC64LE9-NEXT: addis 3, 2, .LCPI100_0@toc@ha 5968; PC64LE9-NEXT: addis 4, 2, .LCPI100_1@toc@ha 5969; PC64LE9-NEXT: lfs 0, .LCPI100_0@toc@l(3) 5970; PC64LE9-NEXT: xscvdpsxds 0, 0 5971; PC64LE9-NEXT: mffprd 3, 0 5972; PC64LE9-NEXT: lfs 0, .LCPI100_1@toc@l(4) 5973; PC64LE9-NEXT: xscvdpsxds 0, 0 5974; PC64LE9-NEXT: mffprd 4, 0 5975; PC64LE9-NEXT: mtvsrdd 34, 4, 3 5976; PC64LE9-NEXT: blr 5977entry: 5978 %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32( 5979 <2 x float><float 42.0, float 43.0>, 5980 metadata !"fpexcept.strict") #0 5981 ret <2 x i64> %result 5982} 5983 5984define <3 x i64> @constrained_vector_fptosi_v3i64_v3f32() #0 { 5985; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f32: 5986; PC64LE: # %bb.0: # %entry 5987; PC64LE-NEXT: addis 3, 2, .LCPI101_0@toc@ha 5988; PC64LE-NEXT: addis 4, 2, .LCPI101_1@toc@ha 5989; PC64LE-NEXT: addis 5, 2, .LCPI101_2@toc@ha 5990; PC64LE-NEXT: lfs 0, .LCPI101_0@toc@l(3) 5991; PC64LE-NEXT: lfs 1, .LCPI101_1@toc@l(4) 5992; PC64LE-NEXT: lfs 2, .LCPI101_2@toc@l(5) 5993; PC64LE-NEXT: xscvdpsxds 0, 0 5994; PC64LE-NEXT: xscvdpsxds 1, 1 5995; PC64LE-NEXT: xscvdpsxds 2, 2 5996; PC64LE-NEXT: mffprd 3, 0 5997; PC64LE-NEXT: mffprd 4, 1 5998; PC64LE-NEXT: mffprd 5, 2 5999; PC64LE-NEXT: blr 6000; 6001; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f32: 6002; PC64LE9: # %bb.0: # %entry 6003; PC64LE9-NEXT: addis 3, 2, .LCPI101_0@toc@ha 6004; PC64LE9-NEXT: addis 4, 2, .LCPI101_1@toc@ha 6005; PC64LE9-NEXT: addis 5, 2, .LCPI101_2@toc@ha 6006; PC64LE9-NEXT: lfs 0, .LCPI101_0@toc@l(3) 6007; PC64LE9-NEXT: xscvdpsxds 0, 0 6008; PC64LE9-NEXT: mffprd 3, 0 6009; PC64LE9-NEXT: lfs 0, .LCPI101_1@toc@l(4) 6010; PC64LE9-NEXT: xscvdpsxds 0, 0 6011; PC64LE9-NEXT: mffprd 4, 0 6012; PC64LE9-NEXT: lfs 0, .LCPI101_2@toc@l(5) 6013; PC64LE9-NEXT: xscvdpsxds 0, 0 6014; PC64LE9-NEXT: mffprd 5, 0 6015; PC64LE9-NEXT: blr 6016entry: 6017 %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32( 6018 <3 x float><float 42.0, float 43.0, 6019 float 44.0>, 6020 metadata !"fpexcept.strict") #0 6021 ret <3 x i64> %result 6022} 6023 6024define <4 x i64> @constrained_vector_fptosi_v4i64_v4f32() #0 { 6025; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f32: 6026; PC64LE: # %bb.0: # %entry 6027; PC64LE-NEXT: addis 3, 2, .LCPI102_0@toc@ha 6028; PC64LE-NEXT: addis 4, 2, .LCPI102_1@toc@ha 6029; PC64LE-NEXT: lfs 0, .LCPI102_0@toc@l(3) 6030; PC64LE-NEXT: addis 3, 2, .LCPI102_2@toc@ha 6031; PC64LE-NEXT: lfs 1, .LCPI102_1@toc@l(4) 6032; PC64LE-NEXT: addis 4, 2, .LCPI102_3@toc@ha 6033; PC64LE-NEXT: lfs 2, .LCPI102_2@toc@l(3) 6034; PC64LE-NEXT: lfs 3, .LCPI102_3@toc@l(4) 6035; PC64LE-NEXT: xscvdpsxds 0, 0 6036; PC64LE-NEXT: xscvdpsxds 1, 1 6037; PC64LE-NEXT: xscvdpsxds 2, 2 6038; PC64LE-NEXT: xscvdpsxds 3, 3 6039; PC64LE-NEXT: mffprd 3, 0 6040; PC64LE-NEXT: mffprd 4, 1 6041; PC64LE-NEXT: mtfprd 0, 3 6042; PC64LE-NEXT: mffprd 3, 2 6043; PC64LE-NEXT: mtfprd 1, 4 6044; PC64LE-NEXT: mffprd 4, 3 6045; PC64LE-NEXT: mtfprd 2, 3 6046; PC64LE-NEXT: xxmrghd 34, 1, 0 6047; PC64LE-NEXT: mtfprd 3, 4 6048; PC64LE-NEXT: xxmrghd 35, 3, 2 6049; PC64LE-NEXT: blr 6050; 6051; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f32: 6052; PC64LE9: # %bb.0: # %entry 6053; PC64LE9-NEXT: addis 3, 2, .LCPI102_0@toc@ha 6054; PC64LE9-NEXT: addis 4, 2, .LCPI102_1@toc@ha 6055; PC64LE9-NEXT: lfs 0, .LCPI102_0@toc@l(3) 6056; PC64LE9-NEXT: xscvdpsxds 0, 0 6057; PC64LE9-NEXT: mffprd 3, 0 6058; PC64LE9-NEXT: lfs 0, .LCPI102_1@toc@l(4) 6059; PC64LE9-NEXT: xscvdpsxds 0, 0 6060; PC64LE9-NEXT: mffprd 4, 0 6061; PC64LE9-NEXT: mtvsrdd 34, 4, 3 6062; PC64LE9-NEXT: addis 3, 2, .LCPI102_2@toc@ha 6063; PC64LE9-NEXT: addis 4, 2, .LCPI102_3@toc@ha 6064; PC64LE9-NEXT: lfs 0, .LCPI102_2@toc@l(3) 6065; PC64LE9-NEXT: xscvdpsxds 0, 0 6066; PC64LE9-NEXT: mffprd 3, 0 6067; PC64LE9-NEXT: lfs 0, .LCPI102_3@toc@l(4) 6068; PC64LE9-NEXT: xscvdpsxds 0, 0 6069; PC64LE9-NEXT: mffprd 4, 0 6070; PC64LE9-NEXT: mtvsrdd 35, 4, 3 6071; PC64LE9-NEXT: blr 6072entry: 6073 %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32( 6074 <4 x float><float 42.0, float 43.0, 6075 float 44.0, float 45.0>, 6076 metadata !"fpexcept.strict") #0 6077 ret <4 x i64> %result 6078} 6079 6080define <1 x i32> @constrained_vector_fptosi_v1i32_v1f64() #0 { 6081; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f64: 6082; PC64LE: # %bb.0: # %entry 6083; PC64LE-NEXT: addis 3, 2, .LCPI103_0@toc@ha 6084; PC64LE-NEXT: lfd 0, .LCPI103_0@toc@l(3) 6085; PC64LE-NEXT: xscvdpsxws 0, 0 6086; PC64LE-NEXT: mffprwz 3, 0 6087; PC64LE-NEXT: blr 6088; 6089; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f64: 6090; PC64LE9: # %bb.0: # %entry 6091; PC64LE9-NEXT: addis 3, 2, .LCPI103_0@toc@ha 6092; PC64LE9-NEXT: lfd 0, .LCPI103_0@toc@l(3) 6093; PC64LE9-NEXT: xscvdpsxws 0, 0 6094; PC64LE9-NEXT: mffprwz 3, 0 6095; PC64LE9-NEXT: blr 6096entry: 6097 %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64( 6098 <1 x double><double 42.1>, 6099 metadata !"fpexcept.strict") #0 6100 ret <1 x i32> %result 6101} 6102 6103 6104define <2 x i32> @constrained_vector_fptosi_v2i32_v2f64() #0 { 6105; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f64: 6106; PC64LE: # %bb.0: # %entry 6107; PC64LE-NEXT: addis 3, 2, .LCPI104_0@toc@ha 6108; PC64LE-NEXT: addis 4, 2, .LCPI104_1@toc@ha 6109; PC64LE-NEXT: lfd 0, .LCPI104_0@toc@l(3) 6110; PC64LE-NEXT: lfd 1, .LCPI104_1@toc@l(4) 6111; PC64LE-NEXT: xscvdpsxws 0, 0 6112; PC64LE-NEXT: xscvdpsxws 1, 1 6113; PC64LE-NEXT: mffprwz 3, 0 6114; PC64LE-NEXT: mffprwz 4, 1 6115; PC64LE-NEXT: mtvsrwz 34, 3 6116; PC64LE-NEXT: mtvsrwz 35, 4 6117; PC64LE-NEXT: vmrghw 2, 3, 2 6118; PC64LE-NEXT: blr 6119; 6120; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f64: 6121; PC64LE9: # %bb.0: # %entry 6122; PC64LE9-NEXT: addis 3, 2, .LCPI104_0@toc@ha 6123; PC64LE9-NEXT: lfd 0, .LCPI104_0@toc@l(3) 6124; PC64LE9-NEXT: xscvdpsxws 0, 0 6125; PC64LE9-NEXT: mffprwz 3, 0 6126; PC64LE9-NEXT: mtvsrws 34, 3 6127; PC64LE9-NEXT: addis 3, 2, .LCPI104_1@toc@ha 6128; PC64LE9-NEXT: lfd 0, .LCPI104_1@toc@l(3) 6129; PC64LE9-NEXT: xscvdpsxws 0, 0 6130; PC64LE9-NEXT: mffprwz 3, 0 6131; PC64LE9-NEXT: mtvsrws 35, 3 6132; PC64LE9-NEXT: vmrghw 2, 3, 2 6133; PC64LE9-NEXT: blr 6134entry: 6135 %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64( 6136 <2 x double><double 42.1, double 42.2>, 6137 metadata !"fpexcept.strict") #0 6138 ret <2 x i32> %result 6139} 6140 6141define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64() #0 { 6142; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f64: 6143; PC64LE: # %bb.0: # %entry 6144; PC64LE-NEXT: addis 3, 2, .LCPI105_0@toc@ha 6145; PC64LE-NEXT: addis 4, 2, .LCPI105_1@toc@ha 6146; PC64LE-NEXT: lfd 0, .LCPI105_0@toc@l(3) 6147; PC64LE-NEXT: lfd 1, .LCPI105_1@toc@l(4) 6148; PC64LE-NEXT: addis 3, 2, .LCPI105_3@toc@ha 6149; PC64LE-NEXT: lfd 2, .LCPI105_3@toc@l(3) 6150; PC64LE-NEXT: xscvdpsxws 0, 0 6151; PC64LE-NEXT: xscvdpsxws 1, 1 6152; PC64LE-NEXT: xscvdpsxws 2, 2 6153; PC64LE-NEXT: mffprwz 3, 0 6154; PC64LE-NEXT: mffprwz 4, 1 6155; PC64LE-NEXT: mtvsrwz 34, 3 6156; PC64LE-NEXT: addis 3, 2, .LCPI105_2@toc@ha 6157; PC64LE-NEXT: mtvsrwz 35, 4 6158; PC64LE-NEXT: addi 3, 3, .LCPI105_2@toc@l 6159; PC64LE-NEXT: mffprwz 4, 2 6160; PC64LE-NEXT: vmrghw 2, 3, 2 6161; PC64LE-NEXT: lvx 3, 0, 3 6162; PC64LE-NEXT: mtvsrwz 36, 4 6163; PC64LE-NEXT: vperm 2, 4, 2, 3 6164; PC64LE-NEXT: blr 6165; 6166; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f64: 6167; PC64LE9: # %bb.0: # %entry 6168; PC64LE9-NEXT: addis 3, 2, .LCPI105_0@toc@ha 6169; PC64LE9-NEXT: lfd 0, .LCPI105_0@toc@l(3) 6170; PC64LE9-NEXT: xscvdpsxws 0, 0 6171; PC64LE9-NEXT: mffprwz 3, 0 6172; PC64LE9-NEXT: mtvsrws 34, 3 6173; PC64LE9-NEXT: addis 3, 2, .LCPI105_1@toc@ha 6174; PC64LE9-NEXT: lfd 0, .LCPI105_1@toc@l(3) 6175; PC64LE9-NEXT: xscvdpsxws 0, 0 6176; PC64LE9-NEXT: mffprwz 3, 0 6177; PC64LE9-NEXT: mtvsrws 35, 3 6178; PC64LE9-NEXT: addis 3, 2, .LCPI105_2@toc@ha 6179; PC64LE9-NEXT: addi 3, 3, .LCPI105_2@toc@l 6180; PC64LE9-NEXT: vmrghw 2, 3, 2 6181; PC64LE9-NEXT: lxvx 35, 0, 3 6182; PC64LE9-NEXT: addis 3, 2, .LCPI105_3@toc@ha 6183; PC64LE9-NEXT: lfd 0, .LCPI105_3@toc@l(3) 6184; PC64LE9-NEXT: xscvdpsxws 0, 0 6185; PC64LE9-NEXT: mffprwz 3, 0 6186; PC64LE9-NEXT: mtvsrws 36, 3 6187; PC64LE9-NEXT: vperm 2, 4, 2, 3 6188; PC64LE9-NEXT: blr 6189entry: 6190 %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64( 6191 <3 x double><double 42.1, double 42.2, 6192 double 42.3>, 6193 metadata !"fpexcept.strict") #0 6194 ret <3 x i32> %result 6195} 6196 6197define <4 x i32> @constrained_vector_fptosi_v4i32_v4f64() #0 { 6198; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f64: 6199; PC64LE: # %bb.0: # %entry 6200; PC64LE-NEXT: addis 3, 2, .LCPI106_0@toc@ha 6201; PC64LE-NEXT: addis 4, 2, .LCPI106_1@toc@ha 6202; PC64LE-NEXT: addis 5, 2, .LCPI106_2@toc@ha 6203; PC64LE-NEXT: lfd 0, .LCPI106_0@toc@l(3) 6204; PC64LE-NEXT: addis 3, 2, .LCPI106_3@toc@ha 6205; PC64LE-NEXT: lfd 1, .LCPI106_1@toc@l(4) 6206; PC64LE-NEXT: lfd 2, .LCPI106_2@toc@l(5) 6207; PC64LE-NEXT: lfd 3, .LCPI106_3@toc@l(3) 6208; PC64LE-NEXT: xscvdpsxws 0, 0 6209; PC64LE-NEXT: xscvdpsxws 1, 1 6210; PC64LE-NEXT: xscvdpsxws 2, 2 6211; PC64LE-NEXT: xscvdpsxws 3, 3 6212; PC64LE-NEXT: mffprwz 3, 0 6213; PC64LE-NEXT: mffprwz 4, 1 6214; PC64LE-NEXT: mffprwz 5, 2 6215; PC64LE-NEXT: mffprwz 6, 3 6216; PC64LE-NEXT: rldimi 4, 3, 32, 0 6217; PC64LE-NEXT: mtfprd 0, 4 6218; PC64LE-NEXT: rldimi 6, 5, 32, 0 6219; PC64LE-NEXT: mtfprd 1, 6 6220; PC64LE-NEXT: xxmrghd 34, 1, 0 6221; PC64LE-NEXT: blr 6222; 6223; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f64: 6224; PC64LE9: # %bb.0: # %entry 6225; PC64LE9-NEXT: addis 3, 2, .LCPI106_0@toc@ha 6226; PC64LE9-NEXT: addis 4, 2, .LCPI106_1@toc@ha 6227; PC64LE9-NEXT: addis 5, 2, .LCPI106_3@toc@ha 6228; PC64LE9-NEXT: lfd 0, .LCPI106_0@toc@l(3) 6229; PC64LE9-NEXT: xscvdpsxws 0, 0 6230; PC64LE9-NEXT: mffprwz 3, 0 6231; PC64LE9-NEXT: lfd 0, .LCPI106_1@toc@l(4) 6232; PC64LE9-NEXT: xscvdpsxws 0, 0 6233; PC64LE9-NEXT: mffprwz 4, 0 6234; PC64LE9-NEXT: rldimi 4, 3, 32, 0 6235; PC64LE9-NEXT: addis 3, 2, .LCPI106_2@toc@ha 6236; PC64LE9-NEXT: lfd 0, .LCPI106_2@toc@l(3) 6237; PC64LE9-NEXT: xscvdpsxws 0, 0 6238; PC64LE9-NEXT: mffprwz 3, 0 6239; PC64LE9-NEXT: lfd 0, .LCPI106_3@toc@l(5) 6240; PC64LE9-NEXT: xscvdpsxws 0, 0 6241; PC64LE9-NEXT: mffprwz 5, 0 6242; PC64LE9-NEXT: rldimi 5, 3, 32, 0 6243; PC64LE9-NEXT: mtvsrdd 34, 5, 4 6244; PC64LE9-NEXT: blr 6245entry: 6246 %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64( 6247 <4 x double><double 42.1, double 42.2, 6248 double 42.3, double 42.4>, 6249 metadata !"fpexcept.strict") #0 6250 ret <4 x i32> %result 6251} 6252 6253define <1 x i64> @constrained_vector_fptosi_v1i64_v1f64() #0 { 6254; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f64: 6255; PC64LE: # %bb.0: # %entry 6256; PC64LE-NEXT: addis 3, 2, .LCPI107_0@toc@ha 6257; PC64LE-NEXT: lfd 0, .LCPI107_0@toc@l(3) 6258; PC64LE-NEXT: xscvdpsxds 0, 0 6259; PC64LE-NEXT: mffprd 3, 0 6260; PC64LE-NEXT: blr 6261; 6262; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f64: 6263; PC64LE9: # %bb.0: # %entry 6264; PC64LE9-NEXT: addis 3, 2, .LCPI107_0@toc@ha 6265; PC64LE9-NEXT: lfd 0, .LCPI107_0@toc@l(3) 6266; PC64LE9-NEXT: xscvdpsxds 0, 0 6267; PC64LE9-NEXT: mffprd 3, 0 6268; PC64LE9-NEXT: blr 6269entry: 6270 %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64( 6271 <1 x double><double 42.1>, 6272 metadata !"fpexcept.strict") #0 6273 ret <1 x i64> %result 6274} 6275 6276define <2 x i64> @constrained_vector_fptosi_v2i64_v2f64() #0 { 6277; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f64: 6278; PC64LE: # %bb.0: # %entry 6279; PC64LE-NEXT: addis 3, 2, .LCPI108_0@toc@ha 6280; PC64LE-NEXT: addi 3, 3, .LCPI108_0@toc@l 6281; PC64LE-NEXT: lxvd2x 0, 0, 3 6282; PC64LE-NEXT: xxswapd 0, 0 6283; PC64LE-NEXT: xvcvdpsxds 34, 0 6284; PC64LE-NEXT: blr 6285; 6286; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f64: 6287; PC64LE9: # %bb.0: # %entry 6288; PC64LE9-NEXT: addis 3, 2, .LCPI108_0@toc@ha 6289; PC64LE9-NEXT: addi 3, 3, .LCPI108_0@toc@l 6290; PC64LE9-NEXT: lxvx 0, 0, 3 6291; PC64LE9-NEXT: xvcvdpsxds 34, 0 6292; PC64LE9-NEXT: blr 6293entry: 6294 %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64( 6295 <2 x double><double 42.1, double 42.2>, 6296 metadata !"fpexcept.strict") #0 6297 ret <2 x i64> %result 6298} 6299 6300define <3 x i64> @constrained_vector_fptosi_v3i64_v3f64() #0 { 6301; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f64: 6302; PC64LE: # %bb.0: # %entry 6303; PC64LE-NEXT: addis 3, 2, .LCPI109_0@toc@ha 6304; PC64LE-NEXT: addis 4, 2, .LCPI109_1@toc@ha 6305; PC64LE-NEXT: addis 5, 2, .LCPI109_2@toc@ha 6306; PC64LE-NEXT: lfd 0, .LCPI109_0@toc@l(3) 6307; PC64LE-NEXT: lfd 1, .LCPI109_1@toc@l(4) 6308; PC64LE-NEXT: lfd 2, .LCPI109_2@toc@l(5) 6309; PC64LE-NEXT: xscvdpsxds 0, 0 6310; PC64LE-NEXT: xscvdpsxds 1, 1 6311; PC64LE-NEXT: xscvdpsxds 2, 2 6312; PC64LE-NEXT: mffprd 3, 0 6313; PC64LE-NEXT: mffprd 4, 1 6314; PC64LE-NEXT: mffprd 5, 2 6315; PC64LE-NEXT: blr 6316; 6317; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f64: 6318; PC64LE9: # %bb.0: # %entry 6319; PC64LE9-NEXT: addis 3, 2, .LCPI109_0@toc@ha 6320; PC64LE9-NEXT: addis 4, 2, .LCPI109_1@toc@ha 6321; PC64LE9-NEXT: addis 5, 2, .LCPI109_2@toc@ha 6322; PC64LE9-NEXT: lfd 0, .LCPI109_0@toc@l(3) 6323; PC64LE9-NEXT: xscvdpsxds 0, 0 6324; PC64LE9-NEXT: mffprd 3, 0 6325; PC64LE9-NEXT: lfd 0, .LCPI109_1@toc@l(4) 6326; PC64LE9-NEXT: xscvdpsxds 0, 0 6327; PC64LE9-NEXT: mffprd 4, 0 6328; PC64LE9-NEXT: lfd 0, .LCPI109_2@toc@l(5) 6329; PC64LE9-NEXT: xscvdpsxds 0, 0 6330; PC64LE9-NEXT: mffprd 5, 0 6331; PC64LE9-NEXT: blr 6332entry: 6333 %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64( 6334 <3 x double><double 42.1, double 42.2, 6335 double 42.3>, 6336 metadata !"fpexcept.strict") #0 6337 ret <3 x i64> %result 6338} 6339 6340define <4 x i64> @constrained_vector_fptosi_v4i64_v4f64() #0 { 6341; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f64: 6342; PC64LE: # %bb.0: # %entry 6343; PC64LE-NEXT: addis 3, 2, .LCPI110_0@toc@ha 6344; PC64LE-NEXT: addis 4, 2, .LCPI110_1@toc@ha 6345; PC64LE-NEXT: addi 3, 3, .LCPI110_0@toc@l 6346; PC64LE-NEXT: lxvd2x 0, 0, 3 6347; PC64LE-NEXT: addi 3, 4, .LCPI110_1@toc@l 6348; PC64LE-NEXT: lxvd2x 1, 0, 3 6349; PC64LE-NEXT: xxswapd 0, 0 6350; PC64LE-NEXT: xxswapd 1, 1 6351; PC64LE-NEXT: xvcvdpsxds 35, 0 6352; PC64LE-NEXT: xvcvdpsxds 34, 1 6353; PC64LE-NEXT: blr 6354; 6355; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f64: 6356; PC64LE9: # %bb.0: # %entry 6357; PC64LE9-NEXT: addis 3, 2, .LCPI110_0@toc@ha 6358; PC64LE9-NEXT: addi 3, 3, .LCPI110_0@toc@l 6359; PC64LE9-NEXT: lxvx 0, 0, 3 6360; PC64LE9-NEXT: addis 3, 2, .LCPI110_1@toc@ha 6361; PC64LE9-NEXT: addi 3, 3, .LCPI110_1@toc@l 6362; PC64LE9-NEXT: xvcvdpsxds 35, 0 6363; PC64LE9-NEXT: lxvx 0, 0, 3 6364; PC64LE9-NEXT: xvcvdpsxds 34, 0 6365; PC64LE9-NEXT: blr 6366entry: 6367 %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64( 6368 <4 x double><double 42.1, double 42.2, 6369 double 42.3, double 42.4>, 6370 metadata !"fpexcept.strict") #0 6371 ret <4 x i64> %result 6372} 6373 6374define <1 x i32> @constrained_vector_fptoui_v1i32_v1f32() #0 { 6375; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f32: 6376; PC64LE: # %bb.0: # %entry 6377; PC64LE-NEXT: addis 3, 2, .LCPI111_0@toc@ha 6378; PC64LE-NEXT: lfs 0, .LCPI111_0@toc@l(3) 6379; PC64LE-NEXT: xscvdpuxws 0, 0 6380; PC64LE-NEXT: mffprwz 3, 0 6381; PC64LE-NEXT: blr 6382; 6383; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f32: 6384; PC64LE9: # %bb.0: # %entry 6385; PC64LE9-NEXT: addis 3, 2, .LCPI111_0@toc@ha 6386; PC64LE9-NEXT: lfs 0, .LCPI111_0@toc@l(3) 6387; PC64LE9-NEXT: xscvdpuxws 0, 0 6388; PC64LE9-NEXT: mffprwz 3, 0 6389; PC64LE9-NEXT: blr 6390entry: 6391 %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32( 6392 <1 x float><float 42.0>, 6393 metadata !"fpexcept.strict") #0 6394 ret <1 x i32> %result 6395} 6396 6397define <2 x i32> @constrained_vector_fptoui_v2i32_v2f32() #0 { 6398; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f32: 6399; PC64LE: # %bb.0: # %entry 6400; PC64LE-NEXT: addis 3, 2, .LCPI112_0@toc@ha 6401; PC64LE-NEXT: addis 4, 2, .LCPI112_1@toc@ha 6402; PC64LE-NEXT: lfs 0, .LCPI112_0@toc@l(3) 6403; PC64LE-NEXT: lfs 1, .LCPI112_1@toc@l(4) 6404; PC64LE-NEXT: xscvdpuxws 0, 0 6405; PC64LE-NEXT: xscvdpuxws 1, 1 6406; PC64LE-NEXT: mffprwz 3, 0 6407; PC64LE-NEXT: mffprwz 4, 1 6408; PC64LE-NEXT: mtvsrwz 34, 3 6409; PC64LE-NEXT: mtvsrwz 35, 4 6410; PC64LE-NEXT: vmrghw 2, 3, 2 6411; PC64LE-NEXT: blr 6412; 6413; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f32: 6414; PC64LE9: # %bb.0: # %entry 6415; PC64LE9-NEXT: addis 3, 2, .LCPI112_0@toc@ha 6416; PC64LE9-NEXT: lfs 0, .LCPI112_0@toc@l(3) 6417; PC64LE9-NEXT: xscvdpuxws 0, 0 6418; PC64LE9-NEXT: mffprwz 3, 0 6419; PC64LE9-NEXT: mtvsrws 34, 3 6420; PC64LE9-NEXT: addis 3, 2, .LCPI112_1@toc@ha 6421; PC64LE9-NEXT: lfs 0, .LCPI112_1@toc@l(3) 6422; PC64LE9-NEXT: xscvdpuxws 0, 0 6423; PC64LE9-NEXT: mffprwz 3, 0 6424; PC64LE9-NEXT: mtvsrws 35, 3 6425; PC64LE9-NEXT: vmrghw 2, 3, 2 6426; PC64LE9-NEXT: blr 6427entry: 6428 %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32( 6429 <2 x float><float 42.0, float 43.0>, 6430 metadata !"fpexcept.strict") #0 6431 ret <2 x i32> %result 6432} 6433 6434define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32() #0 { 6435; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f32: 6436; PC64LE: # %bb.0: # %entry 6437; PC64LE-NEXT: addis 3, 2, .LCPI113_0@toc@ha 6438; PC64LE-NEXT: addis 4, 2, .LCPI113_1@toc@ha 6439; PC64LE-NEXT: lfs 0, .LCPI113_0@toc@l(3) 6440; PC64LE-NEXT: lfs 1, .LCPI113_1@toc@l(4) 6441; PC64LE-NEXT: addis 3, 2, .LCPI113_3@toc@ha 6442; PC64LE-NEXT: lfs 2, .LCPI113_3@toc@l(3) 6443; PC64LE-NEXT: xscvdpuxws 0, 0 6444; PC64LE-NEXT: xscvdpuxws 1, 1 6445; PC64LE-NEXT: xscvdpuxws 2, 2 6446; PC64LE-NEXT: mffprwz 3, 0 6447; PC64LE-NEXT: mffprwz 4, 1 6448; PC64LE-NEXT: mtvsrwz 34, 3 6449; PC64LE-NEXT: addis 3, 2, .LCPI113_2@toc@ha 6450; PC64LE-NEXT: mtvsrwz 35, 4 6451; PC64LE-NEXT: addi 3, 3, .LCPI113_2@toc@l 6452; PC64LE-NEXT: mffprwz 4, 2 6453; PC64LE-NEXT: vmrghw 2, 3, 2 6454; PC64LE-NEXT: lvx 3, 0, 3 6455; PC64LE-NEXT: mtvsrwz 36, 4 6456; PC64LE-NEXT: vperm 2, 4, 2, 3 6457; PC64LE-NEXT: blr 6458; 6459; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f32: 6460; PC64LE9: # %bb.0: # %entry 6461; PC64LE9-NEXT: addis 3, 2, .LCPI113_0@toc@ha 6462; PC64LE9-NEXT: lfs 0, .LCPI113_0@toc@l(3) 6463; PC64LE9-NEXT: addis 3, 2, .LCPI113_1@toc@ha 6464; PC64LE9-NEXT: lfs 1, .LCPI113_1@toc@l(3) 6465; PC64LE9-NEXT: xscvdpuxws 0, 0 6466; PC64LE9-NEXT: mffprwz 3, 0 6467; PC64LE9-NEXT: xscvdpuxws 0, 1 6468; PC64LE9-NEXT: mtvsrws 34, 3 6469; PC64LE9-NEXT: mffprwz 3, 0 6470; PC64LE9-NEXT: mtvsrws 35, 3 6471; PC64LE9-NEXT: addis 3, 2, .LCPI113_2@toc@ha 6472; PC64LE9-NEXT: addi 3, 3, .LCPI113_2@toc@l 6473; PC64LE9-NEXT: vmrghw 2, 3, 2 6474; PC64LE9-NEXT: lxvx 35, 0, 3 6475; PC64LE9-NEXT: addis 3, 2, .LCPI113_3@toc@ha 6476; PC64LE9-NEXT: lfs 0, .LCPI113_3@toc@l(3) 6477; PC64LE9-NEXT: xscvdpuxws 0, 0 6478; PC64LE9-NEXT: mffprwz 3, 0 6479; PC64LE9-NEXT: mtvsrws 36, 3 6480; PC64LE9-NEXT: vperm 2, 4, 2, 3 6481; PC64LE9-NEXT: blr 6482entry: 6483 %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32( 6484 <3 x float><float 42.0, float 43.0, 6485 float 44.0>, 6486 metadata !"fpexcept.strict") #0 6487 ret <3 x i32> %result 6488} 6489 6490define <4 x i32> @constrained_vector_fptoui_v4i32_v4f32() #0 { 6491; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f32: 6492; PC64LE: # %bb.0: # %entry 6493; PC64LE-NEXT: addis 3, 2, .LCPI114_0@toc@ha 6494; PC64LE-NEXT: addi 3, 3, .LCPI114_0@toc@l 6495; PC64LE-NEXT: lvx 2, 0, 3 6496; PC64LE-NEXT: xvcvspuxws 34, 34 6497; PC64LE-NEXT: blr 6498; 6499; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f32: 6500; PC64LE9: # %bb.0: # %entry 6501; PC64LE9-NEXT: addis 3, 2, .LCPI114_0@toc@ha 6502; PC64LE9-NEXT: addi 3, 3, .LCPI114_0@toc@l 6503; PC64LE9-NEXT: lxvx 0, 0, 3 6504; PC64LE9-NEXT: xvcvspuxws 34, 0 6505; PC64LE9-NEXT: blr 6506entry: 6507 %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32( 6508 <4 x float><float 42.0, float 43.0, 6509 float 44.0, float 45.0>, 6510 metadata !"fpexcept.strict") #0 6511 ret <4 x i32> %result 6512} 6513 6514define <1 x i64> @constrained_vector_fptoui_v1i64_v1f32() #0 { 6515; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f32: 6516; PC64LE: # %bb.0: # %entry 6517; PC64LE-NEXT: addis 3, 2, .LCPI115_0@toc@ha 6518; PC64LE-NEXT: lfs 0, .LCPI115_0@toc@l(3) 6519; PC64LE-NEXT: xscvdpuxds 0, 0 6520; PC64LE-NEXT: mffprd 3, 0 6521; PC64LE-NEXT: blr 6522; 6523; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f32: 6524; PC64LE9: # %bb.0: # %entry 6525; PC64LE9-NEXT: addis 3, 2, .LCPI115_0@toc@ha 6526; PC64LE9-NEXT: lfs 0, .LCPI115_0@toc@l(3) 6527; PC64LE9-NEXT: xscvdpuxds 0, 0 6528; PC64LE9-NEXT: mffprd 3, 0 6529; PC64LE9-NEXT: blr 6530entry: 6531 %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32( 6532 <1 x float><float 42.0>, 6533 metadata !"fpexcept.strict") #0 6534 ret <1 x i64> %result 6535} 6536 6537define <2 x i64> @constrained_vector_fptoui_v2i64_v2f32() #0 { 6538; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f32: 6539; PC64LE: # %bb.0: # %entry 6540; PC64LE-NEXT: addis 3, 2, .LCPI116_0@toc@ha 6541; PC64LE-NEXT: addis 4, 2, .LCPI116_1@toc@ha 6542; PC64LE-NEXT: lfs 0, .LCPI116_0@toc@l(3) 6543; PC64LE-NEXT: lfs 1, .LCPI116_1@toc@l(4) 6544; PC64LE-NEXT: xscvdpuxds 0, 0 6545; PC64LE-NEXT: xscvdpuxds 1, 1 6546; PC64LE-NEXT: mffprd 3, 0 6547; PC64LE-NEXT: mffprd 4, 1 6548; PC64LE-NEXT: mtfprd 0, 3 6549; PC64LE-NEXT: mtfprd 1, 4 6550; PC64LE-NEXT: xxmrghd 34, 1, 0 6551; PC64LE-NEXT: blr 6552; 6553; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f32: 6554; PC64LE9: # %bb.0: # %entry 6555; PC64LE9-NEXT: addis 3, 2, .LCPI116_0@toc@ha 6556; PC64LE9-NEXT: addis 4, 2, .LCPI116_1@toc@ha 6557; PC64LE9-NEXT: lfs 0, .LCPI116_0@toc@l(3) 6558; PC64LE9-NEXT: xscvdpuxds 0, 0 6559; PC64LE9-NEXT: mffprd 3, 0 6560; PC64LE9-NEXT: lfs 0, .LCPI116_1@toc@l(4) 6561; PC64LE9-NEXT: xscvdpuxds 0, 0 6562; PC64LE9-NEXT: mffprd 4, 0 6563; PC64LE9-NEXT: mtvsrdd 34, 4, 3 6564; PC64LE9-NEXT: blr 6565entry: 6566 %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32( 6567 <2 x float><float 42.0, float 43.0>, 6568 metadata !"fpexcept.strict") #0 6569 ret <2 x i64> %result 6570} 6571 6572define <3 x i64> @constrained_vector_fptoui_v3i64_v3f32() #0 { 6573; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f32: 6574; PC64LE: # %bb.0: # %entry 6575; PC64LE-NEXT: addis 3, 2, .LCPI117_0@toc@ha 6576; PC64LE-NEXT: addis 4, 2, .LCPI117_1@toc@ha 6577; PC64LE-NEXT: addis 5, 2, .LCPI117_2@toc@ha 6578; PC64LE-NEXT: lfs 0, .LCPI117_0@toc@l(3) 6579; PC64LE-NEXT: lfs 1, .LCPI117_1@toc@l(4) 6580; PC64LE-NEXT: lfs 2, .LCPI117_2@toc@l(5) 6581; PC64LE-NEXT: xscvdpuxds 0, 0 6582; PC64LE-NEXT: xscvdpuxds 1, 1 6583; PC64LE-NEXT: xscvdpuxds 2, 2 6584; PC64LE-NEXT: mffprd 3, 0 6585; PC64LE-NEXT: mffprd 4, 1 6586; PC64LE-NEXT: mffprd 5, 2 6587; PC64LE-NEXT: blr 6588; 6589; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f32: 6590; PC64LE9: # %bb.0: # %entry 6591; PC64LE9-NEXT: addis 3, 2, .LCPI117_0@toc@ha 6592; PC64LE9-NEXT: addis 4, 2, .LCPI117_1@toc@ha 6593; PC64LE9-NEXT: addis 5, 2, .LCPI117_2@toc@ha 6594; PC64LE9-NEXT: lfs 0, .LCPI117_0@toc@l(3) 6595; PC64LE9-NEXT: xscvdpuxds 0, 0 6596; PC64LE9-NEXT: mffprd 3, 0 6597; PC64LE9-NEXT: lfs 0, .LCPI117_1@toc@l(4) 6598; PC64LE9-NEXT: xscvdpuxds 0, 0 6599; PC64LE9-NEXT: mffprd 4, 0 6600; PC64LE9-NEXT: lfs 0, .LCPI117_2@toc@l(5) 6601; PC64LE9-NEXT: xscvdpuxds 0, 0 6602; PC64LE9-NEXT: mffprd 5, 0 6603; PC64LE9-NEXT: blr 6604entry: 6605 %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32( 6606 <3 x float><float 42.0, float 43.0, 6607 float 44.0>, 6608 metadata !"fpexcept.strict") #0 6609 ret <3 x i64> %result 6610} 6611 6612define <4 x i64> @constrained_vector_fptoui_v4i64_v4f32() #0 { 6613; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f32: 6614; PC64LE: # %bb.0: # %entry 6615; PC64LE-NEXT: addis 3, 2, .LCPI118_0@toc@ha 6616; PC64LE-NEXT: addis 4, 2, .LCPI118_1@toc@ha 6617; PC64LE-NEXT: lfs 0, .LCPI118_0@toc@l(3) 6618; PC64LE-NEXT: addis 3, 2, .LCPI118_2@toc@ha 6619; PC64LE-NEXT: lfs 1, .LCPI118_1@toc@l(4) 6620; PC64LE-NEXT: addis 4, 2, .LCPI118_3@toc@ha 6621; PC64LE-NEXT: lfs 2, .LCPI118_2@toc@l(3) 6622; PC64LE-NEXT: lfs 3, .LCPI118_3@toc@l(4) 6623; PC64LE-NEXT: xscvdpuxds 0, 0 6624; PC64LE-NEXT: xscvdpuxds 1, 1 6625; PC64LE-NEXT: xscvdpuxds 2, 2 6626; PC64LE-NEXT: xscvdpuxds 3, 3 6627; PC64LE-NEXT: mffprd 3, 0 6628; PC64LE-NEXT: mffprd 4, 1 6629; PC64LE-NEXT: mtfprd 0, 3 6630; PC64LE-NEXT: mffprd 3, 2 6631; PC64LE-NEXT: mtfprd 1, 4 6632; PC64LE-NEXT: mffprd 4, 3 6633; PC64LE-NEXT: mtfprd 2, 3 6634; PC64LE-NEXT: xxmrghd 34, 1, 0 6635; PC64LE-NEXT: mtfprd 3, 4 6636; PC64LE-NEXT: xxmrghd 35, 3, 2 6637; PC64LE-NEXT: blr 6638; 6639; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f32: 6640; PC64LE9: # %bb.0: # %entry 6641; PC64LE9-NEXT: addis 3, 2, .LCPI118_0@toc@ha 6642; PC64LE9-NEXT: addis 4, 2, .LCPI118_1@toc@ha 6643; PC64LE9-NEXT: lfs 0, .LCPI118_0@toc@l(3) 6644; PC64LE9-NEXT: xscvdpuxds 0, 0 6645; PC64LE9-NEXT: mffprd 3, 0 6646; PC64LE9-NEXT: lfs 0, .LCPI118_1@toc@l(4) 6647; PC64LE9-NEXT: xscvdpuxds 0, 0 6648; PC64LE9-NEXT: mffprd 4, 0 6649; PC64LE9-NEXT: mtvsrdd 34, 4, 3 6650; PC64LE9-NEXT: addis 3, 2, .LCPI118_2@toc@ha 6651; PC64LE9-NEXT: addis 4, 2, .LCPI118_3@toc@ha 6652; PC64LE9-NEXT: lfs 0, .LCPI118_2@toc@l(3) 6653; PC64LE9-NEXT: xscvdpuxds 0, 0 6654; PC64LE9-NEXT: mffprd 3, 0 6655; PC64LE9-NEXT: lfs 0, .LCPI118_3@toc@l(4) 6656; PC64LE9-NEXT: xscvdpuxds 0, 0 6657; PC64LE9-NEXT: mffprd 4, 0 6658; PC64LE9-NEXT: mtvsrdd 35, 4, 3 6659; PC64LE9-NEXT: blr 6660entry: 6661 %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32( 6662 <4 x float><float 42.0, float 43.0, 6663 float 44.0, float 45.0>, 6664 metadata !"fpexcept.strict") #0 6665 ret <4 x i64> %result 6666} 6667 6668define <1 x i32> @constrained_vector_fptoui_v1i32_v1f64() #0 { 6669; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f64: 6670; PC64LE: # %bb.0: # %entry 6671; PC64LE-NEXT: addis 3, 2, .LCPI119_0@toc@ha 6672; PC64LE-NEXT: lfd 0, .LCPI119_0@toc@l(3) 6673; PC64LE-NEXT: xscvdpuxws 0, 0 6674; PC64LE-NEXT: mffprwz 3, 0 6675; PC64LE-NEXT: blr 6676; 6677; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f64: 6678; PC64LE9: # %bb.0: # %entry 6679; PC64LE9-NEXT: addis 3, 2, .LCPI119_0@toc@ha 6680; PC64LE9-NEXT: lfd 0, .LCPI119_0@toc@l(3) 6681; PC64LE9-NEXT: xscvdpuxws 0, 0 6682; PC64LE9-NEXT: mffprwz 3, 0 6683; PC64LE9-NEXT: blr 6684entry: 6685 %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64( 6686 <1 x double><double 42.1>, 6687 metadata !"fpexcept.strict") #0 6688 ret <1 x i32> %result 6689} 6690 6691define <2 x i32> @constrained_vector_fptoui_v2i32_v2f64() #0 { 6692; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f64: 6693; PC64LE: # %bb.0: # %entry 6694; PC64LE-NEXT: addis 3, 2, .LCPI120_0@toc@ha 6695; PC64LE-NEXT: addis 4, 2, .LCPI120_1@toc@ha 6696; PC64LE-NEXT: lfd 0, .LCPI120_0@toc@l(3) 6697; PC64LE-NEXT: lfd 1, .LCPI120_1@toc@l(4) 6698; PC64LE-NEXT: xscvdpuxws 0, 0 6699; PC64LE-NEXT: xscvdpuxws 1, 1 6700; PC64LE-NEXT: mffprwz 3, 0 6701; PC64LE-NEXT: mffprwz 4, 1 6702; PC64LE-NEXT: mtvsrwz 34, 3 6703; PC64LE-NEXT: mtvsrwz 35, 4 6704; PC64LE-NEXT: vmrghw 2, 3, 2 6705; PC64LE-NEXT: blr 6706; 6707; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f64: 6708; PC64LE9: # %bb.0: # %entry 6709; PC64LE9-NEXT: addis 3, 2, .LCPI120_0@toc@ha 6710; PC64LE9-NEXT: lfd 0, .LCPI120_0@toc@l(3) 6711; PC64LE9-NEXT: xscvdpuxws 0, 0 6712; PC64LE9-NEXT: mffprwz 3, 0 6713; PC64LE9-NEXT: mtvsrws 34, 3 6714; PC64LE9-NEXT: addis 3, 2, .LCPI120_1@toc@ha 6715; PC64LE9-NEXT: lfd 0, .LCPI120_1@toc@l(3) 6716; PC64LE9-NEXT: xscvdpuxws 0, 0 6717; PC64LE9-NEXT: mffprwz 3, 0 6718; PC64LE9-NEXT: mtvsrws 35, 3 6719; PC64LE9-NEXT: vmrghw 2, 3, 2 6720; PC64LE9-NEXT: blr 6721entry: 6722 %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64( 6723 <2 x double><double 42.1, double 42.2>, 6724 metadata !"fpexcept.strict") #0 6725 ret <2 x i32> %result 6726} 6727 6728define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64() #0 { 6729; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f64: 6730; PC64LE: # %bb.0: # %entry 6731; PC64LE-NEXT: addis 3, 2, .LCPI121_0@toc@ha 6732; PC64LE-NEXT: addis 4, 2, .LCPI121_1@toc@ha 6733; PC64LE-NEXT: lfd 0, .LCPI121_0@toc@l(3) 6734; PC64LE-NEXT: lfd 1, .LCPI121_1@toc@l(4) 6735; PC64LE-NEXT: addis 3, 2, .LCPI121_3@toc@ha 6736; PC64LE-NEXT: lfd 2, .LCPI121_3@toc@l(3) 6737; PC64LE-NEXT: xscvdpuxws 0, 0 6738; PC64LE-NEXT: xscvdpuxws 1, 1 6739; PC64LE-NEXT: xscvdpuxws 2, 2 6740; PC64LE-NEXT: mffprwz 3, 0 6741; PC64LE-NEXT: mffprwz 4, 1 6742; PC64LE-NEXT: mtvsrwz 34, 3 6743; PC64LE-NEXT: addis 3, 2, .LCPI121_2@toc@ha 6744; PC64LE-NEXT: mtvsrwz 35, 4 6745; PC64LE-NEXT: addi 3, 3, .LCPI121_2@toc@l 6746; PC64LE-NEXT: mffprwz 4, 2 6747; PC64LE-NEXT: vmrghw 2, 3, 2 6748; PC64LE-NEXT: lvx 3, 0, 3 6749; PC64LE-NEXT: mtvsrwz 36, 4 6750; PC64LE-NEXT: vperm 2, 4, 2, 3 6751; PC64LE-NEXT: blr 6752; 6753; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f64: 6754; PC64LE9: # %bb.0: # %entry 6755; PC64LE9-NEXT: addis 3, 2, .LCPI121_0@toc@ha 6756; PC64LE9-NEXT: lfd 0, .LCPI121_0@toc@l(3) 6757; PC64LE9-NEXT: xscvdpuxws 0, 0 6758; PC64LE9-NEXT: mffprwz 3, 0 6759; PC64LE9-NEXT: mtvsrws 34, 3 6760; PC64LE9-NEXT: addis 3, 2, .LCPI121_1@toc@ha 6761; PC64LE9-NEXT: lfd 0, .LCPI121_1@toc@l(3) 6762; PC64LE9-NEXT: xscvdpuxws 0, 0 6763; PC64LE9-NEXT: mffprwz 3, 0 6764; PC64LE9-NEXT: mtvsrws 35, 3 6765; PC64LE9-NEXT: addis 3, 2, .LCPI121_2@toc@ha 6766; PC64LE9-NEXT: addi 3, 3, .LCPI121_2@toc@l 6767; PC64LE9-NEXT: vmrghw 2, 3, 2 6768; PC64LE9-NEXT: lxvx 35, 0, 3 6769; PC64LE9-NEXT: addis 3, 2, .LCPI121_3@toc@ha 6770; PC64LE9-NEXT: lfd 0, .LCPI121_3@toc@l(3) 6771; PC64LE9-NEXT: xscvdpuxws 0, 0 6772; PC64LE9-NEXT: mffprwz 3, 0 6773; PC64LE9-NEXT: mtvsrws 36, 3 6774; PC64LE9-NEXT: vperm 2, 4, 2, 3 6775; PC64LE9-NEXT: blr 6776entry: 6777 %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64( 6778 <3 x double><double 42.1, double 42.2, 6779 double 42.3>, 6780 metadata !"fpexcept.strict") #0 6781 ret <3 x i32> %result 6782} 6783 6784define <4 x i32> @constrained_vector_fptoui_v4i32_v4f64() #0 { 6785; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f64: 6786; PC64LE: # %bb.0: # %entry 6787; PC64LE-NEXT: addis 3, 2, .LCPI122_0@toc@ha 6788; PC64LE-NEXT: addis 4, 2, .LCPI122_1@toc@ha 6789; PC64LE-NEXT: addis 5, 2, .LCPI122_2@toc@ha 6790; PC64LE-NEXT: lfd 0, .LCPI122_0@toc@l(3) 6791; PC64LE-NEXT: addis 3, 2, .LCPI122_3@toc@ha 6792; PC64LE-NEXT: lfd 1, .LCPI122_1@toc@l(4) 6793; PC64LE-NEXT: lfd 2, .LCPI122_2@toc@l(5) 6794; PC64LE-NEXT: lfd 3, .LCPI122_3@toc@l(3) 6795; PC64LE-NEXT: xscvdpuxws 0, 0 6796; PC64LE-NEXT: xscvdpuxws 1, 1 6797; PC64LE-NEXT: xscvdpuxws 2, 2 6798; PC64LE-NEXT: xscvdpuxws 3, 3 6799; PC64LE-NEXT: mffprwz 3, 0 6800; PC64LE-NEXT: mffprwz 4, 1 6801; PC64LE-NEXT: mffprwz 5, 2 6802; PC64LE-NEXT: mffprwz 6, 3 6803; PC64LE-NEXT: rldimi 4, 3, 32, 0 6804; PC64LE-NEXT: mtfprd 0, 4 6805; PC64LE-NEXT: rldimi 6, 5, 32, 0 6806; PC64LE-NEXT: mtfprd 1, 6 6807; PC64LE-NEXT: xxmrghd 34, 1, 0 6808; PC64LE-NEXT: blr 6809; 6810; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f64: 6811; PC64LE9: # %bb.0: # %entry 6812; PC64LE9-NEXT: addis 3, 2, .LCPI122_0@toc@ha 6813; PC64LE9-NEXT: addis 4, 2, .LCPI122_1@toc@ha 6814; PC64LE9-NEXT: addis 5, 2, .LCPI122_3@toc@ha 6815; PC64LE9-NEXT: lfd 0, .LCPI122_0@toc@l(3) 6816; PC64LE9-NEXT: xscvdpuxws 0, 0 6817; PC64LE9-NEXT: mffprwz 3, 0 6818; PC64LE9-NEXT: lfd 0, .LCPI122_1@toc@l(4) 6819; PC64LE9-NEXT: xscvdpuxws 0, 0 6820; PC64LE9-NEXT: mffprwz 4, 0 6821; PC64LE9-NEXT: rldimi 4, 3, 32, 0 6822; PC64LE9-NEXT: addis 3, 2, .LCPI122_2@toc@ha 6823; PC64LE9-NEXT: lfd 0, .LCPI122_2@toc@l(3) 6824; PC64LE9-NEXT: xscvdpuxws 0, 0 6825; PC64LE9-NEXT: mffprwz 3, 0 6826; PC64LE9-NEXT: lfd 0, .LCPI122_3@toc@l(5) 6827; PC64LE9-NEXT: xscvdpuxws 0, 0 6828; PC64LE9-NEXT: mffprwz 5, 0 6829; PC64LE9-NEXT: rldimi 5, 3, 32, 0 6830; PC64LE9-NEXT: mtvsrdd 34, 5, 4 6831; PC64LE9-NEXT: blr 6832entry: 6833 %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64( 6834 <4 x double><double 42.1, double 42.2, 6835 double 42.3, double 42.4>, 6836 metadata !"fpexcept.strict") #0 6837 ret <4 x i32> %result 6838} 6839 6840define <1 x i64> @constrained_vector_fptoui_v1i64_v1f64() #0 { 6841; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f64: 6842; PC64LE: # %bb.0: # %entry 6843; PC64LE-NEXT: addis 3, 2, .LCPI123_0@toc@ha 6844; PC64LE-NEXT: lfd 0, .LCPI123_0@toc@l(3) 6845; PC64LE-NEXT: xscvdpuxds 0, 0 6846; PC64LE-NEXT: mffprd 3, 0 6847; PC64LE-NEXT: blr 6848; 6849; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f64: 6850; PC64LE9: # %bb.0: # %entry 6851; PC64LE9-NEXT: addis 3, 2, .LCPI123_0@toc@ha 6852; PC64LE9-NEXT: lfd 0, .LCPI123_0@toc@l(3) 6853; PC64LE9-NEXT: xscvdpuxds 0, 0 6854; PC64LE9-NEXT: mffprd 3, 0 6855; PC64LE9-NEXT: blr 6856entry: 6857 %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64( 6858 <1 x double><double 42.1>, 6859 metadata !"fpexcept.strict") #0 6860 ret <1 x i64> %result 6861} 6862 6863define <2 x i64> @constrained_vector_fptoui_v2i64_v2f64() #0 { 6864; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f64: 6865; PC64LE: # %bb.0: # %entry 6866; PC64LE-NEXT: addis 3, 2, .LCPI124_0@toc@ha 6867; PC64LE-NEXT: addi 3, 3, .LCPI124_0@toc@l 6868; PC64LE-NEXT: lxvd2x 0, 0, 3 6869; PC64LE-NEXT: xxswapd 0, 0 6870; PC64LE-NEXT: xvcvdpuxds 34, 0 6871; PC64LE-NEXT: blr 6872; 6873; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f64: 6874; PC64LE9: # %bb.0: # %entry 6875; PC64LE9-NEXT: addis 3, 2, .LCPI124_0@toc@ha 6876; PC64LE9-NEXT: addi 3, 3, .LCPI124_0@toc@l 6877; PC64LE9-NEXT: lxvx 0, 0, 3 6878; PC64LE9-NEXT: xvcvdpuxds 34, 0 6879; PC64LE9-NEXT: blr 6880entry: 6881 %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64( 6882 <2 x double><double 42.1, double 42.2>, 6883 metadata !"fpexcept.strict") #0 6884 ret <2 x i64> %result 6885} 6886 6887define <3 x i64> @constrained_vector_fptoui_v3i64_v3f64() #0 { 6888; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f64: 6889; PC64LE: # %bb.0: # %entry 6890; PC64LE-NEXT: addis 3, 2, .LCPI125_0@toc@ha 6891; PC64LE-NEXT: addis 4, 2, .LCPI125_1@toc@ha 6892; PC64LE-NEXT: addis 5, 2, .LCPI125_2@toc@ha 6893; PC64LE-NEXT: lfd 0, .LCPI125_0@toc@l(3) 6894; PC64LE-NEXT: lfd 1, .LCPI125_1@toc@l(4) 6895; PC64LE-NEXT: lfd 2, .LCPI125_2@toc@l(5) 6896; PC64LE-NEXT: xscvdpuxds 0, 0 6897; PC64LE-NEXT: xscvdpuxds 1, 1 6898; PC64LE-NEXT: xscvdpuxds 2, 2 6899; PC64LE-NEXT: mffprd 3, 0 6900; PC64LE-NEXT: mffprd 4, 1 6901; PC64LE-NEXT: mffprd 5, 2 6902; PC64LE-NEXT: blr 6903; 6904; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f64: 6905; PC64LE9: # %bb.0: # %entry 6906; PC64LE9-NEXT: addis 3, 2, .LCPI125_0@toc@ha 6907; PC64LE9-NEXT: addis 4, 2, .LCPI125_1@toc@ha 6908; PC64LE9-NEXT: addis 5, 2, .LCPI125_2@toc@ha 6909; PC64LE9-NEXT: lfd 0, .LCPI125_0@toc@l(3) 6910; PC64LE9-NEXT: xscvdpuxds 0, 0 6911; PC64LE9-NEXT: mffprd 3, 0 6912; PC64LE9-NEXT: lfd 0, .LCPI125_1@toc@l(4) 6913; PC64LE9-NEXT: xscvdpuxds 0, 0 6914; PC64LE9-NEXT: mffprd 4, 0 6915; PC64LE9-NEXT: lfd 0, .LCPI125_2@toc@l(5) 6916; PC64LE9-NEXT: xscvdpuxds 0, 0 6917; PC64LE9-NEXT: mffprd 5, 0 6918; PC64LE9-NEXT: blr 6919entry: 6920 %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64( 6921 <3 x double><double 42.1, double 42.2, 6922 double 42.3>, 6923 metadata !"fpexcept.strict") #0 6924 ret <3 x i64> %result 6925} 6926 6927define <4 x i64> @constrained_vector_fptoui_v4i64_v4f64() #0 { 6928; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f64: 6929; PC64LE: # %bb.0: # %entry 6930; PC64LE-NEXT: addis 3, 2, .LCPI126_0@toc@ha 6931; PC64LE-NEXT: addis 4, 2, .LCPI126_1@toc@ha 6932; PC64LE-NEXT: addi 3, 3, .LCPI126_0@toc@l 6933; PC64LE-NEXT: lxvd2x 0, 0, 3 6934; PC64LE-NEXT: addi 3, 4, .LCPI126_1@toc@l 6935; PC64LE-NEXT: lxvd2x 1, 0, 3 6936; PC64LE-NEXT: xxswapd 0, 0 6937; PC64LE-NEXT: xxswapd 1, 1 6938; PC64LE-NEXT: xvcvdpuxds 35, 0 6939; PC64LE-NEXT: xvcvdpuxds 34, 1 6940; PC64LE-NEXT: blr 6941; 6942; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f64: 6943; PC64LE9: # %bb.0: # %entry 6944; PC64LE9-NEXT: addis 3, 2, .LCPI126_0@toc@ha 6945; PC64LE9-NEXT: addi 3, 3, .LCPI126_0@toc@l 6946; PC64LE9-NEXT: lxvx 0, 0, 3 6947; PC64LE9-NEXT: addis 3, 2, .LCPI126_1@toc@ha 6948; PC64LE9-NEXT: addi 3, 3, .LCPI126_1@toc@l 6949; PC64LE9-NEXT: xvcvdpuxds 35, 0 6950; PC64LE9-NEXT: lxvx 0, 0, 3 6951; PC64LE9-NEXT: xvcvdpuxds 34, 0 6952; PC64LE9-NEXT: blr 6953entry: 6954 %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64( 6955 <4 x double><double 42.1, double 42.2, 6956 double 42.3, double 42.4>, 6957 metadata !"fpexcept.strict") #0 6958 ret <4 x i64> %result 6959} 6960 6961define <1 x float> @constrained_vector_fptrunc_v1f64() #0 { 6962; PC64LE-LABEL: constrained_vector_fptrunc_v1f64: 6963; PC64LE: # %bb.0: # %entry 6964; PC64LE-NEXT: addis 3, 2, .LCPI127_0@toc@ha 6965; PC64LE-NEXT: lfd 0, .LCPI127_0@toc@l(3) 6966; PC64LE-NEXT: xsrsp 1, 0 6967; PC64LE-NEXT: blr 6968; 6969; PC64LE9-LABEL: constrained_vector_fptrunc_v1f64: 6970; PC64LE9: # %bb.0: # %entry 6971; PC64LE9-NEXT: addis 3, 2, .LCPI127_0@toc@ha 6972; PC64LE9-NEXT: lfd 0, .LCPI127_0@toc@l(3) 6973; PC64LE9-NEXT: xsrsp 1, 0 6974; PC64LE9-NEXT: blr 6975entry: 6976 %result = call <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64( 6977 <1 x double><double 42.1>, 6978 metadata !"round.dynamic", 6979 metadata !"fpexcept.strict") #1 6980 ret <1 x float> %result 6981} 6982 6983define <2 x float> @constrained_vector_fptrunc_v2f64() #0 { 6984; PC64LE-LABEL: constrained_vector_fptrunc_v2f64: 6985; PC64LE: # %bb.0: # %entry 6986; PC64LE-NEXT: addis 3, 2, .LCPI128_0@toc@ha 6987; PC64LE-NEXT: addis 4, 2, .LCPI128_1@toc@ha 6988; PC64LE-NEXT: lfd 0, .LCPI128_0@toc@l(3) 6989; PC64LE-NEXT: lfd 1, .LCPI128_1@toc@l(4) 6990; PC64LE-NEXT: xsrsp 0, 0 6991; PC64LE-NEXT: xsrsp 1, 1 6992; PC64LE-NEXT: xscvdpspn 0, 0 6993; PC64LE-NEXT: xscvdpspn 1, 1 6994; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 6995; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 6996; PC64LE-NEXT: vmrghw 2, 3, 2 6997; PC64LE-NEXT: blr 6998; 6999; PC64LE9-LABEL: constrained_vector_fptrunc_v2f64: 7000; PC64LE9: # %bb.0: # %entry 7001; PC64LE9-NEXT: addis 3, 2, .LCPI128_0@toc@ha 7002; PC64LE9-NEXT: lfd 0, .LCPI128_0@toc@l(3) 7003; PC64LE9-NEXT: addis 3, 2, .LCPI128_1@toc@ha 7004; PC64LE9-NEXT: xsrsp 0, 0 7005; PC64LE9-NEXT: xscvdpspn 0, 0 7006; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 7007; PC64LE9-NEXT: lfd 0, .LCPI128_1@toc@l(3) 7008; PC64LE9-NEXT: xsrsp 0, 0 7009; PC64LE9-NEXT: xscvdpspn 0, 0 7010; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 7011; PC64LE9-NEXT: vmrghw 2, 3, 2 7012; PC64LE9-NEXT: blr 7013entry: 7014 %result = call <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64( 7015 <2 x double><double 42.1, double 42.2>, 7016 metadata !"round.dynamic", 7017 metadata !"fpexcept.strict") #1 7018 ret <2 x float> %result 7019} 7020 7021define <3 x float> @constrained_vector_fptrunc_v3f64() #0 { 7022; PC64LE-LABEL: constrained_vector_fptrunc_v3f64: 7023; PC64LE: # %bb.0: # %entry 7024; PC64LE-NEXT: addis 3, 2, .LCPI129_0@toc@ha 7025; PC64LE-NEXT: addis 4, 2, .LCPI129_1@toc@ha 7026; PC64LE-NEXT: lfd 0, .LCPI129_0@toc@l(3) 7027; PC64LE-NEXT: lfd 1, .LCPI129_1@toc@l(4) 7028; PC64LE-NEXT: addis 3, 2, .LCPI129_3@toc@ha 7029; PC64LE-NEXT: xsrsp 0, 0 7030; PC64LE-NEXT: lfd 2, .LCPI129_3@toc@l(3) 7031; PC64LE-NEXT: addis 3, 2, .LCPI129_2@toc@ha 7032; PC64LE-NEXT: xsrsp 1, 1 7033; PC64LE-NEXT: addi 3, 3, .LCPI129_2@toc@l 7034; PC64LE-NEXT: xsrsp 2, 2 7035; PC64LE-NEXT: xscvdpspn 0, 0 7036; PC64LE-NEXT: xscvdpspn 1, 1 7037; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 7038; PC64LE-NEXT: xscvdpspn 0, 2 7039; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 7040; PC64LE-NEXT: vmrghw 2, 3, 2 7041; PC64LE-NEXT: lvx 3, 0, 3 7042; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 7043; PC64LE-NEXT: vperm 2, 4, 2, 3 7044; PC64LE-NEXT: blr 7045; 7046; PC64LE9-LABEL: constrained_vector_fptrunc_v3f64: 7047; PC64LE9: # %bb.0: # %entry 7048; PC64LE9-NEXT: addis 3, 2, .LCPI129_0@toc@ha 7049; PC64LE9-NEXT: lfd 0, .LCPI129_0@toc@l(3) 7050; PC64LE9-NEXT: addis 3, 2, .LCPI129_1@toc@ha 7051; PC64LE9-NEXT: xsrsp 0, 0 7052; PC64LE9-NEXT: xscvdpspn 0, 0 7053; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 7054; PC64LE9-NEXT: lfd 0, .LCPI129_1@toc@l(3) 7055; PC64LE9-NEXT: addis 3, 2, .LCPI129_2@toc@ha 7056; PC64LE9-NEXT: addi 3, 3, .LCPI129_2@toc@l 7057; PC64LE9-NEXT: xsrsp 0, 0 7058; PC64LE9-NEXT: xscvdpspn 0, 0 7059; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 7060; PC64LE9-NEXT: vmrghw 2, 3, 2 7061; PC64LE9-NEXT: lxvx 35, 0, 3 7062; PC64LE9-NEXT: addis 3, 2, .LCPI129_3@toc@ha 7063; PC64LE9-NEXT: lfd 0, .LCPI129_3@toc@l(3) 7064; PC64LE9-NEXT: xsrsp 0, 0 7065; PC64LE9-NEXT: xscvdpspn 0, 0 7066; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 7067; PC64LE9-NEXT: vperm 2, 4, 2, 3 7068; PC64LE9-NEXT: blr 7069entry: 7070 %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64( 7071 <3 x double><double 42.1, double 42.2, 7072 double 42.3>, 7073 metadata !"round.dynamic", 7074 metadata !"fpexcept.strict") #1 7075 ret <3 x float> %result 7076} 7077 7078define <4 x float> @constrained_vector_fptrunc_v4f64() #0 { 7079; PC64LE-LABEL: constrained_vector_fptrunc_v4f64: 7080; PC64LE: # %bb.0: # %entry 7081; PC64LE-NEXT: addis 3, 2, .LCPI130_0@toc@ha 7082; PC64LE-NEXT: addis 4, 2, .LCPI130_1@toc@ha 7083; PC64LE-NEXT: addis 5, 2, .LCPI130_2@toc@ha 7084; PC64LE-NEXT: addis 6, 2, .LCPI130_3@toc@ha 7085; PC64LE-NEXT: lfd 0, .LCPI130_0@toc@l(3) 7086; PC64LE-NEXT: lfd 1, .LCPI130_1@toc@l(4) 7087; PC64LE-NEXT: lfd 2, .LCPI130_2@toc@l(5) 7088; PC64LE-NEXT: lfd 3, .LCPI130_3@toc@l(6) 7089; PC64LE-NEXT: xxmrghd 0, 1, 0 7090; PC64LE-NEXT: xxmrghd 1, 3, 2 7091; PC64LE-NEXT: xvcvdpsp 34, 0 7092; PC64LE-NEXT: xvcvdpsp 35, 1 7093; PC64LE-NEXT: vmrgew 2, 3, 2 7094; PC64LE-NEXT: blr 7095; 7096; PC64LE9-LABEL: constrained_vector_fptrunc_v4f64: 7097; PC64LE9: # %bb.0: # %entry 7098; PC64LE9-NEXT: addis 3, 2, .LCPI130_0@toc@ha 7099; PC64LE9-NEXT: lfd 0, .LCPI130_0@toc@l(3) 7100; PC64LE9-NEXT: addis 3, 2, .LCPI130_1@toc@ha 7101; PC64LE9-NEXT: lfd 1, .LCPI130_1@toc@l(3) 7102; PC64LE9-NEXT: addis 3, 2, .LCPI130_2@toc@ha 7103; PC64LE9-NEXT: xxmrghd 0, 1, 0 7104; PC64LE9-NEXT: xvcvdpsp 34, 0 7105; PC64LE9-NEXT: lfd 0, .LCPI130_2@toc@l(3) 7106; PC64LE9-NEXT: addis 3, 2, .LCPI130_3@toc@ha 7107; PC64LE9-NEXT: lfd 1, .LCPI130_3@toc@l(3) 7108; PC64LE9-NEXT: xxmrghd 0, 1, 0 7109; PC64LE9-NEXT: xvcvdpsp 35, 0 7110; PC64LE9-NEXT: vmrgew 2, 3, 2 7111; PC64LE9-NEXT: blr 7112entry: 7113 %result = call <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64( 7114 <4 x double><double 42.1, double 42.2, 7115 double 42.3, double 42.4>, 7116 metadata !"round.dynamic", 7117 metadata !"fpexcept.strict") #1 7118 ret <4 x float> %result 7119} 7120 7121define <1 x double> @constrained_vector_fpext_v1f32() #0 { 7122; PC64LE-LABEL: constrained_vector_fpext_v1f32: 7123; PC64LE: # %bb.0: # %entry 7124; PC64LE-NEXT: addis 3, 2, .LCPI131_0@toc@ha 7125; PC64LE-NEXT: lfs 1, .LCPI131_0@toc@l(3) 7126; PC64LE-NEXT: blr 7127; 7128; PC64LE9-LABEL: constrained_vector_fpext_v1f32: 7129; PC64LE9: # %bb.0: # %entry 7130; PC64LE9-NEXT: addis 3, 2, .LCPI131_0@toc@ha 7131; PC64LE9-NEXT: lfs 1, .LCPI131_0@toc@l(3) 7132; PC64LE9-NEXT: blr 7133entry: 7134 %result = call <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32( 7135 <1 x float><float 42.0>, 7136 metadata !"fpexcept.strict") #1 7137 ret <1 x double> %result 7138} 7139 7140define <2 x double> @constrained_vector_fpext_v2f32() #0 { 7141; PC64LE-LABEL: constrained_vector_fpext_v2f32: 7142; PC64LE: # %bb.0: # %entry 7143; PC64LE-NEXT: addis 3, 2, .LCPI132_0@toc@ha 7144; PC64LE-NEXT: addis 4, 2, .LCPI132_1@toc@ha 7145; PC64LE-NEXT: lfs 0, .LCPI132_0@toc@l(3) 7146; PC64LE-NEXT: lfs 1, .LCPI132_1@toc@l(4) 7147; PC64LE-NEXT: xxmrghd 34, 1, 0 7148; PC64LE-NEXT: blr 7149; 7150; PC64LE9-LABEL: constrained_vector_fpext_v2f32: 7151; PC64LE9: # %bb.0: # %entry 7152; PC64LE9-NEXT: addis 3, 2, .LCPI132_0@toc@ha 7153; PC64LE9-NEXT: lfs 0, .LCPI132_0@toc@l(3) 7154; PC64LE9-NEXT: addis 3, 2, .LCPI132_1@toc@ha 7155; PC64LE9-NEXT: lfs 1, .LCPI132_1@toc@l(3) 7156; PC64LE9-NEXT: xxmrghd 34, 1, 0 7157; PC64LE9-NEXT: blr 7158entry: 7159 %result = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32( 7160 <2 x float><float 42.0, float 43.0>, 7161 metadata !"fpexcept.strict") #1 7162 ret <2 x double> %result 7163} 7164 7165define <3 x double> @constrained_vector_fpext_v3f32() #0 { 7166; PC64LE-LABEL: constrained_vector_fpext_v3f32: 7167; PC64LE: # %bb.0: # %entry 7168; PC64LE-NEXT: addis 3, 2, .LCPI133_0@toc@ha 7169; PC64LE-NEXT: addis 4, 2, .LCPI133_1@toc@ha 7170; PC64LE-NEXT: addis 5, 2, .LCPI133_2@toc@ha 7171; PC64LE-NEXT: lfs 3, .LCPI133_0@toc@l(3) 7172; PC64LE-NEXT: lfs 2, .LCPI133_1@toc@l(4) 7173; PC64LE-NEXT: lfs 1, .LCPI133_2@toc@l(5) 7174; PC64LE-NEXT: blr 7175; 7176; PC64LE9-LABEL: constrained_vector_fpext_v3f32: 7177; PC64LE9: # %bb.0: # %entry 7178; PC64LE9-NEXT: addis 3, 2, .LCPI133_0@toc@ha 7179; PC64LE9-NEXT: lfs 3, .LCPI133_0@toc@l(3) 7180; PC64LE9-NEXT: addis 3, 2, .LCPI133_1@toc@ha 7181; PC64LE9-NEXT: lfs 2, .LCPI133_1@toc@l(3) 7182; PC64LE9-NEXT: addis 3, 2, .LCPI133_2@toc@ha 7183; PC64LE9-NEXT: lfs 1, .LCPI133_2@toc@l(3) 7184; PC64LE9-NEXT: blr 7185entry: 7186 %result = call <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32( 7187 <3 x float><float 42.0, float 43.0, 7188 float 44.0>, 7189 metadata !"fpexcept.strict") #1 7190 ret <3 x double> %result 7191} 7192 7193define <4 x double> @constrained_vector_fpext_v4f32() #0 { 7194; PC64LE-LABEL: constrained_vector_fpext_v4f32: 7195; PC64LE: # %bb.0: # %entry 7196; PC64LE-NEXT: addis 3, 2, .LCPI134_0@toc@ha 7197; PC64LE-NEXT: addis 4, 2, .LCPI134_1@toc@ha 7198; PC64LE-NEXT: addis 5, 2, .LCPI134_2@toc@ha 7199; PC64LE-NEXT: addis 6, 2, .LCPI134_3@toc@ha 7200; PC64LE-NEXT: lfs 0, .LCPI134_0@toc@l(3) 7201; PC64LE-NEXT: lfs 1, .LCPI134_1@toc@l(4) 7202; PC64LE-NEXT: lfs 2, .LCPI134_2@toc@l(5) 7203; PC64LE-NEXT: lfs 3, .LCPI134_3@toc@l(6) 7204; PC64LE-NEXT: xxmrghd 34, 1, 0 7205; PC64LE-NEXT: xxmrghd 35, 3, 2 7206; PC64LE-NEXT: blr 7207; 7208; PC64LE9-LABEL: constrained_vector_fpext_v4f32: 7209; PC64LE9: # %bb.0: # %entry 7210; PC64LE9-NEXT: addis 3, 2, .LCPI134_0@toc@ha 7211; PC64LE9-NEXT: lfs 0, .LCPI134_0@toc@l(3) 7212; PC64LE9-NEXT: addis 3, 2, .LCPI134_1@toc@ha 7213; PC64LE9-NEXT: lfs 1, .LCPI134_1@toc@l(3) 7214; PC64LE9-NEXT: addis 3, 2, .LCPI134_2@toc@ha 7215; PC64LE9-NEXT: xxmrghd 34, 1, 0 7216; PC64LE9-NEXT: lfs 0, .LCPI134_2@toc@l(3) 7217; PC64LE9-NEXT: addis 3, 2, .LCPI134_3@toc@ha 7218; PC64LE9-NEXT: lfs 1, .LCPI134_3@toc@l(3) 7219; PC64LE9-NEXT: xxmrghd 35, 1, 0 7220; PC64LE9-NEXT: blr 7221entry: 7222 %result = call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32( 7223 <4 x float><float 42.0, float 43.0, 7224 float 44.0, float 45.0>, 7225 metadata !"fpexcept.strict") #1 7226 ret <4 x double> %result 7227} 7228 7229define <1 x float> @constrained_vector_ceil_v1f32() #0 { 7230; PC64LE-LABEL: constrained_vector_ceil_v1f32: 7231; PC64LE: # %bb.0: # %entry 7232; PC64LE-NEXT: addis 3, 2, .LCPI135_0@toc@ha 7233; PC64LE-NEXT: lfs 0, .LCPI135_0@toc@l(3) 7234; PC64LE-NEXT: addis 3, 2, .LCPI135_1@toc@ha 7235; PC64LE-NEXT: lfs 1, .LCPI135_1@toc@l(3) 7236; PC64LE-NEXT: xsrdpip 0, 0 7237; PC64LE-NEXT: blr 7238; 7239; PC64LE9-LABEL: constrained_vector_ceil_v1f32: 7240; PC64LE9: # %bb.0: # %entry 7241; PC64LE9-NEXT: addis 3, 2, .LCPI135_0@toc@ha 7242; PC64LE9-NEXT: lfs 0, .LCPI135_0@toc@l(3) 7243; PC64LE9-NEXT: addis 3, 2, .LCPI135_1@toc@ha 7244; PC64LE9-NEXT: lfs 1, .LCPI135_1@toc@l(3) 7245; PC64LE9-NEXT: xsrdpip 0, 0 7246; PC64LE9-NEXT: blr 7247entry: 7248 %ceil = call <1 x float> @llvm.experimental.constrained.ceil.v1f32( 7249 <1 x float> <float 1.5>, 7250 metadata !"fpexcept.strict") #1 7251 ret <1 x float> %ceil 7252} 7253 7254define <2 x double> @constrained_vector_ceil_v2f64() #0 { 7255; PC64LE-LABEL: constrained_vector_ceil_v2f64: 7256; PC64LE: # %bb.0: # %entry 7257; PC64LE-NEXT: addis 3, 2, .LCPI136_0@toc@ha 7258; PC64LE-NEXT: addis 4, 2, .LCPI136_1@toc@ha 7259; PC64LE-NEXT: addi 3, 3, .LCPI136_0@toc@l 7260; PC64LE-NEXT: lxvd2x 0, 0, 3 7261; PC64LE-NEXT: addi 3, 4, .LCPI136_1@toc@l 7262; PC64LE-NEXT: lxvd2x 1, 0, 3 7263; PC64LE-NEXT: xvrdpip 0, 0 7264; PC64LE-NEXT: xxswapd 34, 1 7265; PC64LE-NEXT: blr 7266; 7267; PC64LE9-LABEL: constrained_vector_ceil_v2f64: 7268; PC64LE9: # %bb.0: # %entry 7269; PC64LE9-NEXT: addis 3, 2, .LCPI136_0@toc@ha 7270; PC64LE9-NEXT: addi 3, 3, .LCPI136_0@toc@l 7271; PC64LE9-NEXT: lxvx 0, 0, 3 7272; PC64LE9-NEXT: addis 3, 2, .LCPI136_1@toc@ha 7273; PC64LE9-NEXT: addi 3, 3, .LCPI136_1@toc@l 7274; PC64LE9-NEXT: lxvx 34, 0, 3 7275; PC64LE9-NEXT: xvrdpip 0, 0 7276; PC64LE9-NEXT: blr 7277entry: 7278 %ceil = call <2 x double> @llvm.experimental.constrained.ceil.v2f64( 7279 <2 x double> <double 1.1, double 1.9>, 7280 metadata !"fpexcept.strict") #1 7281 ret <2 x double> %ceil 7282} 7283 7284define <3 x float> @constrained_vector_ceil_v3f32() #0 { 7285; PC64LE-LABEL: constrained_vector_ceil_v3f32: 7286; PC64LE: # %bb.0: # %entry 7287; PC64LE-NEXT: addis 3, 2, .LCPI137_0@toc@ha 7288; PC64LE-NEXT: addis 4, 2, .LCPI137_1@toc@ha 7289; PC64LE-NEXT: lfs 0, .LCPI137_0@toc@l(3) 7290; PC64LE-NEXT: addis 3, 2, .LCPI137_2@toc@ha 7291; PC64LE-NEXT: lfs 1, .LCPI137_1@toc@l(4) 7292; PC64LE-NEXT: lfs 2, .LCPI137_2@toc@l(3) 7293; PC64LE-NEXT: addis 3, 2, .LCPI137_3@toc@ha 7294; PC64LE-NEXT: addi 3, 3, .LCPI137_3@toc@l 7295; PC64LE-NEXT: xsrdpip 0, 0 7296; PC64LE-NEXT: lvx 2, 0, 3 7297; PC64LE-NEXT: xsrdpip 0, 1 7298; PC64LE-NEXT: xsrdpip 0, 2 7299; PC64LE-NEXT: blr 7300; 7301; PC64LE9-LABEL: constrained_vector_ceil_v3f32: 7302; PC64LE9: # %bb.0: # %entry 7303; PC64LE9-NEXT: addis 3, 2, .LCPI137_0@toc@ha 7304; PC64LE9-NEXT: lfs 0, .LCPI137_0@toc@l(3) 7305; PC64LE9-NEXT: addis 3, 2, .LCPI137_1@toc@ha 7306; PC64LE9-NEXT: xsrdpip 0, 0 7307; PC64LE9-NEXT: lfs 0, .LCPI137_1@toc@l(3) 7308; PC64LE9-NEXT: addis 3, 2, .LCPI137_2@toc@ha 7309; PC64LE9-NEXT: xsrdpip 0, 0 7310; PC64LE9-NEXT: lfs 0, .LCPI137_2@toc@l(3) 7311; PC64LE9-NEXT: addis 3, 2, .LCPI137_3@toc@ha 7312; PC64LE9-NEXT: addi 3, 3, .LCPI137_3@toc@l 7313; PC64LE9-NEXT: lxvx 34, 0, 3 7314; PC64LE9-NEXT: xsrdpip 0, 0 7315; PC64LE9-NEXT: blr 7316entry: 7317 %ceil = call <3 x float> @llvm.experimental.constrained.ceil.v3f32( 7318 <3 x float> <float 1.5, float 2.5, float 3.5>, 7319 metadata !"fpexcept.strict") #1 7320 ret <3 x float> %ceil 7321} 7322 7323define <3 x double> @constrained_vector_ceil_v3f64() #0 { 7324; PC64LE-LABEL: constrained_vector_ceil_v3f64: 7325; PC64LE: # %bb.0: # %entry 7326; PC64LE-NEXT: addis 3, 2, .LCPI138_0@toc@ha 7327; PC64LE-NEXT: addis 4, 2, .LCPI138_1@toc@ha 7328; PC64LE-NEXT: lfs 0, .LCPI138_0@toc@l(3) 7329; PC64LE-NEXT: addi 3, 4, .LCPI138_1@toc@l 7330; PC64LE-NEXT: lxvd2x 1, 0, 3 7331; PC64LE-NEXT: addis 3, 2, .LCPI138_2@toc@ha 7332; PC64LE-NEXT: xsrdpip 0, 0 7333; PC64LE-NEXT: xvrdpip 0, 1 7334; PC64LE-NEXT: lfs 1, .LCPI138_2@toc@l(3) 7335; PC64LE-NEXT: fmr 2, 1 7336; PC64LE-NEXT: fmr 3, 1 7337; PC64LE-NEXT: blr 7338; 7339; PC64LE9-LABEL: constrained_vector_ceil_v3f64: 7340; PC64LE9: # %bb.0: # %entry 7341; PC64LE9-NEXT: addis 3, 2, .LCPI138_0@toc@ha 7342; PC64LE9-NEXT: lfs 0, .LCPI138_0@toc@l(3) 7343; PC64LE9-NEXT: addis 3, 2, .LCPI138_1@toc@ha 7344; PC64LE9-NEXT: addi 3, 3, .LCPI138_1@toc@l 7345; PC64LE9-NEXT: xsrdpip 0, 0 7346; PC64LE9-NEXT: lxvx 0, 0, 3 7347; PC64LE9-NEXT: addis 3, 2, .LCPI138_2@toc@ha 7348; PC64LE9-NEXT: lfs 1, .LCPI138_2@toc@l(3) 7349; PC64LE9-NEXT: xvrdpip 0, 0 7350; PC64LE9-NEXT: fmr 2, 1 7351; PC64LE9-NEXT: fmr 3, 1 7352; PC64LE9-NEXT: blr 7353entry: 7354 %ceil = call <3 x double> @llvm.experimental.constrained.ceil.v3f64( 7355 <3 x double> <double 1.1, double 1.9, double 1.5>, 7356 metadata !"fpexcept.strict") #1 7357 ret <3 x double> %ceil 7358} 7359 7360define <1 x float> @constrained_vector_floor_v1f32() #0 { 7361; PC64LE-LABEL: constrained_vector_floor_v1f32: 7362; PC64LE: # %bb.0: # %entry 7363; PC64LE-NEXT: addis 3, 2, .LCPI139_0@toc@ha 7364; PC64LE-NEXT: lfs 0, .LCPI139_0@toc@l(3) 7365; PC64LE-NEXT: addis 3, 2, .LCPI139_1@toc@ha 7366; PC64LE-NEXT: lfs 1, .LCPI139_1@toc@l(3) 7367; PC64LE-NEXT: xsrdpim 0, 0 7368; PC64LE-NEXT: blr 7369; 7370; PC64LE9-LABEL: constrained_vector_floor_v1f32: 7371; PC64LE9: # %bb.0: # %entry 7372; PC64LE9-NEXT: addis 3, 2, .LCPI139_0@toc@ha 7373; PC64LE9-NEXT: lfs 0, .LCPI139_0@toc@l(3) 7374; PC64LE9-NEXT: addis 3, 2, .LCPI139_1@toc@ha 7375; PC64LE9-NEXT: lfs 1, .LCPI139_1@toc@l(3) 7376; PC64LE9-NEXT: xsrdpim 0, 0 7377; PC64LE9-NEXT: blr 7378entry: 7379 %floor = call <1 x float> @llvm.experimental.constrained.floor.v1f32( 7380 <1 x float> <float 1.5>, 7381 metadata !"fpexcept.strict") #1 7382 ret <1 x float> %floor 7383} 7384 7385 7386define <2 x double> @constrained_vector_floor_v2f64() #0 { 7387; PC64LE-LABEL: constrained_vector_floor_v2f64: 7388; PC64LE: # %bb.0: # %entry 7389; PC64LE-NEXT: addis 3, 2, .LCPI140_0@toc@ha 7390; PC64LE-NEXT: addis 4, 2, .LCPI140_1@toc@ha 7391; PC64LE-NEXT: addi 3, 3, .LCPI140_0@toc@l 7392; PC64LE-NEXT: lxvd2x 0, 0, 3 7393; PC64LE-NEXT: addi 3, 4, .LCPI140_1@toc@l 7394; PC64LE-NEXT: lxvd2x 1, 0, 3 7395; PC64LE-NEXT: xvrdpim 0, 0 7396; PC64LE-NEXT: xxswapd 34, 1 7397; PC64LE-NEXT: blr 7398; 7399; PC64LE9-LABEL: constrained_vector_floor_v2f64: 7400; PC64LE9: # %bb.0: # %entry 7401; PC64LE9-NEXT: addis 3, 2, .LCPI140_0@toc@ha 7402; PC64LE9-NEXT: addi 3, 3, .LCPI140_0@toc@l 7403; PC64LE9-NEXT: lxvx 0, 0, 3 7404; PC64LE9-NEXT: addis 3, 2, .LCPI140_1@toc@ha 7405; PC64LE9-NEXT: addi 3, 3, .LCPI140_1@toc@l 7406; PC64LE9-NEXT: lxvx 34, 0, 3 7407; PC64LE9-NEXT: xvrdpim 0, 0 7408; PC64LE9-NEXT: blr 7409entry: 7410 %floor = call <2 x double> @llvm.experimental.constrained.floor.v2f64( 7411 <2 x double> <double 1.1, double 1.9>, 7412 metadata !"fpexcept.strict") #1 7413 ret <2 x double> %floor 7414} 7415 7416define <3 x float> @constrained_vector_floor_v3f32() #0 { 7417; PC64LE-LABEL: constrained_vector_floor_v3f32: 7418; PC64LE: # %bb.0: # %entry 7419; PC64LE-NEXT: addis 3, 2, .LCPI141_0@toc@ha 7420; PC64LE-NEXT: addis 4, 2, .LCPI141_1@toc@ha 7421; PC64LE-NEXT: lfs 0, .LCPI141_0@toc@l(3) 7422; PC64LE-NEXT: addis 3, 2, .LCPI141_2@toc@ha 7423; PC64LE-NEXT: lfs 1, .LCPI141_1@toc@l(4) 7424; PC64LE-NEXT: lfs 2, .LCPI141_2@toc@l(3) 7425; PC64LE-NEXT: addis 3, 2, .LCPI141_3@toc@ha 7426; PC64LE-NEXT: addi 3, 3, .LCPI141_3@toc@l 7427; PC64LE-NEXT: xsrdpim 0, 0 7428; PC64LE-NEXT: lvx 2, 0, 3 7429; PC64LE-NEXT: xsrdpim 0, 1 7430; PC64LE-NEXT: xsrdpim 0, 2 7431; PC64LE-NEXT: blr 7432; 7433; PC64LE9-LABEL: constrained_vector_floor_v3f32: 7434; PC64LE9: # %bb.0: # %entry 7435; PC64LE9-NEXT: addis 3, 2, .LCPI141_0@toc@ha 7436; PC64LE9-NEXT: lfs 0, .LCPI141_0@toc@l(3) 7437; PC64LE9-NEXT: addis 3, 2, .LCPI141_1@toc@ha 7438; PC64LE9-NEXT: xsrdpim 0, 0 7439; PC64LE9-NEXT: lfs 0, .LCPI141_1@toc@l(3) 7440; PC64LE9-NEXT: addis 3, 2, .LCPI141_2@toc@ha 7441; PC64LE9-NEXT: xsrdpim 0, 0 7442; PC64LE9-NEXT: lfs 0, .LCPI141_2@toc@l(3) 7443; PC64LE9-NEXT: addis 3, 2, .LCPI141_3@toc@ha 7444; PC64LE9-NEXT: addi 3, 3, .LCPI141_3@toc@l 7445; PC64LE9-NEXT: lxvx 34, 0, 3 7446; PC64LE9-NEXT: xsrdpim 0, 0 7447; PC64LE9-NEXT: blr 7448entry: 7449 %floor = call <3 x float> @llvm.experimental.constrained.floor.v3f32( 7450 <3 x float> <float 1.5, float 2.5, float 3.5>, 7451 metadata !"fpexcept.strict") #1 7452 ret <3 x float> %floor 7453} 7454 7455define <3 x double> @constrained_vector_floor_v3f64() #0 { 7456; PC64LE-LABEL: constrained_vector_floor_v3f64: 7457; PC64LE: # %bb.0: # %entry 7458; PC64LE-NEXT: addis 3, 2, .LCPI142_0@toc@ha 7459; PC64LE-NEXT: addis 4, 2, .LCPI142_1@toc@ha 7460; PC64LE-NEXT: lfs 0, .LCPI142_0@toc@l(3) 7461; PC64LE-NEXT: addi 3, 4, .LCPI142_1@toc@l 7462; PC64LE-NEXT: lxvd2x 1, 0, 3 7463; PC64LE-NEXT: addis 3, 2, .LCPI142_2@toc@ha 7464; PC64LE-NEXT: xsrdpim 0, 0 7465; PC64LE-NEXT: xvrdpim 0, 1 7466; PC64LE-NEXT: lfs 1, .LCPI142_2@toc@l(3) 7467; PC64LE-NEXT: fmr 2, 1 7468; PC64LE-NEXT: fmr 3, 1 7469; PC64LE-NEXT: blr 7470; 7471; PC64LE9-LABEL: constrained_vector_floor_v3f64: 7472; PC64LE9: # %bb.0: # %entry 7473; PC64LE9-NEXT: addis 3, 2, .LCPI142_0@toc@ha 7474; PC64LE9-NEXT: lfs 0, .LCPI142_0@toc@l(3) 7475; PC64LE9-NEXT: addis 3, 2, .LCPI142_1@toc@ha 7476; PC64LE9-NEXT: addi 3, 3, .LCPI142_1@toc@l 7477; PC64LE9-NEXT: xsrdpim 0, 0 7478; PC64LE9-NEXT: lxvx 0, 0, 3 7479; PC64LE9-NEXT: addis 3, 2, .LCPI142_2@toc@ha 7480; PC64LE9-NEXT: lfs 1, .LCPI142_2@toc@l(3) 7481; PC64LE9-NEXT: xvrdpim 0, 0 7482; PC64LE9-NEXT: fmr 2, 1 7483; PC64LE9-NEXT: fmr 3, 1 7484; PC64LE9-NEXT: blr 7485entry: 7486 %floor = call <3 x double> @llvm.experimental.constrained.floor.v3f64( 7487 <3 x double> <double 1.1, double 1.9, double 1.5>, 7488 metadata !"fpexcept.strict") #1 7489 ret <3 x double> %floor 7490} 7491 7492define <1 x float> @constrained_vector_round_v1f32() #0 { 7493; PC64LE-LABEL: constrained_vector_round_v1f32: 7494; PC64LE: # %bb.0: # %entry 7495; PC64LE-NEXT: addis 3, 2, .LCPI143_0@toc@ha 7496; PC64LE-NEXT: lfs 0, .LCPI143_0@toc@l(3) 7497; PC64LE-NEXT: addis 3, 2, .LCPI143_1@toc@ha 7498; PC64LE-NEXT: lfs 1, .LCPI143_1@toc@l(3) 7499; PC64LE-NEXT: xsrdpi 0, 0 7500; PC64LE-NEXT: blr 7501; 7502; PC64LE9-LABEL: constrained_vector_round_v1f32: 7503; PC64LE9: # %bb.0: # %entry 7504; PC64LE9-NEXT: addis 3, 2, .LCPI143_0@toc@ha 7505; PC64LE9-NEXT: lfs 0, .LCPI143_0@toc@l(3) 7506; PC64LE9-NEXT: addis 3, 2, .LCPI143_1@toc@ha 7507; PC64LE9-NEXT: lfs 1, .LCPI143_1@toc@l(3) 7508; PC64LE9-NEXT: xsrdpi 0, 0 7509; PC64LE9-NEXT: blr 7510entry: 7511 %round = call <1 x float> @llvm.experimental.constrained.round.v1f32( 7512 <1 x float> <float 1.5>, 7513 metadata !"fpexcept.strict") #1 7514 ret <1 x float> %round 7515} 7516 7517define <2 x double> @constrained_vector_round_v2f64() #0 { 7518; PC64LE-LABEL: constrained_vector_round_v2f64: 7519; PC64LE: # %bb.0: # %entry 7520; PC64LE-NEXT: addis 3, 2, .LCPI144_0@toc@ha 7521; PC64LE-NEXT: addis 4, 2, .LCPI144_1@toc@ha 7522; PC64LE-NEXT: addi 3, 3, .LCPI144_0@toc@l 7523; PC64LE-NEXT: lxvd2x 0, 0, 3 7524; PC64LE-NEXT: addi 3, 4, .LCPI144_1@toc@l 7525; PC64LE-NEXT: lxvd2x 1, 0, 3 7526; PC64LE-NEXT: xvrdpi 0, 0 7527; PC64LE-NEXT: xxswapd 34, 1 7528; PC64LE-NEXT: blr 7529; 7530; PC64LE9-LABEL: constrained_vector_round_v2f64: 7531; PC64LE9: # %bb.0: # %entry 7532; PC64LE9-NEXT: addis 3, 2, .LCPI144_0@toc@ha 7533; PC64LE9-NEXT: addi 3, 3, .LCPI144_0@toc@l 7534; PC64LE9-NEXT: lxvx 0, 0, 3 7535; PC64LE9-NEXT: addis 3, 2, .LCPI144_1@toc@ha 7536; PC64LE9-NEXT: addi 3, 3, .LCPI144_1@toc@l 7537; PC64LE9-NEXT: lxvx 34, 0, 3 7538; PC64LE9-NEXT: xvrdpi 0, 0 7539; PC64LE9-NEXT: blr 7540entry: 7541 %round = call <2 x double> @llvm.experimental.constrained.round.v2f64( 7542 <2 x double> <double 1.1, double 1.9>, 7543 metadata !"fpexcept.strict") #1 7544 ret <2 x double> %round 7545} 7546 7547define <3 x float> @constrained_vector_round_v3f32() #0 { 7548; PC64LE-LABEL: constrained_vector_round_v3f32: 7549; PC64LE: # %bb.0: # %entry 7550; PC64LE-NEXT: addis 3, 2, .LCPI145_0@toc@ha 7551; PC64LE-NEXT: addis 4, 2, .LCPI145_1@toc@ha 7552; PC64LE-NEXT: lfs 0, .LCPI145_0@toc@l(3) 7553; PC64LE-NEXT: addis 3, 2, .LCPI145_2@toc@ha 7554; PC64LE-NEXT: lfs 1, .LCPI145_1@toc@l(4) 7555; PC64LE-NEXT: lfs 2, .LCPI145_2@toc@l(3) 7556; PC64LE-NEXT: addis 3, 2, .LCPI145_3@toc@ha 7557; PC64LE-NEXT: addi 3, 3, .LCPI145_3@toc@l 7558; PC64LE-NEXT: xsrdpi 0, 0 7559; PC64LE-NEXT: lvx 2, 0, 3 7560; PC64LE-NEXT: xsrdpi 0, 1 7561; PC64LE-NEXT: xsrdpi 0, 2 7562; PC64LE-NEXT: blr 7563; 7564; PC64LE9-LABEL: constrained_vector_round_v3f32: 7565; PC64LE9: # %bb.0: # %entry 7566; PC64LE9-NEXT: addis 3, 2, .LCPI145_0@toc@ha 7567; PC64LE9-NEXT: lfs 0, .LCPI145_0@toc@l(3) 7568; PC64LE9-NEXT: addis 3, 2, .LCPI145_1@toc@ha 7569; PC64LE9-NEXT: xsrdpi 0, 0 7570; PC64LE9-NEXT: lfs 0, .LCPI145_1@toc@l(3) 7571; PC64LE9-NEXT: addis 3, 2, .LCPI145_2@toc@ha 7572; PC64LE9-NEXT: xsrdpi 0, 0 7573; PC64LE9-NEXT: lfs 0, .LCPI145_2@toc@l(3) 7574; PC64LE9-NEXT: addis 3, 2, .LCPI145_3@toc@ha 7575; PC64LE9-NEXT: addi 3, 3, .LCPI145_3@toc@l 7576; PC64LE9-NEXT: lxvx 34, 0, 3 7577; PC64LE9-NEXT: xsrdpi 0, 0 7578; PC64LE9-NEXT: blr 7579entry: 7580 %round = call <3 x float> @llvm.experimental.constrained.round.v3f32( 7581 <3 x float> <float 1.5, float 2.5, float 3.5>, 7582 metadata !"fpexcept.strict") #1 7583 ret <3 x float> %round 7584} 7585 7586 7587define <3 x double> @constrained_vector_round_v3f64() #0 { 7588; PC64LE-LABEL: constrained_vector_round_v3f64: 7589; PC64LE: # %bb.0: # %entry 7590; PC64LE-NEXT: addis 4, 2, .LCPI146_1@toc@ha 7591; PC64LE-NEXT: addis 3, 2, .LCPI146_0@toc@ha 7592; PC64LE-NEXT: addi 4, 4, .LCPI146_1@toc@l 7593; PC64LE-NEXT: lxvd2x 1, 0, 4 7594; PC64LE-NEXT: addis 4, 2, .LCPI146_3@toc@ha 7595; PC64LE-NEXT: lfs 0, .LCPI146_0@toc@l(3) 7596; PC64LE-NEXT: addis 3, 2, .LCPI146_2@toc@ha 7597; PC64LE-NEXT: lfs 2, .LCPI146_3@toc@l(4) 7598; PC64LE-NEXT: xsrdpi 0, 0 7599; PC64LE-NEXT: xvrdpi 0, 1 7600; PC64LE-NEXT: lfs 1, .LCPI146_2@toc@l(3) 7601; PC64LE-NEXT: fmr 3, 2 7602; PC64LE-NEXT: blr 7603; 7604; PC64LE9-LABEL: constrained_vector_round_v3f64: 7605; PC64LE9: # %bb.0: # %entry 7606; PC64LE9-NEXT: addis 3, 2, .LCPI146_0@toc@ha 7607; PC64LE9-NEXT: lfs 0, .LCPI146_0@toc@l(3) 7608; PC64LE9-NEXT: addis 3, 2, .LCPI146_1@toc@ha 7609; PC64LE9-NEXT: addi 3, 3, .LCPI146_1@toc@l 7610; PC64LE9-NEXT: xsrdpi 0, 0 7611; PC64LE9-NEXT: lxvx 0, 0, 3 7612; PC64LE9-NEXT: addis 3, 2, .LCPI146_2@toc@ha 7613; PC64LE9-NEXT: lfs 1, .LCPI146_2@toc@l(3) 7614; PC64LE9-NEXT: addis 3, 2, .LCPI146_3@toc@ha 7615; PC64LE9-NEXT: lfs 2, .LCPI146_3@toc@l(3) 7616; PC64LE9-NEXT: xvrdpi 0, 0 7617; PC64LE9-NEXT: fmr 3, 2 7618; PC64LE9-NEXT: blr 7619entry: 7620 %round = call <3 x double> @llvm.experimental.constrained.round.v3f64( 7621 <3 x double> <double 1.1, double 1.9, double 1.5>, 7622 metadata !"fpexcept.strict") #1 7623 ret <3 x double> %round 7624} 7625 7626define <1 x float> @constrained_vector_trunc_v1f32() #0 { 7627; PC64LE-LABEL: constrained_vector_trunc_v1f32: 7628; PC64LE: # %bb.0: # %entry 7629; PC64LE-NEXT: addis 3, 2, .LCPI147_0@toc@ha 7630; PC64LE-NEXT: lfs 0, .LCPI147_0@toc@l(3) 7631; PC64LE-NEXT: addis 3, 2, .LCPI147_1@toc@ha 7632; PC64LE-NEXT: lfs 1, .LCPI147_1@toc@l(3) 7633; PC64LE-NEXT: xsrdpiz 0, 0 7634; PC64LE-NEXT: blr 7635; 7636; PC64LE9-LABEL: constrained_vector_trunc_v1f32: 7637; PC64LE9: # %bb.0: # %entry 7638; PC64LE9-NEXT: addis 3, 2, .LCPI147_0@toc@ha 7639; PC64LE9-NEXT: lfs 0, .LCPI147_0@toc@l(3) 7640; PC64LE9-NEXT: addis 3, 2, .LCPI147_1@toc@ha 7641; PC64LE9-NEXT: lfs 1, .LCPI147_1@toc@l(3) 7642; PC64LE9-NEXT: xsrdpiz 0, 0 7643; PC64LE9-NEXT: blr 7644entry: 7645 %trunc = call <1 x float> @llvm.experimental.constrained.trunc.v1f32( 7646 <1 x float> <float 1.5>, 7647 metadata !"fpexcept.strict") #1 7648 ret <1 x float> %trunc 7649} 7650 7651define <2 x double> @constrained_vector_trunc_v2f64() #0 { 7652; PC64LE-LABEL: constrained_vector_trunc_v2f64: 7653; PC64LE: # %bb.0: # %entry 7654; PC64LE-NEXT: addis 3, 2, .LCPI148_0@toc@ha 7655; PC64LE-NEXT: addis 4, 2, .LCPI148_1@toc@ha 7656; PC64LE-NEXT: addi 3, 3, .LCPI148_0@toc@l 7657; PC64LE-NEXT: lxvd2x 0, 0, 3 7658; PC64LE-NEXT: addi 3, 4, .LCPI148_1@toc@l 7659; PC64LE-NEXT: lxvd2x 1, 0, 3 7660; PC64LE-NEXT: xvrdpiz 0, 0 7661; PC64LE-NEXT: xxswapd 34, 1 7662; PC64LE-NEXT: blr 7663; 7664; PC64LE9-LABEL: constrained_vector_trunc_v2f64: 7665; PC64LE9: # %bb.0: # %entry 7666; PC64LE9-NEXT: addis 3, 2, .LCPI148_0@toc@ha 7667; PC64LE9-NEXT: addi 3, 3, .LCPI148_0@toc@l 7668; PC64LE9-NEXT: lxvx 0, 0, 3 7669; PC64LE9-NEXT: addis 3, 2, .LCPI148_1@toc@ha 7670; PC64LE9-NEXT: addi 3, 3, .LCPI148_1@toc@l 7671; PC64LE9-NEXT: lxvx 34, 0, 3 7672; PC64LE9-NEXT: xvrdpiz 0, 0 7673; PC64LE9-NEXT: blr 7674entry: 7675 %trunc = call <2 x double> @llvm.experimental.constrained.trunc.v2f64( 7676 <2 x double> <double 1.1, double 1.9>, 7677 metadata !"fpexcept.strict") #1 7678 ret <2 x double> %trunc 7679} 7680 7681define <3 x float> @constrained_vector_trunc_v3f32() #0 { 7682; PC64LE-LABEL: constrained_vector_trunc_v3f32: 7683; PC64LE: # %bb.0: # %entry 7684; PC64LE-NEXT: addis 3, 2, .LCPI149_0@toc@ha 7685; PC64LE-NEXT: addis 4, 2, .LCPI149_1@toc@ha 7686; PC64LE-NEXT: lfs 0, .LCPI149_0@toc@l(3) 7687; PC64LE-NEXT: addis 3, 2, .LCPI149_2@toc@ha 7688; PC64LE-NEXT: lfs 1, .LCPI149_1@toc@l(4) 7689; PC64LE-NEXT: lfs 2, .LCPI149_2@toc@l(3) 7690; PC64LE-NEXT: addis 3, 2, .LCPI149_3@toc@ha 7691; PC64LE-NEXT: addi 3, 3, .LCPI149_3@toc@l 7692; PC64LE-NEXT: xsrdpiz 0, 0 7693; PC64LE-NEXT: lvx 2, 0, 3 7694; PC64LE-NEXT: xsrdpiz 0, 1 7695; PC64LE-NEXT: xsrdpiz 0, 2 7696; PC64LE-NEXT: blr 7697; 7698; PC64LE9-LABEL: constrained_vector_trunc_v3f32: 7699; PC64LE9: # %bb.0: # %entry 7700; PC64LE9-NEXT: addis 3, 2, .LCPI149_0@toc@ha 7701; PC64LE9-NEXT: lfs 0, .LCPI149_0@toc@l(3) 7702; PC64LE9-NEXT: addis 3, 2, .LCPI149_1@toc@ha 7703; PC64LE9-NEXT: xsrdpiz 0, 0 7704; PC64LE9-NEXT: lfs 0, .LCPI149_1@toc@l(3) 7705; PC64LE9-NEXT: addis 3, 2, .LCPI149_2@toc@ha 7706; PC64LE9-NEXT: xsrdpiz 0, 0 7707; PC64LE9-NEXT: lfs 0, .LCPI149_2@toc@l(3) 7708; PC64LE9-NEXT: addis 3, 2, .LCPI149_3@toc@ha 7709; PC64LE9-NEXT: addi 3, 3, .LCPI149_3@toc@l 7710; PC64LE9-NEXT: lxvx 34, 0, 3 7711; PC64LE9-NEXT: xsrdpiz 0, 0 7712; PC64LE9-NEXT: blr 7713entry: 7714 %trunc = call <3 x float> @llvm.experimental.constrained.trunc.v3f32( 7715 <3 x float> <float 1.5, float 2.5, float 3.5>, 7716 metadata !"fpexcept.strict") #1 7717 ret <3 x float> %trunc 7718} 7719 7720define <3 x double> @constrained_vector_trunc_v3f64() #0 { 7721; PC64LE-LABEL: constrained_vector_trunc_v3f64: 7722; PC64LE: # %bb.0: # %entry 7723; PC64LE-NEXT: addis 3, 2, .LCPI150_0@toc@ha 7724; PC64LE-NEXT: addis 4, 2, .LCPI150_1@toc@ha 7725; PC64LE-NEXT: lfs 0, .LCPI150_0@toc@l(3) 7726; PC64LE-NEXT: addi 3, 4, .LCPI150_1@toc@l 7727; PC64LE-NEXT: lxvd2x 1, 0, 3 7728; PC64LE-NEXT: addis 3, 2, .LCPI150_2@toc@ha 7729; PC64LE-NEXT: xsrdpiz 0, 0 7730; PC64LE-NEXT: xvrdpiz 0, 1 7731; PC64LE-NEXT: lfs 1, .LCPI150_2@toc@l(3) 7732; PC64LE-NEXT: fmr 2, 1 7733; PC64LE-NEXT: fmr 3, 1 7734; PC64LE-NEXT: blr 7735; 7736; PC64LE9-LABEL: constrained_vector_trunc_v3f64: 7737; PC64LE9: # %bb.0: # %entry 7738; PC64LE9-NEXT: addis 3, 2, .LCPI150_0@toc@ha 7739; PC64LE9-NEXT: lfs 0, .LCPI150_0@toc@l(3) 7740; PC64LE9-NEXT: addis 3, 2, .LCPI150_1@toc@ha 7741; PC64LE9-NEXT: addi 3, 3, .LCPI150_1@toc@l 7742; PC64LE9-NEXT: xsrdpiz 0, 0 7743; PC64LE9-NEXT: lxvx 0, 0, 3 7744; PC64LE9-NEXT: addis 3, 2, .LCPI150_2@toc@ha 7745; PC64LE9-NEXT: lfs 1, .LCPI150_2@toc@l(3) 7746; PC64LE9-NEXT: xvrdpiz 0, 0 7747; PC64LE9-NEXT: fmr 2, 1 7748; PC64LE9-NEXT: fmr 3, 1 7749; PC64LE9-NEXT: blr 7750entry: 7751 %trunc = call <3 x double> @llvm.experimental.constrained.trunc.v3f64( 7752 <3 x double> <double 1.1, double 1.9, double 1.5>, 7753 metadata !"fpexcept.strict") #1 7754 ret <3 x double> %trunc 7755} 7756 7757define <1 x double> @constrained_vector_sitofp_v1f64_v1i32(<1 x i32> %x) #0 { 7758; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i32: 7759; PC64LE: # %bb.0: # %entry 7760; PC64LE-NEXT: mtfprwa 0, 3 7761; PC64LE-NEXT: xscvsxddp 1, 0 7762; PC64LE-NEXT: blr 7763; 7764; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i32: 7765; PC64LE9: # %bb.0: # %entry 7766; PC64LE9-NEXT: mtfprwa 0, 3 7767; PC64LE9-NEXT: xscvsxddp 1, 0 7768; PC64LE9-NEXT: blr 7769entry: 7770 %result = call <1 x double> 7771 @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32> %x, 7772 metadata !"round.dynamic", 7773 metadata !"fpexcept.strict") #0 7774 ret <1 x double> %result 7775} 7776 7777define <1 x float> @constrained_vector_sitofp_v1f32_v1i32(<1 x i32> %x) #0 { 7778; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i32: 7779; PC64LE: # %bb.0: # %entry 7780; PC64LE-NEXT: mtfprwa 0, 3 7781; PC64LE-NEXT: xscvsxdsp 1, 0 7782; PC64LE-NEXT: blr 7783; 7784; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i32: 7785; PC64LE9: # %bb.0: # %entry 7786; PC64LE9-NEXT: mtfprwa 0, 3 7787; PC64LE9-NEXT: xscvsxdsp 1, 0 7788; PC64LE9-NEXT: blr 7789entry: 7790 %result = call <1 x float> 7791 @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32> %x, 7792 metadata !"round.dynamic", 7793 metadata !"fpexcept.strict") #0 7794 ret <1 x float> %result 7795} 7796 7797define <1 x double> @constrained_vector_sitofp_v1f64_v1i64(<1 x i64> %x) #0 { 7798; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i64: 7799; PC64LE: # %bb.0: # %entry 7800; PC64LE-NEXT: mtfprd 0, 3 7801; PC64LE-NEXT: xscvsxddp 1, 0 7802; PC64LE-NEXT: blr 7803; 7804; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i64: 7805; PC64LE9: # %bb.0: # %entry 7806; PC64LE9-NEXT: mtfprd 0, 3 7807; PC64LE9-NEXT: xscvsxddp 1, 0 7808; PC64LE9-NEXT: blr 7809entry: 7810 %result = call <1 x double> 7811 @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64> %x, 7812 metadata !"round.dynamic", 7813 metadata !"fpexcept.strict") #0 7814 ret <1 x double> %result 7815} 7816 7817define <1 x float> @constrained_vector_sitofp_v1f32_v1i64(<1 x i64> %x) #0 { 7818; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i64: 7819; PC64LE: # %bb.0: # %entry 7820; PC64LE-NEXT: mtfprd 0, 3 7821; PC64LE-NEXT: xscvsxdsp 1, 0 7822; PC64LE-NEXT: blr 7823; 7824; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i64: 7825; PC64LE9: # %bb.0: # %entry 7826; PC64LE9-NEXT: mtfprd 0, 3 7827; PC64LE9-NEXT: xscvsxdsp 1, 0 7828; PC64LE9-NEXT: blr 7829entry: 7830 %result = call <1 x float> 7831 @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64> %x, 7832 metadata !"round.dynamic", 7833 metadata !"fpexcept.strict") #0 7834 ret <1 x float> %result 7835} 7836 7837define <2 x double> @constrained_vector_sitofp_v2f64_v2i16(<2 x i16> %x) #0 { 7838; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i16: 7839; PC64LE: # %bb.0: # %entry 7840; PC64LE-NEXT: addis 3, 2, .LCPI155_0@toc@ha 7841; PC64LE-NEXT: addi 3, 3, .LCPI155_0@toc@l 7842; PC64LE-NEXT: lvx 3, 0, 3 7843; PC64LE-NEXT: addis 3, 2, .LCPI155_1@toc@ha 7844; PC64LE-NEXT: addi 3, 3, .LCPI155_1@toc@l 7845; PC64LE-NEXT: lxvd2x 0, 0, 3 7846; PC64LE-NEXT: vperm 2, 2, 2, 3 7847; PC64LE-NEXT: xxswapd 35, 0 7848; PC64LE-NEXT: vsld 2, 2, 3 7849; PC64LE-NEXT: vsrad 2, 2, 3 7850; PC64LE-NEXT: xvcvsxddp 34, 34 7851; PC64LE-NEXT: blr 7852; 7853; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i16: 7854; PC64LE9: # %bb.0: # %entry 7855; PC64LE9-NEXT: addis 3, 2, .LCPI155_0@toc@ha 7856; PC64LE9-NEXT: addi 3, 3, .LCPI155_0@toc@l 7857; PC64LE9-NEXT: lxvx 35, 0, 3 7858; PC64LE9-NEXT: vperm 2, 2, 2, 3 7859; PC64LE9-NEXT: vextsh2d 2, 2 7860; PC64LE9-NEXT: xvcvsxddp 34, 34 7861; PC64LE9-NEXT: blr 7862entry: 7863 %result = call <2 x double> 7864 @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16> %x, 7865 metadata !"round.dynamic", 7866 metadata !"fpexcept.strict") #0 7867 ret <2 x double> %result 7868} 7869 7870define <2 x double> @constrained_vector_sitofp_v2f64_v2i32(<2 x i32> %x) #0 { 7871; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i32: 7872; PC64LE: # %bb.0: # %entry 7873; PC64LE-NEXT: xxswapd 0, 34 7874; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 7875; PC64LE-NEXT: mffprwz 3, 0 7876; PC64LE-NEXT: mffprwz 4, 1 7877; PC64LE-NEXT: mtfprwa 0, 3 7878; PC64LE-NEXT: mtfprwa 1, 4 7879; PC64LE-NEXT: xscvsxddp 0, 0 7880; PC64LE-NEXT: xscvsxddp 1, 1 7881; PC64LE-NEXT: xxmrghd 34, 1, 0 7882; PC64LE-NEXT: blr 7883; 7884; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i32: 7885; PC64LE9: # %bb.0: # %entry 7886; PC64LE9-NEXT: li 3, 0 7887; PC64LE9-NEXT: vextuwrx 3, 3, 2 7888; PC64LE9-NEXT: mtfprwa 0, 3 7889; PC64LE9-NEXT: li 3, 4 7890; PC64LE9-NEXT: vextuwrx 3, 3, 2 7891; PC64LE9-NEXT: xscvsxddp 0, 0 7892; PC64LE9-NEXT: mtfprwa 1, 3 7893; PC64LE9-NEXT: xscvsxddp 1, 1 7894; PC64LE9-NEXT: xxmrghd 34, 1, 0 7895; PC64LE9-NEXT: blr 7896entry: 7897 %result = call <2 x double> 7898 @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32> %x, 7899 metadata !"round.dynamic", 7900 metadata !"fpexcept.strict") #0 7901 ret <2 x double> %result 7902} 7903 7904define <2 x float> @constrained_vector_sitofp_v2f32_v2i32(<2 x i32> %x) #0 { 7905; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i32: 7906; PC64LE: # %bb.0: # %entry 7907; PC64LE-NEXT: xxswapd 0, 34 7908; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 7909; PC64LE-NEXT: mffprwz 3, 0 7910; PC64LE-NEXT: mffprwz 4, 1 7911; PC64LE-NEXT: mtfprwa 0, 3 7912; PC64LE-NEXT: mtfprwa 1, 4 7913; PC64LE-NEXT: xscvsxdsp 0, 0 7914; PC64LE-NEXT: xscvsxdsp 1, 1 7915; PC64LE-NEXT: xscvdpspn 0, 0 7916; PC64LE-NEXT: xscvdpspn 1, 1 7917; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 7918; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 7919; PC64LE-NEXT: vmrghw 2, 3, 2 7920; PC64LE-NEXT: blr 7921; 7922; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i32: 7923; PC64LE9: # %bb.0: # %entry 7924; PC64LE9-NEXT: li 3, 0 7925; PC64LE9-NEXT: vextuwrx 3, 3, 2 7926; PC64LE9-NEXT: mtfprwa 0, 3 7927; PC64LE9-NEXT: li 3, 4 7928; PC64LE9-NEXT: xscvsxdsp 0, 0 7929; PC64LE9-NEXT: vextuwrx 3, 3, 2 7930; PC64LE9-NEXT: xscvdpspn 0, 0 7931; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 7932; PC64LE9-NEXT: mtfprwa 0, 3 7933; PC64LE9-NEXT: xscvsxdsp 0, 0 7934; PC64LE9-NEXT: xscvdpspn 0, 0 7935; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 7936; PC64LE9-NEXT: vmrghw 2, 2, 3 7937; PC64LE9-NEXT: blr 7938entry: 7939 %result = call <2 x float> 7940 @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32> %x, 7941 metadata !"round.dynamic", 7942 metadata !"fpexcept.strict") #0 7943 ret <2 x float> %result 7944} 7945 7946define <2 x double> @constrained_vector_sitofp_v2f64_v2i64(<2 x i64> %x) #0 { 7947; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i64: 7948; PC64LE: # %bb.0: # %entry 7949; PC64LE-NEXT: xvcvsxddp 34, 34 7950; PC64LE-NEXT: blr 7951; 7952; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i64: 7953; PC64LE9: # %bb.0: # %entry 7954; PC64LE9-NEXT: xvcvsxddp 34, 34 7955; PC64LE9-NEXT: blr 7956entry: 7957 %result = call <2 x double> 7958 @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64> %x, 7959 metadata !"round.dynamic", 7960 metadata !"fpexcept.strict") #0 7961 ret <2 x double> %result 7962} 7963 7964define <2 x float> @constrained_vector_sitofp_v2f32_v2i64(<2 x i64> %x) #0 { 7965; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i64: 7966; PC64LE: # %bb.0: # %entry 7967; PC64LE-NEXT: xxswapd 0, 34 7968; PC64LE-NEXT: mfvsrd 3, 34 7969; PC64LE-NEXT: mffprd 4, 0 7970; PC64LE-NEXT: mtfprd 0, 3 7971; PC64LE-NEXT: mtfprd 1, 4 7972; PC64LE-NEXT: xscvsxdsp 0, 0 7973; PC64LE-NEXT: xscvsxdsp 1, 1 7974; PC64LE-NEXT: xscvdpspn 0, 0 7975; PC64LE-NEXT: xscvdpspn 1, 1 7976; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 7977; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 7978; PC64LE-NEXT: vmrghw 2, 2, 3 7979; PC64LE-NEXT: blr 7980; 7981; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i64: 7982; PC64LE9: # %bb.0: # %entry 7983; PC64LE9-NEXT: mfvsrld 3, 34 7984; PC64LE9-NEXT: mtfprd 0, 3 7985; PC64LE9-NEXT: mfvsrd 3, 34 7986; PC64LE9-NEXT: xscvsxdsp 0, 0 7987; PC64LE9-NEXT: xscvdpspn 0, 0 7988; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 7989; PC64LE9-NEXT: mtfprd 0, 3 7990; PC64LE9-NEXT: xscvsxdsp 0, 0 7991; PC64LE9-NEXT: xscvdpspn 0, 0 7992; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 7993; PC64LE9-NEXT: vmrghw 2, 2, 3 7994; PC64LE9-NEXT: blr 7995entry: 7996 %result = call <2 x float> 7997 @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64> %x, 7998 metadata !"round.dynamic", 7999 metadata !"fpexcept.strict") #0 8000 ret <2 x float> %result 8001} 8002 8003define <3 x double> @constrained_vector_sitofp_v3f64_v3i32(<3 x i32> %x) #0 { 8004; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i32: 8005; PC64LE: # %bb.0: # %entry 8006; PC64LE-NEXT: xxswapd 0, 34 8007; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 8008; PC64LE-NEXT: mfvsrwz 3, 34 8009; PC64LE-NEXT: mtfprwa 3, 3 8010; PC64LE-NEXT: mffprwz 3, 0 8011; PC64LE-NEXT: mffprwz 4, 1 8012; PC64LE-NEXT: mtfprwa 0, 3 8013; PC64LE-NEXT: mtfprwa 2, 4 8014; PC64LE-NEXT: xscvsxddp 1, 0 8015; PC64LE-NEXT: xscvsxddp 2, 2 8016; PC64LE-NEXT: xscvsxddp 3, 3 8017; PC64LE-NEXT: blr 8018; 8019; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i32: 8020; PC64LE9: # %bb.0: # %entry 8021; PC64LE9-NEXT: li 3, 0 8022; PC64LE9-NEXT: vextuwrx 3, 3, 2 8023; PC64LE9-NEXT: mtfprwa 0, 3 8024; PC64LE9-NEXT: li 3, 4 8025; PC64LE9-NEXT: vextuwrx 3, 3, 2 8026; PC64LE9-NEXT: xscvsxddp 1, 0 8027; PC64LE9-NEXT: mtfprwa 0, 3 8028; PC64LE9-NEXT: mfvsrwz 3, 34 8029; PC64LE9-NEXT: xscvsxddp 2, 0 8030; PC64LE9-NEXT: mtfprwa 0, 3 8031; PC64LE9-NEXT: xscvsxddp 3, 0 8032; PC64LE9-NEXT: blr 8033entry: 8034 %result = call <3 x double> 8035 @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32> %x, 8036 metadata !"round.dynamic", 8037 metadata !"fpexcept.strict") #0 8038 ret <3 x double> %result 8039} 8040 8041define <3 x float> @constrained_vector_sitofp_v3f32_v3i32(<3 x i32> %x) #0 { 8042; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i32: 8043; PC64LE: # %bb.0: # %entry 8044; PC64LE-NEXT: xxswapd 0, 34 8045; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 8046; PC64LE-NEXT: addis 3, 2, .LCPI161_0@toc@ha 8047; PC64LE-NEXT: addi 3, 3, .LCPI161_0@toc@l 8048; PC64LE-NEXT: mffprwz 4, 0 8049; PC64LE-NEXT: mffprwz 5, 1 8050; PC64LE-NEXT: mtfprwa 0, 4 8051; PC64LE-NEXT: mtfprwa 1, 5 8052; PC64LE-NEXT: xscvsxdsp 0, 0 8053; PC64LE-NEXT: xscvsxdsp 1, 1 8054; PC64LE-NEXT: mfvsrwz 4, 34 8055; PC64LE-NEXT: mtfprwa 2, 4 8056; PC64LE-NEXT: xscvsxdsp 2, 2 8057; PC64LE-NEXT: xscvdpspn 0, 0 8058; PC64LE-NEXT: xscvdpspn 1, 1 8059; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 8060; PC64LE-NEXT: xscvdpspn 0, 2 8061; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 8062; PC64LE-NEXT: vmrghw 2, 3, 2 8063; PC64LE-NEXT: lvx 3, 0, 3 8064; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 8065; PC64LE-NEXT: vperm 2, 4, 2, 3 8066; PC64LE-NEXT: blr 8067; 8068; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i32: 8069; PC64LE9: # %bb.0: # %entry 8070; PC64LE9-NEXT: li 3, 0 8071; PC64LE9-NEXT: vextuwrx 3, 3, 2 8072; PC64LE9-NEXT: mtfprwa 0, 3 8073; PC64LE9-NEXT: li 3, 4 8074; PC64LE9-NEXT: xscvsxdsp 0, 0 8075; PC64LE9-NEXT: vextuwrx 3, 3, 2 8076; PC64LE9-NEXT: xscvdpspn 0, 0 8077; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 8078; PC64LE9-NEXT: mtfprwa 0, 3 8079; PC64LE9-NEXT: addis 3, 2, .LCPI161_0@toc@ha 8080; PC64LE9-NEXT: xscvsxdsp 0, 0 8081; PC64LE9-NEXT: addi 3, 3, .LCPI161_0@toc@l 8082; PC64LE9-NEXT: xscvdpspn 0, 0 8083; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 8084; PC64LE9-NEXT: vmrghw 3, 4, 3 8085; PC64LE9-NEXT: lxvx 36, 0, 3 8086; PC64LE9-NEXT: mfvsrwz 3, 34 8087; PC64LE9-NEXT: mtfprwa 0, 3 8088; PC64LE9-NEXT: xscvsxdsp 0, 0 8089; PC64LE9-NEXT: xscvdpspn 0, 0 8090; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 8091; PC64LE9-NEXT: vperm 2, 2, 3, 4 8092; PC64LE9-NEXT: blr 8093entry: 8094 %result = call <3 x float> 8095 @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32> %x, 8096 metadata !"round.dynamic", 8097 metadata !"fpexcept.strict") #0 8098 ret <3 x float> %result 8099} 8100 8101define <3 x double> @constrained_vector_sitofp_v3f64_v3i64(<3 x i64> %x) #0 { 8102; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i64: 8103; PC64LE: # %bb.0: # %entry 8104; PC64LE-NEXT: mtfprd 0, 3 8105; PC64LE-NEXT: mtfprd 2, 4 8106; PC64LE-NEXT: mtfprd 3, 5 8107; PC64LE-NEXT: xscvsxddp 1, 0 8108; PC64LE-NEXT: xscvsxddp 2, 2 8109; PC64LE-NEXT: xscvsxddp 3, 3 8110; PC64LE-NEXT: blr 8111; 8112; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i64: 8113; PC64LE9: # %bb.0: # %entry 8114; PC64LE9-NEXT: mtfprd 0, 3 8115; PC64LE9-NEXT: xscvsxddp 1, 0 8116; PC64LE9-NEXT: mtfprd 0, 4 8117; PC64LE9-NEXT: xscvsxddp 2, 0 8118; PC64LE9-NEXT: mtfprd 0, 5 8119; PC64LE9-NEXT: xscvsxddp 3, 0 8120; PC64LE9-NEXT: blr 8121entry: 8122 %result = call <3 x double> 8123 @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64> %x, 8124 metadata !"round.dynamic", 8125 metadata !"fpexcept.strict") #0 8126 ret <3 x double> %result 8127} 8128 8129define <3 x float> @constrained_vector_sitofp_v3f32_v3i64(<3 x i64> %x) #0 { 8130; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i64: 8131; PC64LE: # %bb.0: # %entry 8132; PC64LE-NEXT: mtfprd 0, 3 8133; PC64LE-NEXT: addis 6, 2, .LCPI163_0@toc@ha 8134; PC64LE-NEXT: mtfprd 1, 4 8135; PC64LE-NEXT: addi 3, 6, .LCPI163_0@toc@l 8136; PC64LE-NEXT: xscvsxdsp 0, 0 8137; PC64LE-NEXT: xscvsxdsp 1, 1 8138; PC64LE-NEXT: mtfprd 2, 5 8139; PC64LE-NEXT: xscvsxdsp 2, 2 8140; PC64LE-NEXT: xscvdpspn 0, 0 8141; PC64LE-NEXT: xscvdpspn 1, 1 8142; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 8143; PC64LE-NEXT: xscvdpspn 0, 2 8144; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 8145; PC64LE-NEXT: vmrghw 2, 3, 2 8146; PC64LE-NEXT: lvx 3, 0, 3 8147; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 8148; PC64LE-NEXT: vperm 2, 4, 2, 3 8149; PC64LE-NEXT: blr 8150; 8151; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i64: 8152; PC64LE9: # %bb.0: # %entry 8153; PC64LE9-NEXT: mtfprd 0, 3 8154; PC64LE9-NEXT: addis 3, 2, .LCPI163_0@toc@ha 8155; PC64LE9-NEXT: xscvsxdsp 0, 0 8156; PC64LE9-NEXT: addi 3, 3, .LCPI163_0@toc@l 8157; PC64LE9-NEXT: xscvdpspn 0, 0 8158; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 8159; PC64LE9-NEXT: mtfprd 0, 4 8160; PC64LE9-NEXT: xscvsxdsp 0, 0 8161; PC64LE9-NEXT: xscvdpspn 0, 0 8162; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 8163; PC64LE9-NEXT: mtfprd 0, 5 8164; PC64LE9-NEXT: xscvsxdsp 0, 0 8165; PC64LE9-NEXT: vmrghw 2, 3, 2 8166; PC64LE9-NEXT: lxvx 35, 0, 3 8167; PC64LE9-NEXT: xscvdpspn 0, 0 8168; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 8169; PC64LE9-NEXT: vperm 2, 4, 2, 3 8170; PC64LE9-NEXT: blr 8171entry: 8172 %result = call <3 x float> 8173 @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64> %x, 8174 metadata !"round.dynamic", 8175 metadata !"fpexcept.strict") #0 8176 ret <3 x float> %result 8177} 8178 8179define <4 x double> @constrained_vector_sitofp_v4f64_v4i32(<4 x i32> %x) #0 { 8180; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i32: 8181; PC64LE: # %bb.0: # %entry 8182; PC64LE-NEXT: xxswapd 0, 34 8183; PC64LE-NEXT: mfvsrwz 3, 34 8184; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 8185; PC64LE-NEXT: mtfprwa 2, 3 8186; PC64LE-NEXT: mffprwz 3, 0 8187; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 8188; PC64LE-NEXT: mffprwz 4, 1 8189; PC64LE-NEXT: mtfprwa 1, 3 8190; PC64LE-NEXT: mffprwz 3, 0 8191; PC64LE-NEXT: mtfprwa 3, 4 8192; PC64LE-NEXT: xscvsxddp 0, 2 8193; PC64LE-NEXT: mtfprwa 2, 3 8194; PC64LE-NEXT: xscvsxddp 1, 1 8195; PC64LE-NEXT: xscvsxddp 3, 3 8196; PC64LE-NEXT: xscvsxddp 2, 2 8197; PC64LE-NEXT: xxmrghd 34, 3, 1 8198; PC64LE-NEXT: xxmrghd 35, 2, 0 8199; PC64LE-NEXT: blr 8200; 8201; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i32: 8202; PC64LE9: # %bb.0: # %entry 8203; PC64LE9-NEXT: li 3, 0 8204; PC64LE9-NEXT: vextuwrx 3, 3, 2 8205; PC64LE9-NEXT: mtfprwa 0, 3 8206; PC64LE9-NEXT: li 3, 4 8207; PC64LE9-NEXT: vextuwrx 3, 3, 2 8208; PC64LE9-NEXT: xscvsxddp 0, 0 8209; PC64LE9-NEXT: mtfprwa 1, 3 8210; PC64LE9-NEXT: li 3, 12 8211; PC64LE9-NEXT: xscvsxddp 1, 1 8212; PC64LE9-NEXT: vextuwrx 3, 3, 2 8213; PC64LE9-NEXT: xxmrghd 0, 1, 0 8214; PC64LE9-NEXT: mtfprwa 1, 3 8215; PC64LE9-NEXT: mfvsrwz 3, 34 8216; PC64LE9-NEXT: mtfprwa 2, 3 8217; PC64LE9-NEXT: xscvsxddp 1, 1 8218; PC64LE9-NEXT: xscvsxddp 2, 2 8219; PC64LE9-NEXT: xxlor 34, 0, 0 8220; PC64LE9-NEXT: xxmrghd 35, 1, 2 8221; PC64LE9-NEXT: blr 8222entry: 8223 %result = call <4 x double> 8224 @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32> %x, 8225 metadata !"round.dynamic", 8226 metadata !"fpexcept.strict") #0 8227 ret <4 x double> %result 8228} 8229 8230define <4 x float> @constrained_vector_sitofp_v4f32_v4i16(<4 x i16> %x) #0 { 8231; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i16: 8232; PC64LE: # %bb.0: # %entry 8233; PC64LE-NEXT: vmrglh 2, 2, 2 8234; PC64LE-NEXT: vspltisw 3, 8 8235; PC64LE-NEXT: vadduwm 3, 3, 3 8236; PC64LE-NEXT: vslw 2, 2, 3 8237; PC64LE-NEXT: vsraw 2, 2, 3 8238; PC64LE-NEXT: xvcvsxwsp 34, 34 8239; PC64LE-NEXT: blr 8240; 8241; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i16: 8242; PC64LE9: # %bb.0: # %entry 8243; PC64LE9-NEXT: vmrglh 2, 2, 2 8244; PC64LE9-NEXT: vextsh2w 2, 2 8245; PC64LE9-NEXT: xvcvsxwsp 34, 34 8246; PC64LE9-NEXT: blr 8247entry: 8248 %result = call <4 x float> 8249 @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16> %x, 8250 metadata !"round.dynamic", 8251 metadata !"fpexcept.strict") #0 8252 ret <4 x float> %result 8253} 8254 8255define <4 x float> @constrained_vector_sitofp_v4f32_v4i32(<4 x i32> %x) #0 { 8256; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i32: 8257; PC64LE: # %bb.0: # %entry 8258; PC64LE-NEXT: xvcvsxwsp 34, 34 8259; PC64LE-NEXT: blr 8260; 8261; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i32: 8262; PC64LE9: # %bb.0: # %entry 8263; PC64LE9-NEXT: xvcvsxwsp 34, 34 8264; PC64LE9-NEXT: blr 8265entry: 8266 %result = call <4 x float> 8267 @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32> %x, 8268 metadata !"round.dynamic", 8269 metadata !"fpexcept.strict") #0 8270 ret <4 x float> %result 8271} 8272 8273define <4 x double> @constrained_vector_sitofp_v4f64_v4i64(<4 x i64> %x) #0 { 8274; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i64: 8275; PC64LE: # %bb.0: # %entry 8276; PC64LE-NEXT: xvcvsxddp 35, 35 8277; PC64LE-NEXT: xvcvsxddp 34, 34 8278; PC64LE-NEXT: blr 8279; 8280; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i64: 8281; PC64LE9: # %bb.0: # %entry 8282; PC64LE9-NEXT: xvcvsxddp 35, 35 8283; PC64LE9-NEXT: xvcvsxddp 34, 34 8284; PC64LE9-NEXT: blr 8285entry: 8286 %result = call <4 x double> 8287 @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64> %x, 8288 metadata !"round.dynamic", 8289 metadata !"fpexcept.strict") #0 8290 ret <4 x double> %result 8291} 8292 8293define <4 x float> @constrained_vector_sitofp_v4f32_v4i64(<4 x i64> %x) #0 { 8294; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i64: 8295; PC64LE: # %bb.0: # %entry 8296; PC64LE-NEXT: xxswapd 0, 34 8297; PC64LE-NEXT: mfvsrd 3, 34 8298; PC64LE-NEXT: xxswapd 2, 35 8299; PC64LE-NEXT: mfvsrd 4, 35 8300; PC64LE-NEXT: mtfprd 1, 3 8301; PC64LE-NEXT: mffprd 3, 0 8302; PC64LE-NEXT: mtfprd 0, 4 8303; PC64LE-NEXT: mtfprd 3, 3 8304; PC64LE-NEXT: mffprd 3, 2 8305; PC64LE-NEXT: xscvsxdsp 1, 1 8306; PC64LE-NEXT: mtfprd 2, 3 8307; PC64LE-NEXT: xscvsxdsp 0, 0 8308; PC64LE-NEXT: xscvsxdsp 3, 3 8309; PC64LE-NEXT: xscvsxdsp 2, 2 8310; PC64LE-NEXT: xxmrghd 0, 0, 1 8311; PC64LE-NEXT: xxmrghd 1, 2, 3 8312; PC64LE-NEXT: xvcvdpsp 34, 0 8313; PC64LE-NEXT: xvcvdpsp 35, 1 8314; PC64LE-NEXT: vmrgew 2, 2, 3 8315; PC64LE-NEXT: blr 8316; 8317; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i64: 8318; PC64LE9: # %bb.0: # %entry 8319; PC64LE9-NEXT: mfvsrld 3, 34 8320; PC64LE9-NEXT: mtfprd 0, 3 8321; PC64LE9-NEXT: mfvsrld 3, 35 8322; PC64LE9-NEXT: xscvsxdsp 0, 0 8323; PC64LE9-NEXT: mtfprd 1, 3 8324; PC64LE9-NEXT: mfvsrd 3, 34 8325; PC64LE9-NEXT: xscvsxdsp 1, 1 8326; PC64LE9-NEXT: xxmrghd 0, 1, 0 8327; PC64LE9-NEXT: xvcvdpsp 36, 0 8328; PC64LE9-NEXT: mtfprd 0, 3 8329; PC64LE9-NEXT: mfvsrd 3, 35 8330; PC64LE9-NEXT: mtfprd 1, 3 8331; PC64LE9-NEXT: xscvsxdsp 0, 0 8332; PC64LE9-NEXT: xscvsxdsp 1, 1 8333; PC64LE9-NEXT: xxmrghd 0, 1, 0 8334; PC64LE9-NEXT: xvcvdpsp 34, 0 8335; PC64LE9-NEXT: vmrgew 2, 2, 4 8336; PC64LE9-NEXT: blr 8337entry: 8338 %result = call <4 x float> 8339 @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64> %x, 8340 metadata !"round.dynamic", 8341 metadata !"fpexcept.strict") #0 8342 ret <4 x float> %result 8343} 8344 8345define <1 x double> @constrained_vector_uitofp_v1f64_v1i32(<1 x i32> %x) #0 { 8346; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i32: 8347; PC64LE: # %bb.0: # %entry 8348; PC64LE-NEXT: mtfprwz 0, 3 8349; PC64LE-NEXT: xscvuxddp 1, 0 8350; PC64LE-NEXT: blr 8351; 8352; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i32: 8353; PC64LE9: # %bb.0: # %entry 8354; PC64LE9-NEXT: mtfprwz 0, 3 8355; PC64LE9-NEXT: xscvuxddp 1, 0 8356; PC64LE9-NEXT: blr 8357entry: 8358 %result = call <1 x double> 8359 @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32> %x, 8360 metadata !"round.dynamic", 8361 metadata !"fpexcept.strict") #0 8362 ret <1 x double> %result 8363} 8364 8365define <1 x float> @constrained_vector_uitofp_v1f32_v1i32(<1 x i32> %x) #0 { 8366; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i32: 8367; PC64LE: # %bb.0: # %entry 8368; PC64LE-NEXT: mtfprwz 0, 3 8369; PC64LE-NEXT: xscvuxdsp 1, 0 8370; PC64LE-NEXT: blr 8371; 8372; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i32: 8373; PC64LE9: # %bb.0: # %entry 8374; PC64LE9-NEXT: mtfprwz 0, 3 8375; PC64LE9-NEXT: xscvuxdsp 1, 0 8376; PC64LE9-NEXT: blr 8377entry: 8378 %result = call <1 x float> 8379 @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32> %x, 8380 metadata !"round.dynamic", 8381 metadata !"fpexcept.strict") #0 8382 ret <1 x float> %result 8383} 8384 8385define <1 x double> @constrained_vector_uitofp_v1f64_v1i64(<1 x i64> %x) #0 { 8386; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i64: 8387; PC64LE: # %bb.0: # %entry 8388; PC64LE-NEXT: mtfprd 0, 3 8389; PC64LE-NEXT: xscvuxddp 1, 0 8390; PC64LE-NEXT: blr 8391; 8392; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i64: 8393; PC64LE9: # %bb.0: # %entry 8394; PC64LE9-NEXT: mtfprd 0, 3 8395; PC64LE9-NEXT: xscvuxddp 1, 0 8396; PC64LE9-NEXT: blr 8397entry: 8398 %result = call <1 x double> 8399 @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64> %x, 8400 metadata !"round.dynamic", 8401 metadata !"fpexcept.strict") #0 8402 ret <1 x double> %result 8403} 8404 8405define <1 x float> @constrained_vector_uitofp_v1f32_v1i64(<1 x i64> %x) #0 { 8406; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i64: 8407; PC64LE: # %bb.0: # %entry 8408; PC64LE-NEXT: mtfprd 0, 3 8409; PC64LE-NEXT: xscvuxdsp 1, 0 8410; PC64LE-NEXT: blr 8411; 8412; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i64: 8413; PC64LE9: # %bb.0: # %entry 8414; PC64LE9-NEXT: mtfprd 0, 3 8415; PC64LE9-NEXT: xscvuxdsp 1, 0 8416; PC64LE9-NEXT: blr 8417entry: 8418 %result = call <1 x float> 8419 @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64> %x, 8420 metadata !"round.dynamic", 8421 metadata !"fpexcept.strict") #0 8422 ret <1 x float> %result 8423} 8424 8425define <2 x double> @constrained_vector_uitofp_v2f64_v2i16(<2 x i16> %x) #0 { 8426; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i16: 8427; PC64LE: # %bb.0: # %entry 8428; PC64LE-NEXT: addis 3, 2, .LCPI173_0@toc@ha 8429; PC64LE-NEXT: xxlxor 36, 36, 36 8430; PC64LE-NEXT: addi 3, 3, .LCPI173_0@toc@l 8431; PC64LE-NEXT: lvx 3, 0, 3 8432; PC64LE-NEXT: vperm 2, 4, 2, 3 8433; PC64LE-NEXT: xvcvuxddp 34, 34 8434; PC64LE-NEXT: blr 8435; 8436; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i16: 8437; PC64LE9: # %bb.0: # %entry 8438; PC64LE9-NEXT: addis 3, 2, .LCPI173_0@toc@ha 8439; PC64LE9-NEXT: xxlxor 36, 36, 36 8440; PC64LE9-NEXT: addi 3, 3, .LCPI173_0@toc@l 8441; PC64LE9-NEXT: lxvx 35, 0, 3 8442; PC64LE9-NEXT: vperm 2, 4, 2, 3 8443; PC64LE9-NEXT: xvcvuxddp 34, 34 8444; PC64LE9-NEXT: blr 8445entry: 8446 %result = call <2 x double> 8447 @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16> %x, 8448 metadata !"round.dynamic", 8449 metadata !"fpexcept.strict") #0 8450 ret <2 x double> %result 8451} 8452 8453define <2 x double> @constrained_vector_uitofp_v2f64_v2i32(<2 x i32> %x) #0 { 8454; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i32: 8455; PC64LE: # %bb.0: # %entry 8456; PC64LE-NEXT: xxswapd 0, 34 8457; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 8458; PC64LE-NEXT: mffprwz 3, 0 8459; PC64LE-NEXT: mffprwz 4, 1 8460; PC64LE-NEXT: mtfprwz 0, 3 8461; PC64LE-NEXT: mtfprwz 1, 4 8462; PC64LE-NEXT: xscvuxddp 0, 0 8463; PC64LE-NEXT: xscvuxddp 1, 1 8464; PC64LE-NEXT: xxmrghd 34, 1, 0 8465; PC64LE-NEXT: blr 8466; 8467; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i32: 8468; PC64LE9: # %bb.0: # %entry 8469; PC64LE9-NEXT: li 3, 0 8470; PC64LE9-NEXT: vextuwrx 3, 3, 2 8471; PC64LE9-NEXT: mtfprwz 0, 3 8472; PC64LE9-NEXT: li 3, 4 8473; PC64LE9-NEXT: vextuwrx 3, 3, 2 8474; PC64LE9-NEXT: xscvuxddp 0, 0 8475; PC64LE9-NEXT: mtfprwz 1, 3 8476; PC64LE9-NEXT: xscvuxddp 1, 1 8477; PC64LE9-NEXT: xxmrghd 34, 1, 0 8478; PC64LE9-NEXT: blr 8479entry: 8480 %result = call <2 x double> 8481 @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32> %x, 8482 metadata !"round.dynamic", 8483 metadata !"fpexcept.strict") #0 8484 ret <2 x double> %result 8485} 8486 8487define <2 x float> @constrained_vector_uitofp_v2f32_v2i32(<2 x i32> %x) #0 { 8488; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i32: 8489; PC64LE: # %bb.0: # %entry 8490; PC64LE-NEXT: xxswapd 0, 34 8491; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 8492; PC64LE-NEXT: mffprwz 3, 0 8493; PC64LE-NEXT: mffprwz 4, 1 8494; PC64LE-NEXT: mtfprwz 0, 3 8495; PC64LE-NEXT: mtfprwz 1, 4 8496; PC64LE-NEXT: xscvuxdsp 0, 0 8497; PC64LE-NEXT: xscvuxdsp 1, 1 8498; PC64LE-NEXT: xscvdpspn 0, 0 8499; PC64LE-NEXT: xscvdpspn 1, 1 8500; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 8501; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 8502; PC64LE-NEXT: vmrghw 2, 3, 2 8503; PC64LE-NEXT: blr 8504; 8505; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i32: 8506; PC64LE9: # %bb.0: # %entry 8507; PC64LE9-NEXT: li 3, 0 8508; PC64LE9-NEXT: vextuwrx 3, 3, 2 8509; PC64LE9-NEXT: mtfprwz 0, 3 8510; PC64LE9-NEXT: li 3, 4 8511; PC64LE9-NEXT: xscvuxdsp 0, 0 8512; PC64LE9-NEXT: vextuwrx 3, 3, 2 8513; PC64LE9-NEXT: xscvdpspn 0, 0 8514; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 8515; PC64LE9-NEXT: mtfprwz 0, 3 8516; PC64LE9-NEXT: xscvuxdsp 0, 0 8517; PC64LE9-NEXT: xscvdpspn 0, 0 8518; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 8519; PC64LE9-NEXT: vmrghw 2, 2, 3 8520; PC64LE9-NEXT: blr 8521entry: 8522 %result = call <2 x float> 8523 @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32> %x, 8524 metadata !"round.dynamic", 8525 metadata !"fpexcept.strict") #0 8526 ret <2 x float> %result 8527} 8528 8529define <2 x double> @constrained_vector_uitofp_v2f64_v2i64(<2 x i64> %x) #0 { 8530; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i64: 8531; PC64LE: # %bb.0: # %entry 8532; PC64LE-NEXT: xvcvuxddp 34, 34 8533; PC64LE-NEXT: blr 8534; 8535; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i64: 8536; PC64LE9: # %bb.0: # %entry 8537; PC64LE9-NEXT: xvcvuxddp 34, 34 8538; PC64LE9-NEXT: blr 8539entry: 8540 %result = call <2 x double> 8541 @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64> %x, 8542 metadata !"round.dynamic", 8543 metadata !"fpexcept.strict") #0 8544 ret <2 x double> %result 8545} 8546 8547define <2 x float> @constrained_vector_uitofp_v2f32_v2i64(<2 x i64> %x) #0 { 8548; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i64: 8549; PC64LE: # %bb.0: # %entry 8550; PC64LE-NEXT: xxswapd 0, 34 8551; PC64LE-NEXT: mfvsrd 3, 34 8552; PC64LE-NEXT: mffprd 4, 0 8553; PC64LE-NEXT: mtfprd 0, 3 8554; PC64LE-NEXT: mtfprd 1, 4 8555; PC64LE-NEXT: xscvuxdsp 0, 0 8556; PC64LE-NEXT: xscvuxdsp 1, 1 8557; PC64LE-NEXT: xscvdpspn 0, 0 8558; PC64LE-NEXT: xscvdpspn 1, 1 8559; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 8560; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 8561; PC64LE-NEXT: vmrghw 2, 2, 3 8562; PC64LE-NEXT: blr 8563; 8564; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i64: 8565; PC64LE9: # %bb.0: # %entry 8566; PC64LE9-NEXT: mfvsrld 3, 34 8567; PC64LE9-NEXT: mtfprd 0, 3 8568; PC64LE9-NEXT: mfvsrd 3, 34 8569; PC64LE9-NEXT: xscvuxdsp 0, 0 8570; PC64LE9-NEXT: xscvdpspn 0, 0 8571; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 8572; PC64LE9-NEXT: mtfprd 0, 3 8573; PC64LE9-NEXT: xscvuxdsp 0, 0 8574; PC64LE9-NEXT: xscvdpspn 0, 0 8575; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 8576; PC64LE9-NEXT: vmrghw 2, 2, 3 8577; PC64LE9-NEXT: blr 8578entry: 8579 %result = call <2 x float> 8580 @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64> %x, 8581 metadata !"round.dynamic", 8582 metadata !"fpexcept.strict") #0 8583 ret <2 x float> %result 8584} 8585 8586define <3 x double> @constrained_vector_uitofp_v3f64_v3i32(<3 x i32> %x) #0 { 8587; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i32: 8588; PC64LE: # %bb.0: # %entry 8589; PC64LE-NEXT: xxswapd 0, 34 8590; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 8591; PC64LE-NEXT: mfvsrwz 3, 34 8592; PC64LE-NEXT: mtfprwz 3, 3 8593; PC64LE-NEXT: mffprwz 3, 0 8594; PC64LE-NEXT: mffprwz 4, 1 8595; PC64LE-NEXT: mtfprwz 0, 3 8596; PC64LE-NEXT: mtfprwz 2, 4 8597; PC64LE-NEXT: xscvuxddp 1, 0 8598; PC64LE-NEXT: xscvuxddp 2, 2 8599; PC64LE-NEXT: xscvuxddp 3, 3 8600; PC64LE-NEXT: blr 8601; 8602; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i32: 8603; PC64LE9: # %bb.0: # %entry 8604; PC64LE9-NEXT: li 3, 0 8605; PC64LE9-NEXT: vextuwrx 3, 3, 2 8606; PC64LE9-NEXT: mtfprwz 0, 3 8607; PC64LE9-NEXT: li 3, 4 8608; PC64LE9-NEXT: vextuwrx 3, 3, 2 8609; PC64LE9-NEXT: xscvuxddp 1, 0 8610; PC64LE9-NEXT: mtfprwz 0, 3 8611; PC64LE9-NEXT: mfvsrwz 3, 34 8612; PC64LE9-NEXT: xscvuxddp 2, 0 8613; PC64LE9-NEXT: mtfprwz 0, 3 8614; PC64LE9-NEXT: xscvuxddp 3, 0 8615; PC64LE9-NEXT: blr 8616entry: 8617 %result = call <3 x double> 8618 @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32> %x, 8619 metadata !"round.dynamic", 8620 metadata !"fpexcept.strict") #0 8621 ret <3 x double> %result 8622} 8623 8624define <3 x float> @constrained_vector_uitofp_v3f32_v3i32(<3 x i32> %x) #0 { 8625; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i32: 8626; PC64LE: # %bb.0: # %entry 8627; PC64LE-NEXT: xxswapd 0, 34 8628; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 8629; PC64LE-NEXT: addis 3, 2, .LCPI179_0@toc@ha 8630; PC64LE-NEXT: addi 3, 3, .LCPI179_0@toc@l 8631; PC64LE-NEXT: mffprwz 4, 0 8632; PC64LE-NEXT: mffprwz 5, 1 8633; PC64LE-NEXT: mtfprwz 0, 4 8634; PC64LE-NEXT: mtfprwz 1, 5 8635; PC64LE-NEXT: xscvuxdsp 0, 0 8636; PC64LE-NEXT: xscvuxdsp 1, 1 8637; PC64LE-NEXT: mfvsrwz 4, 34 8638; PC64LE-NEXT: mtfprwz 2, 4 8639; PC64LE-NEXT: xscvuxdsp 2, 2 8640; PC64LE-NEXT: xscvdpspn 0, 0 8641; PC64LE-NEXT: xscvdpspn 1, 1 8642; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 8643; PC64LE-NEXT: xscvdpspn 0, 2 8644; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 8645; PC64LE-NEXT: vmrghw 2, 3, 2 8646; PC64LE-NEXT: lvx 3, 0, 3 8647; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 8648; PC64LE-NEXT: vperm 2, 4, 2, 3 8649; PC64LE-NEXT: blr 8650; 8651; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i32: 8652; PC64LE9: # %bb.0: # %entry 8653; PC64LE9-NEXT: li 3, 0 8654; PC64LE9-NEXT: vextuwrx 3, 3, 2 8655; PC64LE9-NEXT: mtfprwz 0, 3 8656; PC64LE9-NEXT: li 3, 4 8657; PC64LE9-NEXT: xscvuxdsp 0, 0 8658; PC64LE9-NEXT: vextuwrx 3, 3, 2 8659; PC64LE9-NEXT: xscvdpspn 0, 0 8660; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 8661; PC64LE9-NEXT: mtfprwz 0, 3 8662; PC64LE9-NEXT: addis 3, 2, .LCPI179_0@toc@ha 8663; PC64LE9-NEXT: xscvuxdsp 0, 0 8664; PC64LE9-NEXT: addi 3, 3, .LCPI179_0@toc@l 8665; PC64LE9-NEXT: xscvdpspn 0, 0 8666; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 8667; PC64LE9-NEXT: vmrghw 3, 4, 3 8668; PC64LE9-NEXT: lxvx 36, 0, 3 8669; PC64LE9-NEXT: mfvsrwz 3, 34 8670; PC64LE9-NEXT: mtfprwz 0, 3 8671; PC64LE9-NEXT: xscvuxdsp 0, 0 8672; PC64LE9-NEXT: xscvdpspn 0, 0 8673; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 8674; PC64LE9-NEXT: vperm 2, 2, 3, 4 8675; PC64LE9-NEXT: blr 8676entry: 8677 %result = call <3 x float> 8678 @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32> %x, 8679 metadata !"round.dynamic", 8680 metadata !"fpexcept.strict") #0 8681 ret <3 x float> %result 8682} 8683 8684define <3 x double> @constrained_vector_uitofp_v3f64_v3i64(<3 x i64> %x) #0 { 8685; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i64: 8686; PC64LE: # %bb.0: # %entry 8687; PC64LE-NEXT: mtfprd 0, 3 8688; PC64LE-NEXT: mtfprd 2, 4 8689; PC64LE-NEXT: mtfprd 3, 5 8690; PC64LE-NEXT: xscvuxddp 1, 0 8691; PC64LE-NEXT: xscvuxddp 2, 2 8692; PC64LE-NEXT: xscvuxddp 3, 3 8693; PC64LE-NEXT: blr 8694; 8695; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i64: 8696; PC64LE9: # %bb.0: # %entry 8697; PC64LE9-NEXT: mtfprd 0, 3 8698; PC64LE9-NEXT: xscvuxddp 1, 0 8699; PC64LE9-NEXT: mtfprd 0, 4 8700; PC64LE9-NEXT: xscvuxddp 2, 0 8701; PC64LE9-NEXT: mtfprd 0, 5 8702; PC64LE9-NEXT: xscvuxddp 3, 0 8703; PC64LE9-NEXT: blr 8704entry: 8705 %result = call <3 x double> 8706 @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64> %x, 8707 metadata !"round.dynamic", 8708 metadata !"fpexcept.strict") #0 8709 ret <3 x double> %result 8710} 8711 8712define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 { 8713; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i64: 8714; PC64LE: # %bb.0: # %entry 8715; PC64LE-NEXT: mtfprd 0, 3 8716; PC64LE-NEXT: addis 6, 2, .LCPI181_0@toc@ha 8717; PC64LE-NEXT: mtfprd 1, 4 8718; PC64LE-NEXT: addi 3, 6, .LCPI181_0@toc@l 8719; PC64LE-NEXT: xscvuxdsp 0, 0 8720; PC64LE-NEXT: xscvuxdsp 1, 1 8721; PC64LE-NEXT: mtfprd 2, 5 8722; PC64LE-NEXT: xscvuxdsp 2, 2 8723; PC64LE-NEXT: xscvdpspn 0, 0 8724; PC64LE-NEXT: xscvdpspn 1, 1 8725; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 8726; PC64LE-NEXT: xscvdpspn 0, 2 8727; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 8728; PC64LE-NEXT: vmrghw 2, 3, 2 8729; PC64LE-NEXT: lvx 3, 0, 3 8730; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 8731; PC64LE-NEXT: vperm 2, 4, 2, 3 8732; PC64LE-NEXT: blr 8733; 8734; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i64: 8735; PC64LE9: # %bb.0: # %entry 8736; PC64LE9-NEXT: mtfprd 0, 3 8737; PC64LE9-NEXT: addis 3, 2, .LCPI181_0@toc@ha 8738; PC64LE9-NEXT: xscvuxdsp 0, 0 8739; PC64LE9-NEXT: addi 3, 3, .LCPI181_0@toc@l 8740; PC64LE9-NEXT: xscvdpspn 0, 0 8741; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 8742; PC64LE9-NEXT: mtfprd 0, 4 8743; PC64LE9-NEXT: xscvuxdsp 0, 0 8744; PC64LE9-NEXT: xscvdpspn 0, 0 8745; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 8746; PC64LE9-NEXT: mtfprd 0, 5 8747; PC64LE9-NEXT: xscvuxdsp 0, 0 8748; PC64LE9-NEXT: vmrghw 2, 3, 2 8749; PC64LE9-NEXT: lxvx 35, 0, 3 8750; PC64LE9-NEXT: xscvdpspn 0, 0 8751; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 8752; PC64LE9-NEXT: vperm 2, 4, 2, 3 8753; PC64LE9-NEXT: blr 8754entry: 8755 %result = call <3 x float> 8756 @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64> %x, 8757 metadata !"round.dynamic", 8758 metadata !"fpexcept.strict") #0 8759 ret <3 x float> %result 8760} 8761 8762define <4 x double> @constrained_vector_uitofp_v4f64_v4i32(<4 x i32> %x) #0 { 8763; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i32: 8764; PC64LE: # %bb.0: # %entry 8765; PC64LE-NEXT: xxswapd 0, 34 8766; PC64LE-NEXT: mfvsrwz 3, 34 8767; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 8768; PC64LE-NEXT: mtfprwz 2, 3 8769; PC64LE-NEXT: mffprwz 3, 0 8770; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 8771; PC64LE-NEXT: mffprwz 4, 1 8772; PC64LE-NEXT: mtfprwz 1, 3 8773; PC64LE-NEXT: mffprwz 3, 0 8774; PC64LE-NEXT: mtfprwz 3, 4 8775; PC64LE-NEXT: xscvuxddp 0, 2 8776; PC64LE-NEXT: mtfprwz 2, 3 8777; PC64LE-NEXT: xscvuxddp 1, 1 8778; PC64LE-NEXT: xscvuxddp 3, 3 8779; PC64LE-NEXT: xscvuxddp 2, 2 8780; PC64LE-NEXT: xxmrghd 34, 3, 1 8781; PC64LE-NEXT: xxmrghd 35, 2, 0 8782; PC64LE-NEXT: blr 8783; 8784; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i32: 8785; PC64LE9: # %bb.0: # %entry 8786; PC64LE9-NEXT: li 3, 0 8787; PC64LE9-NEXT: vextuwrx 3, 3, 2 8788; PC64LE9-NEXT: mtfprwz 0, 3 8789; PC64LE9-NEXT: li 3, 4 8790; PC64LE9-NEXT: vextuwrx 3, 3, 2 8791; PC64LE9-NEXT: xscvuxddp 0, 0 8792; PC64LE9-NEXT: mtfprwz 1, 3 8793; PC64LE9-NEXT: li 3, 12 8794; PC64LE9-NEXT: xscvuxddp 1, 1 8795; PC64LE9-NEXT: vextuwrx 3, 3, 2 8796; PC64LE9-NEXT: xxmrghd 0, 1, 0 8797; PC64LE9-NEXT: mtfprwz 1, 3 8798; PC64LE9-NEXT: mfvsrwz 3, 34 8799; PC64LE9-NEXT: mtfprwz 2, 3 8800; PC64LE9-NEXT: xscvuxddp 1, 1 8801; PC64LE9-NEXT: xscvuxddp 2, 2 8802; PC64LE9-NEXT: xxlor 34, 0, 0 8803; PC64LE9-NEXT: xxmrghd 35, 1, 2 8804; PC64LE9-NEXT: blr 8805entry: 8806 %result = call <4 x double> 8807 @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32> %x, 8808 metadata !"round.dynamic", 8809 metadata !"fpexcept.strict") #0 8810 ret <4 x double> %result 8811} 8812 8813define <4 x float> @constrained_vector_uitofp_v4f32_v4i16(<4 x i16> %x) #0 { 8814; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i16: 8815; PC64LE: # %bb.0: # %entry 8816; PC64LE-NEXT: xxlxor 35, 35, 35 8817; PC64LE-NEXT: vmrglh 2, 3, 2 8818; PC64LE-NEXT: xvcvuxwsp 34, 34 8819; PC64LE-NEXT: blr 8820; 8821; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i16: 8822; PC64LE9: # %bb.0: # %entry 8823; PC64LE9-NEXT: xxlxor 35, 35, 35 8824; PC64LE9-NEXT: vmrglh 2, 3, 2 8825; PC64LE9-NEXT: xvcvuxwsp 34, 34 8826; PC64LE9-NEXT: blr 8827entry: 8828 %result = call <4 x float> 8829 @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16> %x, 8830 metadata !"round.dynamic", 8831 metadata !"fpexcept.strict") #0 8832 ret <4 x float> %result 8833} 8834 8835define <4 x float> @constrained_vector_uitofp_v4f32_v4i32(<4 x i32> %x) #0 { 8836; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i32: 8837; PC64LE: # %bb.0: # %entry 8838; PC64LE-NEXT: xvcvuxwsp 34, 34 8839; PC64LE-NEXT: blr 8840; 8841; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i32: 8842; PC64LE9: # %bb.0: # %entry 8843; PC64LE9-NEXT: xvcvuxwsp 34, 34 8844; PC64LE9-NEXT: blr 8845entry: 8846 %result = call <4 x float> 8847 @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32> %x, 8848 metadata !"round.dynamic", 8849 metadata !"fpexcept.strict") #0 8850 ret <4 x float> %result 8851} 8852 8853define <4 x double> @constrained_vector_uitofp_v4f64_v4i64(<4 x i64> %x) #0 { 8854; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i64: 8855; PC64LE: # %bb.0: # %entry 8856; PC64LE-NEXT: xvcvuxddp 35, 35 8857; PC64LE-NEXT: xvcvuxddp 34, 34 8858; PC64LE-NEXT: blr 8859; 8860; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i64: 8861; PC64LE9: # %bb.0: # %entry 8862; PC64LE9-NEXT: xvcvuxddp 35, 35 8863; PC64LE9-NEXT: xvcvuxddp 34, 34 8864; PC64LE9-NEXT: blr 8865entry: 8866 %result = call <4 x double> 8867 @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64> %x, 8868 metadata !"round.dynamic", 8869 metadata !"fpexcept.strict") #0 8870 ret <4 x double> %result 8871} 8872 8873define <4 x float> @constrained_vector_uitofp_v4f32_v4i64(<4 x i64> %x) #0 { 8874; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i64: 8875; PC64LE: # %bb.0: # %entry 8876; PC64LE-NEXT: xxswapd 0, 34 8877; PC64LE-NEXT: mfvsrd 3, 34 8878; PC64LE-NEXT: xxswapd 2, 35 8879; PC64LE-NEXT: mfvsrd 4, 35 8880; PC64LE-NEXT: mtfprd 1, 3 8881; PC64LE-NEXT: mffprd 3, 0 8882; PC64LE-NEXT: mtfprd 0, 4 8883; PC64LE-NEXT: mtfprd 3, 3 8884; PC64LE-NEXT: mffprd 3, 2 8885; PC64LE-NEXT: xscvuxdsp 1, 1 8886; PC64LE-NEXT: mtfprd 2, 3 8887; PC64LE-NEXT: xscvuxdsp 0, 0 8888; PC64LE-NEXT: xscvuxdsp 3, 3 8889; PC64LE-NEXT: xscvuxdsp 2, 2 8890; PC64LE-NEXT: xxmrghd 0, 0, 1 8891; PC64LE-NEXT: xxmrghd 1, 2, 3 8892; PC64LE-NEXT: xvcvdpsp 34, 0 8893; PC64LE-NEXT: xvcvdpsp 35, 1 8894; PC64LE-NEXT: vmrgew 2, 2, 3 8895; PC64LE-NEXT: blr 8896; 8897; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i64: 8898; PC64LE9: # %bb.0: # %entry 8899; PC64LE9-NEXT: mfvsrld 3, 34 8900; PC64LE9-NEXT: mtfprd 0, 3 8901; PC64LE9-NEXT: mfvsrld 3, 35 8902; PC64LE9-NEXT: xscvuxdsp 0, 0 8903; PC64LE9-NEXT: mtfprd 1, 3 8904; PC64LE9-NEXT: mfvsrd 3, 34 8905; PC64LE9-NEXT: xscvuxdsp 1, 1 8906; PC64LE9-NEXT: xxmrghd 0, 1, 0 8907; PC64LE9-NEXT: xvcvdpsp 36, 0 8908; PC64LE9-NEXT: mtfprd 0, 3 8909; PC64LE9-NEXT: mfvsrd 3, 35 8910; PC64LE9-NEXT: mtfprd 1, 3 8911; PC64LE9-NEXT: xscvuxdsp 0, 0 8912; PC64LE9-NEXT: xscvuxdsp 1, 1 8913; PC64LE9-NEXT: xxmrghd 0, 1, 0 8914; PC64LE9-NEXT: xvcvdpsp 34, 0 8915; PC64LE9-NEXT: vmrgew 2, 2, 4 8916; PC64LE9-NEXT: blr 8917entry: 8918 %result = call <4 x float> 8919 @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64> %x, 8920 metadata !"round.dynamic", 8921 metadata !"fpexcept.strict") #0 8922 ret <4 x float> %result 8923} 8924 8925attributes #0 = { nounwind strictfp noimplicitfloat } 8926attributes #1 = { strictfp } 8927 8928; Single width declarations 8929declare <2 x double> @llvm.experimental.constrained.fadd.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8930declare <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8931declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8932declare <2 x double> @llvm.experimental.constrained.fdiv.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8933declare <2 x double> @llvm.experimental.constrained.frem.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8934declare <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double>, metadata, metadata) 8935declare <2 x double> @llvm.experimental.constrained.pow.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8936declare <2 x double> @llvm.experimental.constrained.powi.v2f64(<2 x double>, i32, metadata, metadata) 8937declare <2 x double> @llvm.experimental.constrained.sin.v2f64(<2 x double>, metadata, metadata) 8938declare <2 x double> @llvm.experimental.constrained.cos.v2f64(<2 x double>, metadata, metadata) 8939declare <2 x double> @llvm.experimental.constrained.exp.v2f64(<2 x double>, metadata, metadata) 8940declare <2 x double> @llvm.experimental.constrained.exp2.v2f64(<2 x double>, metadata, metadata) 8941declare <2 x double> @llvm.experimental.constrained.log.v2f64(<2 x double>, metadata, metadata) 8942declare <2 x double> @llvm.experimental.constrained.log10.v2f64(<2 x double>, metadata, metadata) 8943declare <2 x double> @llvm.experimental.constrained.log2.v2f64(<2 x double>, metadata, metadata) 8944declare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata) 8945declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata) 8946declare <2 x double> @llvm.experimental.constrained.maxnum.v2f64(<2 x double>, <2 x double>, metadata) 8947declare <2 x double> @llvm.experimental.constrained.minnum.v2f64(<2 x double>, <2 x double>, metadata) 8948declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32(<2 x float>, metadata) 8949declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32(<2 x float>, metadata) 8950declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(<2 x double>, metadata) 8951declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(<2 x double>, metadata) 8952declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32(<2 x float>, metadata) 8953declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32(<2 x float>, metadata) 8954declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(<2 x double>, metadata) 8955declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(<2 x double>, metadata) 8956declare <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(<2 x double>, metadata, metadata) 8957declare <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(<2 x float>, metadata) 8958declare <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double>, metadata) 8959declare <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double>, metadata) 8960declare <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double>, metadata) 8961declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata) 8962declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16>, metadata, metadata) 8963declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16>, metadata, metadata) 8964declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32>, metadata, metadata) 8965declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32>, metadata, metadata) 8966declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64>, metadata, metadata) 8967declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64>, metadata, metadata) 8968declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32>, metadata, metadata) 8969declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32>, metadata, metadata) 8970declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64>, metadata, metadata) 8971declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64>, metadata, metadata) 8972 8973; Scalar width declarations 8974declare <1 x float> @llvm.experimental.constrained.fadd.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8975declare <1 x float> @llvm.experimental.constrained.fsub.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8976declare <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8977declare <1 x float> @llvm.experimental.constrained.fdiv.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8978declare <1 x float> @llvm.experimental.constrained.frem.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8979declare <1 x float> @llvm.experimental.constrained.sqrt.v1f32(<1 x float>, metadata, metadata) 8980declare <1 x float> @llvm.experimental.constrained.pow.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8981declare <1 x float> @llvm.experimental.constrained.powi.v1f32(<1 x float>, i32, metadata, metadata) 8982declare <1 x float> @llvm.experimental.constrained.sin.v1f32(<1 x float>, metadata, metadata) 8983declare <1 x float> @llvm.experimental.constrained.cos.v1f32(<1 x float>, metadata, metadata) 8984declare <1 x float> @llvm.experimental.constrained.exp.v1f32(<1 x float>, metadata, metadata) 8985declare <1 x float> @llvm.experimental.constrained.exp2.v1f32(<1 x float>, metadata, metadata) 8986declare <1 x float> @llvm.experimental.constrained.log.v1f32(<1 x float>, metadata, metadata) 8987declare <1 x float> @llvm.experimental.constrained.log10.v1f32(<1 x float>, metadata, metadata) 8988declare <1 x float> @llvm.experimental.constrained.log2.v1f32(<1 x float>, metadata, metadata) 8989declare <1 x float> @llvm.experimental.constrained.rint.v1f32(<1 x float>, metadata, metadata) 8990declare <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(<1 x float>, metadata, metadata) 8991declare <1 x float> @llvm.experimental.constrained.maxnum.v1f32(<1 x float>, <1 x float>, metadata) 8992declare <1 x float> @llvm.experimental.constrained.minnum.v1f32(<1 x float>, <1 x float>, metadata) 8993declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32(<1 x float>, metadata) 8994declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32(<1 x float>, metadata) 8995declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(<1 x double>, metadata) 8996declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(<1 x double>, metadata) 8997declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32(<1 x float>, metadata) 8998declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32(<1 x float>, metadata) 8999declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(<1 x double>, metadata) 9000declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(<1 x double>, metadata) 9001declare <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(<1 x double>, metadata, metadata) 9002declare <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(<1 x float>, metadata) 9003declare <1 x float> @llvm.experimental.constrained.ceil.v1f32(<1 x float>, metadata) 9004declare <1 x float> @llvm.experimental.constrained.floor.v1f32(<1 x float>, metadata) 9005declare <1 x float> @llvm.experimental.constrained.round.v1f32(<1 x float>, metadata) 9006declare <1 x float> @llvm.experimental.constrained.trunc.v1f32(<1 x float>, metadata) 9007declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32>, metadata, metadata) 9008declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32>, metadata, metadata) 9009declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64>, metadata, metadata) 9010declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64>, metadata, metadata) 9011declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32>, metadata, metadata) 9012declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32>, metadata, metadata) 9013declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64>, metadata, metadata) 9014declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64>, metadata, metadata) 9015 9016; Illegal width declarations 9017declare <3 x float> @llvm.experimental.constrained.fadd.v3f32(<3 x float>, <3 x float>, metadata, metadata) 9018declare <3 x double> @llvm.experimental.constrained.fadd.v3f64(<3 x double>, <3 x double>, metadata, metadata) 9019declare <3 x float> @llvm.experimental.constrained.fsub.v3f32(<3 x float>, <3 x float>, metadata, metadata) 9020declare <3 x double> @llvm.experimental.constrained.fsub.v3f64(<3 x double>, <3 x double>, metadata, metadata) 9021declare <3 x float> @llvm.experimental.constrained.fmul.v3f32(<3 x float>, <3 x float>, metadata, metadata) 9022declare <3 x double> @llvm.experimental.constrained.fmul.v3f64(<3 x double>, <3 x double>, metadata, metadata) 9023declare <3 x float> @llvm.experimental.constrained.fdiv.v3f32(<3 x float>, <3 x float>, metadata, metadata) 9024declare <3 x double> @llvm.experimental.constrained.fdiv.v3f64(<3 x double>, <3 x double>, metadata, metadata) 9025declare <3 x float> @llvm.experimental.constrained.frem.v3f32(<3 x float>, <3 x float>, metadata, metadata) 9026declare <3 x double> @llvm.experimental.constrained.frem.v3f64(<3 x double>, <3 x double>, metadata, metadata) 9027declare <3 x float> @llvm.experimental.constrained.sqrt.v3f32(<3 x float>, metadata, metadata) 9028declare <3 x double> @llvm.experimental.constrained.sqrt.v3f64(<3 x double>, metadata, metadata) 9029declare <3 x float> @llvm.experimental.constrained.pow.v3f32(<3 x float>, <3 x float>, metadata, metadata) 9030declare <3 x double> @llvm.experimental.constrained.pow.v3f64(<3 x double>, <3 x double>, metadata, metadata) 9031declare <3 x float> @llvm.experimental.constrained.powi.v3f32(<3 x float>, i32, metadata, metadata) 9032declare <3 x double> @llvm.experimental.constrained.powi.v3f64(<3 x double>, i32, metadata, metadata) 9033declare <3 x float> @llvm.experimental.constrained.sin.v3f32(<3 x float>, metadata, metadata) 9034declare <3 x double> @llvm.experimental.constrained.sin.v3f64(<3 x double>, metadata, metadata) 9035declare <3 x float> @llvm.experimental.constrained.cos.v3f32(<3 x float>, metadata, metadata) 9036declare <3 x double> @llvm.experimental.constrained.cos.v3f64(<3 x double>, metadata, metadata) 9037declare <3 x float> @llvm.experimental.constrained.exp.v3f32(<3 x float>, metadata, metadata) 9038declare <3 x double> @llvm.experimental.constrained.exp.v3f64(<3 x double>, metadata, metadata) 9039declare <3 x float> @llvm.experimental.constrained.exp2.v3f32(<3 x float>, metadata, metadata) 9040declare <3 x double> @llvm.experimental.constrained.exp2.v3f64(<3 x double>, metadata, metadata) 9041declare <3 x float> @llvm.experimental.constrained.log.v3f32(<3 x float>, metadata, metadata) 9042declare <3 x double> @llvm.experimental.constrained.log.v3f64(<3 x double>, metadata, metadata) 9043declare <3 x float> @llvm.experimental.constrained.log10.v3f32(<3 x float>, metadata, metadata) 9044declare <3 x double> @llvm.experimental.constrained.log10.v3f64(<3 x double>, metadata, metadata) 9045declare <3 x float> @llvm.experimental.constrained.log2.v3f32(<3 x float>, metadata, metadata) 9046declare <3 x double> @llvm.experimental.constrained.log2.v3f64(<3 x double>, metadata, metadata) 9047declare <3 x float> @llvm.experimental.constrained.rint.v3f32(<3 x float>, metadata, metadata) 9048declare <3 x double> @llvm.experimental.constrained.rint.v3f64(<3 x double>, metadata, metadata) 9049declare <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(<3 x float>, metadata, metadata) 9050declare <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(<3 x double>, metadata, metadata) 9051declare <3 x float> @llvm.experimental.constrained.maxnum.v3f32(<3 x float>, <3 x float>, metadata) 9052declare <3 x double> @llvm.experimental.constrained.maxnum.v3f64(<3 x double>, <3 x double>, metadata) 9053declare <3 x float> @llvm.experimental.constrained.minnum.v3f32(<3 x float>, <3 x float>, metadata) 9054declare <3 x double> @llvm.experimental.constrained.minnum.v3f64(<3 x double>, <3 x double>, metadata) 9055declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32(<3 x float>, metadata) 9056declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32(<3 x float>, metadata) 9057declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64(<3 x double>, metadata) 9058declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64(<3 x double>, metadata) 9059declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32(<3 x float>, metadata) 9060declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32(<3 x float>, metadata) 9061declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64(<3 x double>, metadata) 9062declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64(<3 x double>, metadata) 9063declare <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(<3 x double>, metadata, metadata) 9064declare <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(<3 x float>, metadata) 9065declare <3 x float> @llvm.experimental.constrained.ceil.v3f32(<3 x float>, metadata) 9066declare <3 x double> @llvm.experimental.constrained.ceil.v3f64(<3 x double>, metadata) 9067declare <3 x float> @llvm.experimental.constrained.floor.v3f32(<3 x float>, metadata) 9068declare <3 x double> @llvm.experimental.constrained.floor.v3f64(<3 x double>, metadata) 9069declare <3 x float> @llvm.experimental.constrained.round.v3f32(<3 x float>, metadata) 9070declare <3 x double> @llvm.experimental.constrained.round.v3f64(<3 x double>, metadata) 9071declare <3 x float> @llvm.experimental.constrained.trunc.v3f32(<3 x float>, metadata) 9072declare <3 x double> @llvm.experimental.constrained.trunc.v3f64(<3 x double>, metadata) 9073declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32>, metadata, metadata) 9074declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32>, metadata, metadata) 9075declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64>, metadata, metadata) 9076declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64>, metadata, metadata) 9077declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32>, metadata, metadata) 9078declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32>, metadata, metadata) 9079declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64>, metadata, metadata) 9080declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64>, metadata, metadata) 9081 9082; Double width declarations 9083declare <4 x double> @llvm.experimental.constrained.fadd.v4f64(<4 x double>, <4 x double>, metadata, metadata) 9084declare <4 x double> @llvm.experimental.constrained.fsub.v4f64(<4 x double>, <4 x double>, metadata, metadata) 9085declare <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double>, <4 x double>, metadata, metadata) 9086declare <4 x double> @llvm.experimental.constrained.fdiv.v4f64(<4 x double>, <4 x double>, metadata, metadata) 9087declare <4 x double> @llvm.experimental.constrained.frem.v4f64(<4 x double>, <4 x double>, metadata, metadata) 9088declare <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double>, metadata, metadata) 9089declare <4 x double> @llvm.experimental.constrained.pow.v4f64(<4 x double>, <4 x double>, metadata, metadata) 9090declare <4 x double> @llvm.experimental.constrained.powi.v4f64(<4 x double>, i32, metadata, metadata) 9091declare <4 x double> @llvm.experimental.constrained.sin.v4f64(<4 x double>, metadata, metadata) 9092declare <4 x double> @llvm.experimental.constrained.cos.v4f64(<4 x double>, metadata, metadata) 9093declare <4 x double> @llvm.experimental.constrained.exp.v4f64(<4 x double>, metadata, metadata) 9094declare <4 x double> @llvm.experimental.constrained.exp2.v4f64(<4 x double>, metadata, metadata) 9095declare <4 x double> @llvm.experimental.constrained.log.v4f64(<4 x double>, metadata, metadata) 9096declare <4 x double> @llvm.experimental.constrained.log10.v4f64(<4 x double>, metadata, metadata) 9097declare <4 x double> @llvm.experimental.constrained.log2.v4f64(<4 x double>, metadata, metadata) 9098declare <4 x double> @llvm.experimental.constrained.rint.v4f64(<4 x double>, metadata, metadata) 9099declare <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(<4 x double>, metadata, metadata) 9100declare <4 x double> @llvm.experimental.constrained.maxnum.v4f64(<4 x double>, <4 x double>, metadata) 9101declare <4 x double> @llvm.experimental.constrained.minnum.v4f64(<4 x double>, <4 x double>, metadata) 9102declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float>, metadata) 9103declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(<4 x float>, metadata) 9104declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64(<4 x double>, metadata) 9105declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64(<4 x double>, metadata) 9106declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float>, metadata) 9107declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(<4 x float>, metadata) 9108declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(<4 x double>, metadata) 9109declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64(<4 x double>, metadata) 9110declare <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(<4 x double>, metadata, metadata) 9111declare <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float>, metadata) 9112declare <4 x double> @llvm.experimental.constrained.ceil.v4f64(<4 x double>, metadata) 9113declare <4 x double> @llvm.experimental.constrained.floor.v4f64(<4 x double>, metadata) 9114declare <4 x double> @llvm.experimental.constrained.round.v4f64(<4 x double>, metadata) 9115declare <4 x double> @llvm.experimental.constrained.trunc.v4f64(<4 x double>, metadata) 9116declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16>, metadata, metadata) 9117declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32>, metadata, metadata) 9118declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32>, metadata, metadata) 9119declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64>, metadata, metadata) 9120declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64>, metadata, metadata) 9121declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16>, metadata, metadata) 9122declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32>, metadata, metadata) 9123declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32>, metadata, metadata) 9124declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64>, metadata, metadata) 9125declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64>, metadata, metadata) 9126