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 34, 1 83; PC64LE-NEXT: xscvdpspn 35, 2 84; PC64LE-NEXT: vmrghw 2, 3, 2 85; PC64LE-NEXT: xscvdpspn 35, 0 86; PC64LE-NEXT: vperm 2, 3, 2, 4 87; PC64LE-NEXT: blr 88; 89; PC64LE9-LABEL: constrained_vector_fdiv_v3f32: 90; PC64LE9: # %bb.0: # %entry 91; PC64LE9-NEXT: addis 3, 2, .LCPI2_0@toc@ha 92; PC64LE9-NEXT: lfs 0, .LCPI2_0@toc@l(3) 93; PC64LE9-NEXT: addis 3, 2, .LCPI2_1@toc@ha 94; PC64LE9-NEXT: lfs 1, .LCPI2_1@toc@l(3) 95; PC64LE9-NEXT: addis 3, 2, .LCPI2_2@toc@ha 96; PC64LE9-NEXT: xsdivsp 1, 1, 0 97; PC64LE9-NEXT: lfs 2, .LCPI2_2@toc@l(3) 98; PC64LE9-NEXT: addis 3, 2, .LCPI2_3@toc@ha 99; PC64LE9-NEXT: lfs 3, .LCPI2_3@toc@l(3) 100; PC64LE9-NEXT: addis 3, 2, .LCPI2_4@toc@ha 101; PC64LE9-NEXT: addi 3, 3, .LCPI2_4@toc@l 102; PC64LE9-NEXT: lxvx 36, 0, 3 103; PC64LE9-NEXT: xsdivsp 2, 2, 0 104; PC64LE9-NEXT: xsdivsp 0, 3, 0 105; PC64LE9-NEXT: xscvdpspn 35, 2 106; PC64LE9-NEXT: xscvdpspn 34, 0 107; PC64LE9-NEXT: vmrghw 2, 3, 2 108; PC64LE9-NEXT: xscvdpspn 35, 1 109; PC64LE9-NEXT: vperm 2, 3, 2, 4 110; PC64LE9-NEXT: blr 111entry: 112 %div = call <3 x float> @llvm.experimental.constrained.fdiv.v3f32( 113 <3 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, 114 <3 x float> <float 1.000000e+01, float 1.000000e+01, float 1.000000e+01>, 115 metadata !"round.dynamic", 116 metadata !"fpexcept.strict") #1 117 ret <3 x float> %div 118} 119 120define <3 x double> @constrained_vector_fdiv_v3f64() #0 { 121; PC64LE-LABEL: constrained_vector_fdiv_v3f64: 122; PC64LE: # %bb.0: # %entry 123; PC64LE-NEXT: addis 3, 2, .LCPI3_2@toc@ha 124; PC64LE-NEXT: addis 4, 2, .LCPI3_3@toc@ha 125; PC64LE-NEXT: addi 3, 3, .LCPI3_2@toc@l 126; PC64LE-NEXT: addi 4, 4, .LCPI3_3@toc@l 127; PC64LE-NEXT: lxvd2x 0, 0, 3 128; PC64LE-NEXT: lxvd2x 1, 0, 4 129; PC64LE-NEXT: addis 3, 2, .LCPI3_0@toc@ha 130; PC64LE-NEXT: addis 4, 2, .LCPI3_1@toc@ha 131; PC64LE-NEXT: lfs 3, .LCPI3_0@toc@l(3) 132; PC64LE-NEXT: xxswapd 0, 0 133; PC64LE-NEXT: xxswapd 1, 1 134; PC64LE-NEXT: xvdivdp 2, 1, 0 135; PC64LE-NEXT: lfs 0, .LCPI3_1@toc@l(4) 136; PC64LE-NEXT: xsdivdp 3, 0, 3 137; PC64LE-NEXT: xxswapd 1, 2 138; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 139; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 140; PC64LE-NEXT: blr 141; 142; PC64LE9-LABEL: constrained_vector_fdiv_v3f64: 143; PC64LE9: # %bb.0: # %entry 144; PC64LE9-NEXT: addis 3, 2, .LCPI3_0@toc@ha 145; PC64LE9-NEXT: lfs 0, .LCPI3_0@toc@l(3) 146; PC64LE9-NEXT: addis 3, 2, .LCPI3_1@toc@ha 147; PC64LE9-NEXT: lfs 1, .LCPI3_1@toc@l(3) 148; PC64LE9-NEXT: addis 3, 2, .LCPI3_2@toc@ha 149; PC64LE9-NEXT: addi 3, 3, .LCPI3_2@toc@l 150; PC64LE9-NEXT: xsdivdp 3, 1, 0 151; PC64LE9-NEXT: lxvx 0, 0, 3 152; PC64LE9-NEXT: addis 3, 2, .LCPI3_3@toc@ha 153; PC64LE9-NEXT: addi 3, 3, .LCPI3_3@toc@l 154; PC64LE9-NEXT: lxvx 1, 0, 3 155; PC64LE9-NEXT: xvdivdp 2, 1, 0 156; PC64LE9-NEXT: xxswapd 1, 2 157; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 158; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 159; PC64LE9-NEXT: blr 160entry: 161 %div = call <3 x double> @llvm.experimental.constrained.fdiv.v3f64( 162 <3 x double> <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00>, 163 <3 x double> <double 1.000000e+01, double 1.000000e+01, double 1.000000e+01>, 164 metadata !"round.dynamic", 165 metadata !"fpexcept.strict") #1 166 ret <3 x double> %div 167} 168 169define <4 x double> @constrained_vector_fdiv_v4f64() #0 { 170; PC64LE-LABEL: constrained_vector_fdiv_v4f64: 171; PC64LE: # %bb.0: # %entry 172; PC64LE-NEXT: addis 3, 2, .LCPI4_0@toc@ha 173; PC64LE-NEXT: addis 4, 2, .LCPI4_1@toc@ha 174; PC64LE-NEXT: addis 5, 2, .LCPI4_2@toc@ha 175; PC64LE-NEXT: addi 3, 3, .LCPI4_0@toc@l 176; PC64LE-NEXT: lxvd2x 0, 0, 3 177; PC64LE-NEXT: addi 3, 4, .LCPI4_1@toc@l 178; PC64LE-NEXT: addi 4, 5, .LCPI4_2@toc@l 179; PC64LE-NEXT: lxvd2x 1, 0, 3 180; PC64LE-NEXT: lxvd2x 2, 0, 4 181; PC64LE-NEXT: xxswapd 0, 0 182; PC64LE-NEXT: xxswapd 1, 1 183; PC64LE-NEXT: xxswapd 2, 2 184; PC64LE-NEXT: xvdivdp 35, 1, 0 185; PC64LE-NEXT: xvdivdp 34, 2, 0 186; PC64LE-NEXT: blr 187; 188; PC64LE9-LABEL: constrained_vector_fdiv_v4f64: 189; PC64LE9: # %bb.0: # %entry 190; PC64LE9-NEXT: addis 3, 2, .LCPI4_0@toc@ha 191; PC64LE9-NEXT: addi 3, 3, .LCPI4_0@toc@l 192; PC64LE9-NEXT: lxvx 0, 0, 3 193; PC64LE9-NEXT: addis 3, 2, .LCPI4_1@toc@ha 194; PC64LE9-NEXT: addi 3, 3, .LCPI4_1@toc@l 195; PC64LE9-NEXT: lxvx 1, 0, 3 196; PC64LE9-NEXT: addis 3, 2, .LCPI4_2@toc@ha 197; PC64LE9-NEXT: addi 3, 3, .LCPI4_2@toc@l 198; PC64LE9-NEXT: xvdivdp 35, 1, 0 199; PC64LE9-NEXT: lxvx 1, 0, 3 200; PC64LE9-NEXT: xvdivdp 34, 1, 0 201; PC64LE9-NEXT: blr 202entry: 203 %div = call <4 x double> @llvm.experimental.constrained.fdiv.v4f64( 204 <4 x double> <double 1.000000e+00, double 2.000000e+00, 205 double 3.000000e+00, double 4.000000e+00>, 206 <4 x double> <double 1.000000e+01, double 1.000000e+01, 207 double 1.000000e+01, double 1.000000e+01>, 208 metadata !"round.dynamic", 209 metadata !"fpexcept.strict") #1 210 ret <4 x double> %div 211} 212 213define <1 x float> @constrained_vector_frem_v1f32() #0 { 214; PC64LE-LABEL: constrained_vector_frem_v1f32: 215; PC64LE: # %bb.0: # %entry 216; PC64LE-NEXT: mflr 0 217; PC64LE-NEXT: std 0, 16(1) 218; PC64LE-NEXT: stdu 1, -32(1) 219; PC64LE-NEXT: addis 3, 2, .LCPI5_0@toc@ha 220; PC64LE-NEXT: addis 4, 2, .LCPI5_1@toc@ha 221; PC64LE-NEXT: lfs 1, .LCPI5_0@toc@l(3) 222; PC64LE-NEXT: lfs 2, .LCPI5_1@toc@l(4) 223; PC64LE-NEXT: bl fmodf 224; PC64LE-NEXT: nop 225; PC64LE-NEXT: addi 1, 1, 32 226; PC64LE-NEXT: ld 0, 16(1) 227; PC64LE-NEXT: mtlr 0 228; PC64LE-NEXT: blr 229; 230; PC64LE9-LABEL: constrained_vector_frem_v1f32: 231; PC64LE9: # %bb.0: # %entry 232; PC64LE9-NEXT: mflr 0 233; PC64LE9-NEXT: std 0, 16(1) 234; PC64LE9-NEXT: stdu 1, -32(1) 235; PC64LE9-NEXT: addis 3, 2, .LCPI5_0@toc@ha 236; PC64LE9-NEXT: lfs 1, .LCPI5_0@toc@l(3) 237; PC64LE9-NEXT: addis 3, 2, .LCPI5_1@toc@ha 238; PC64LE9-NEXT: lfs 2, .LCPI5_1@toc@l(3) 239; PC64LE9-NEXT: bl fmodf 240; PC64LE9-NEXT: nop 241; PC64LE9-NEXT: addi 1, 1, 32 242; PC64LE9-NEXT: ld 0, 16(1) 243; PC64LE9-NEXT: mtlr 0 244; PC64LE9-NEXT: blr 245entry: 246 %rem = call <1 x float> @llvm.experimental.constrained.frem.v1f32( 247 <1 x float> <float 1.000000e+00>, 248 <1 x float> <float 1.000000e+01>, 249 metadata !"round.dynamic", 250 metadata !"fpexcept.strict") #1 251 ret <1 x float> %rem 252} 253 254define <2 x double> @constrained_vector_frem_v2f64() #0 { 255; PC64LE-LABEL: constrained_vector_frem_v2f64: 256; PC64LE: # %bb.0: # %entry 257; PC64LE-NEXT: mflr 0 258; PC64LE-NEXT: std 0, 16(1) 259; PC64LE-NEXT: stdu 1, -80(1) 260; PC64LE-NEXT: addis 4, 2, .LCPI6_1@toc@ha 261; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 262; PC64LE-NEXT: li 3, 48 263; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 264; PC64LE-NEXT: addis 3, 2, .LCPI6_0@toc@ha 265; PC64LE-NEXT: lfs 31, .LCPI6_1@toc@l(4) 266; PC64LE-NEXT: lfs 1, .LCPI6_0@toc@l(3) 267; PC64LE-NEXT: fmr 2, 31 268; PC64LE-NEXT: bl fmod 269; PC64LE-NEXT: nop 270; PC64LE-NEXT: addis 3, 2, .LCPI6_2@toc@ha 271; PC64LE-NEXT: fmr 2, 31 272; PC64LE-NEXT: xxlor 63, 1, 1 273; PC64LE-NEXT: lfs 1, .LCPI6_2@toc@l(3) 274; PC64LE-NEXT: bl fmod 275; PC64LE-NEXT: nop 276; PC64LE-NEXT: li 3, 48 277; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 278; PC64LE-NEXT: xxmrghd 34, 1, 63 279; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 280; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 281; PC64LE-NEXT: addi 1, 1, 80 282; PC64LE-NEXT: ld 0, 16(1) 283; PC64LE-NEXT: mtlr 0 284; PC64LE-NEXT: blr 285; 286; PC64LE9-LABEL: constrained_vector_frem_v2f64: 287; PC64LE9: # %bb.0: # %entry 288; PC64LE9-NEXT: mflr 0 289; PC64LE9-NEXT: std 0, 16(1) 290; PC64LE9-NEXT: stdu 1, -64(1) 291; PC64LE9-NEXT: addis 3, 2, .LCPI6_0@toc@ha 292; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 293; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 294; PC64LE9-NEXT: lfs 1, .LCPI6_0@toc@l(3) 295; PC64LE9-NEXT: addis 3, 2, .LCPI6_1@toc@ha 296; PC64LE9-NEXT: lfs 31, .LCPI6_1@toc@l(3) 297; PC64LE9-NEXT: fmr 2, 31 298; PC64LE9-NEXT: bl fmod 299; PC64LE9-NEXT: nop 300; PC64LE9-NEXT: addis 3, 2, .LCPI6_2@toc@ha 301; PC64LE9-NEXT: xscpsgndp 63, 1, 1 302; PC64LE9-NEXT: fmr 2, 31 303; PC64LE9-NEXT: lfs 1, .LCPI6_2@toc@l(3) 304; PC64LE9-NEXT: bl fmod 305; PC64LE9-NEXT: nop 306; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 307; PC64LE9-NEXT: xxmrghd 34, 1, 63 308; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 309; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 310; PC64LE9-NEXT: addi 1, 1, 64 311; PC64LE9-NEXT: ld 0, 16(1) 312; PC64LE9-NEXT: mtlr 0 313; PC64LE9-NEXT: blr 314entry: 315 %rem = call <2 x double> @llvm.experimental.constrained.frem.v2f64( 316 <2 x double> <double 1.000000e+00, double 2.000000e+00>, 317 <2 x double> <double 1.000000e+01, double 1.000000e+01>, 318 metadata !"round.dynamic", 319 metadata !"fpexcept.strict") #1 320 ret <2 x double> %rem 321} 322 323define <3 x float> @constrained_vector_frem_v3f32() #0 { 324; PC64LE-LABEL: constrained_vector_frem_v3f32: 325; PC64LE: # %bb.0: # %entry 326; PC64LE-NEXT: mflr 0 327; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 328; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 329; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 330; PC64LE-NEXT: std 0, 16(1) 331; PC64LE-NEXT: stdu 1, -64(1) 332; PC64LE-NEXT: addis 4, 2, .LCPI7_1@toc@ha 333; PC64LE-NEXT: addis 3, 2, .LCPI7_0@toc@ha 334; PC64LE-NEXT: lfs 31, .LCPI7_1@toc@l(4) 335; PC64LE-NEXT: lfs 1, .LCPI7_0@toc@l(3) 336; PC64LE-NEXT: fmr 2, 31 337; PC64LE-NEXT: bl fmodf 338; PC64LE-NEXT: nop 339; PC64LE-NEXT: addis 3, 2, .LCPI7_2@toc@ha 340; PC64LE-NEXT: fmr 2, 31 341; PC64LE-NEXT: fmr 30, 1 342; PC64LE-NEXT: lfs 1, .LCPI7_2@toc@l(3) 343; PC64LE-NEXT: bl fmodf 344; PC64LE-NEXT: nop 345; PC64LE-NEXT: addis 3, 2, .LCPI7_3@toc@ha 346; PC64LE-NEXT: fmr 2, 31 347; PC64LE-NEXT: fmr 29, 1 348; PC64LE-NEXT: lfs 1, .LCPI7_3@toc@l(3) 349; PC64LE-NEXT: bl fmodf 350; PC64LE-NEXT: nop 351; PC64LE-NEXT: xscvdpspn 34, 29 352; PC64LE-NEXT: addis 3, 2, .LCPI7_4@toc@ha 353; PC64LE-NEXT: xscvdpspn 35, 1 354; PC64LE-NEXT: addi 3, 3, .LCPI7_4@toc@l 355; PC64LE-NEXT: lvx 4, 0, 3 356; PC64LE-NEXT: vmrghw 2, 2, 3 357; PC64LE-NEXT: xscvdpspn 35, 30 358; PC64LE-NEXT: vperm 2, 3, 2, 4 359; PC64LE-NEXT: addi 1, 1, 64 360; PC64LE-NEXT: ld 0, 16(1) 361; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 362; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 363; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 364; PC64LE-NEXT: mtlr 0 365; PC64LE-NEXT: blr 366; 367; PC64LE9-LABEL: constrained_vector_frem_v3f32: 368; PC64LE9: # %bb.0: # %entry 369; PC64LE9-NEXT: mflr 0 370; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 371; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 372; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 373; PC64LE9-NEXT: std 0, 16(1) 374; PC64LE9-NEXT: stdu 1, -64(1) 375; PC64LE9-NEXT: addis 3, 2, .LCPI7_0@toc@ha 376; PC64LE9-NEXT: lfs 1, .LCPI7_0@toc@l(3) 377; PC64LE9-NEXT: addis 3, 2, .LCPI7_1@toc@ha 378; PC64LE9-NEXT: lfs 31, .LCPI7_1@toc@l(3) 379; PC64LE9-NEXT: fmr 2, 31 380; PC64LE9-NEXT: bl fmodf 381; PC64LE9-NEXT: nop 382; PC64LE9-NEXT: addis 3, 2, .LCPI7_2@toc@ha 383; PC64LE9-NEXT: fmr 30, 1 384; PC64LE9-NEXT: fmr 2, 31 385; PC64LE9-NEXT: lfs 1, .LCPI7_2@toc@l(3) 386; PC64LE9-NEXT: bl fmodf 387; PC64LE9-NEXT: nop 388; PC64LE9-NEXT: addis 3, 2, .LCPI7_3@toc@ha 389; PC64LE9-NEXT: fmr 29, 1 390; PC64LE9-NEXT: fmr 2, 31 391; PC64LE9-NEXT: lfs 1, .LCPI7_3@toc@l(3) 392; PC64LE9-NEXT: bl fmodf 393; PC64LE9-NEXT: nop 394; PC64LE9-NEXT: xscvdpspn 34, 1 395; PC64LE9-NEXT: xscvdpspn 35, 29 396; PC64LE9-NEXT: addis 3, 2, .LCPI7_4@toc@ha 397; PC64LE9-NEXT: addi 3, 3, .LCPI7_4@toc@l 398; PC64LE9-NEXT: lxvx 36, 0, 3 399; PC64LE9-NEXT: vmrghw 2, 3, 2 400; PC64LE9-NEXT: xscvdpspn 35, 30 401; PC64LE9-NEXT: vperm 2, 3, 2, 4 402; PC64LE9-NEXT: addi 1, 1, 64 403; PC64LE9-NEXT: ld 0, 16(1) 404; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 405; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 406; PC64LE9-NEXT: mtlr 0 407; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 408; PC64LE9-NEXT: blr 409entry: 410 %rem = call <3 x float> @llvm.experimental.constrained.frem.v3f32( 411 <3 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, 412 <3 x float> <float 1.000000e+01, float 1.000000e+01, float 1.000000e+01>, 413 metadata !"round.dynamic", 414 metadata !"fpexcept.strict") #1 415 ret <3 x float> %rem 416} 417 418define <3 x double> @constrained_vector_frem_v3f64() #0 { 419; PC64LE-LABEL: constrained_vector_frem_v3f64: 420; PC64LE: # %bb.0: # %entry 421; PC64LE-NEXT: mflr 0 422; PC64LE-NEXT: std 0, 16(1) 423; PC64LE-NEXT: stdu 1, -80(1) 424; PC64LE-NEXT: addis 4, 2, .LCPI8_1@toc@ha 425; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 426; PC64LE-NEXT: li 3, 48 427; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 428; PC64LE-NEXT: addis 3, 2, .LCPI8_0@toc@ha 429; PC64LE-NEXT: lfs 31, .LCPI8_1@toc@l(4) 430; PC64LE-NEXT: lfs 1, .LCPI8_0@toc@l(3) 431; PC64LE-NEXT: fmr 2, 31 432; PC64LE-NEXT: bl fmod 433; PC64LE-NEXT: nop 434; PC64LE-NEXT: addis 3, 2, .LCPI8_2@toc@ha 435; PC64LE-NEXT: fmr 2, 31 436; PC64LE-NEXT: xxlor 63, 1, 1 437; PC64LE-NEXT: lfs 1, .LCPI8_2@toc@l(3) 438; PC64LE-NEXT: bl fmod 439; PC64LE-NEXT: nop 440; PC64LE-NEXT: addis 3, 2, .LCPI8_3@toc@ha 441; PC64LE-NEXT: fmr 2, 31 442; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 443; PC64LE-NEXT: xxmrghd 63, 1, 63 444; PC64LE-NEXT: lfs 1, .LCPI8_3@toc@l(3) 445; PC64LE-NEXT: bl fmod 446; PC64LE-NEXT: nop 447; PC64LE-NEXT: xxswapd 0, 63 448; PC64LE-NEXT: li 3, 48 449; PC64LE-NEXT: xxlor 2, 63, 63 450; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 451; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 452; PC64LE-NEXT: fmr 3, 1 453; PC64LE-NEXT: fmr 1, 0 454; PC64LE-NEXT: addi 1, 1, 80 455; PC64LE-NEXT: ld 0, 16(1) 456; PC64LE-NEXT: mtlr 0 457; PC64LE-NEXT: blr 458; 459; PC64LE9-LABEL: constrained_vector_frem_v3f64: 460; PC64LE9: # %bb.0: # %entry 461; PC64LE9-NEXT: mflr 0 462; PC64LE9-NEXT: std 0, 16(1) 463; PC64LE9-NEXT: stdu 1, -64(1) 464; PC64LE9-NEXT: addis 3, 2, .LCPI8_0@toc@ha 465; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 466; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 467; PC64LE9-NEXT: lfs 1, .LCPI8_0@toc@l(3) 468; PC64LE9-NEXT: addis 3, 2, .LCPI8_1@toc@ha 469; PC64LE9-NEXT: lfs 31, .LCPI8_1@toc@l(3) 470; PC64LE9-NEXT: fmr 2, 31 471; PC64LE9-NEXT: bl fmod 472; PC64LE9-NEXT: nop 473; PC64LE9-NEXT: addis 3, 2, .LCPI8_2@toc@ha 474; PC64LE9-NEXT: xscpsgndp 63, 1, 1 475; PC64LE9-NEXT: fmr 2, 31 476; PC64LE9-NEXT: lfs 1, .LCPI8_2@toc@l(3) 477; PC64LE9-NEXT: bl fmod 478; PC64LE9-NEXT: nop 479; PC64LE9-NEXT: addis 3, 2, .LCPI8_3@toc@ha 480; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 481; PC64LE9-NEXT: xxmrghd 63, 1, 63 482; PC64LE9-NEXT: fmr 2, 31 483; PC64LE9-NEXT: lfs 1, .LCPI8_3@toc@l(3) 484; PC64LE9-NEXT: bl fmod 485; PC64LE9-NEXT: nop 486; PC64LE9-NEXT: fmr 3, 1 487; PC64LE9-NEXT: xxswapd 1, 63 488; PC64LE9-NEXT: xscpsgndp 2, 63, 63 489; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 490; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 491; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 492; PC64LE9-NEXT: addi 1, 1, 64 493; PC64LE9-NEXT: ld 0, 16(1) 494; PC64LE9-NEXT: mtlr 0 495; PC64LE9-NEXT: blr 496entry: 497 %rem = call <3 x double> @llvm.experimental.constrained.frem.v3f64( 498 <3 x double> <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00>, 499 <3 x double> <double 1.000000e+01, double 1.000000e+01, double 1.000000e+01>, 500 metadata !"round.dynamic", 501 metadata !"fpexcept.strict") #1 502 ret <3 x double> %rem 503} 504 505define <4 x double> @constrained_vector_frem_v4f64() #0 { 506; PC64LE-LABEL: constrained_vector_frem_v4f64: 507; PC64LE: # %bb.0: 508; PC64LE-NEXT: mflr 0 509; PC64LE-NEXT: std 0, 16(1) 510; PC64LE-NEXT: stdu 1, -96(1) 511; PC64LE-NEXT: addis 4, 2, .LCPI9_1@toc@ha 512; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 513; PC64LE-NEXT: li 3, 48 514; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 515; PC64LE-NEXT: li 3, 64 516; PC64LE-NEXT: lfs 31, .LCPI9_1@toc@l(4) 517; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 518; PC64LE-NEXT: addis 3, 2, .LCPI9_0@toc@ha 519; PC64LE-NEXT: lfs 1, .LCPI9_0@toc@l(3) 520; PC64LE-NEXT: fmr 2, 31 521; PC64LE-NEXT: bl fmod 522; PC64LE-NEXT: nop 523; PC64LE-NEXT: addis 3, 2, .LCPI9_2@toc@ha 524; PC64LE-NEXT: fmr 2, 31 525; PC64LE-NEXT: xxlor 63, 1, 1 526; PC64LE-NEXT: lfs 1, .LCPI9_2@toc@l(3) 527; PC64LE-NEXT: bl fmod 528; PC64LE-NEXT: nop 529; PC64LE-NEXT: addis 3, 2, .LCPI9_3@toc@ha 530; PC64LE-NEXT: fmr 2, 31 531; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 532; PC64LE-NEXT: xxmrghd 63, 1, 63 533; PC64LE-NEXT: lfs 1, .LCPI9_3@toc@l(3) 534; PC64LE-NEXT: bl fmod 535; PC64LE-NEXT: nop 536; PC64LE-NEXT: addis 3, 2, .LCPI9_4@toc@ha 537; PC64LE-NEXT: fmr 2, 31 538; PC64LE-NEXT: xxlor 62, 1, 1 539; PC64LE-NEXT: lfs 1, .LCPI9_4@toc@l(3) 540; PC64LE-NEXT: bl fmod 541; PC64LE-NEXT: nop 542; PC64LE-NEXT: li 3, 64 543; PC64LE-NEXT: vmr 2, 31 544; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 545; PC64LE-NEXT: xxmrghd 35, 1, 62 546; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 547; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 548; PC64LE-NEXT: li 3, 48 549; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 550; PC64LE-NEXT: addi 1, 1, 96 551; PC64LE-NEXT: ld 0, 16(1) 552; PC64LE-NEXT: mtlr 0 553; PC64LE-NEXT: blr 554; 555; PC64LE9-LABEL: constrained_vector_frem_v4f64: 556; PC64LE9: # %bb.0: 557; PC64LE9-NEXT: mflr 0 558; PC64LE9-NEXT: std 0, 16(1) 559; PC64LE9-NEXT: stdu 1, -80(1) 560; PC64LE9-NEXT: addis 3, 2, .LCPI9_0@toc@ha 561; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 562; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 563; PC64LE9-NEXT: lfs 1, .LCPI9_0@toc@l(3) 564; PC64LE9-NEXT: addis 3, 2, .LCPI9_1@toc@ha 565; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 566; PC64LE9-NEXT: lfs 31, .LCPI9_1@toc@l(3) 567; PC64LE9-NEXT: fmr 2, 31 568; PC64LE9-NEXT: bl fmod 569; PC64LE9-NEXT: nop 570; PC64LE9-NEXT: addis 3, 2, .LCPI9_2@toc@ha 571; PC64LE9-NEXT: xscpsgndp 63, 1, 1 572; PC64LE9-NEXT: fmr 2, 31 573; PC64LE9-NEXT: lfs 1, .LCPI9_2@toc@l(3) 574; PC64LE9-NEXT: bl fmod 575; PC64LE9-NEXT: nop 576; PC64LE9-NEXT: addis 3, 2, .LCPI9_3@toc@ha 577; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 578; PC64LE9-NEXT: xxmrghd 63, 1, 63 579; PC64LE9-NEXT: fmr 2, 31 580; PC64LE9-NEXT: lfs 1, .LCPI9_3@toc@l(3) 581; PC64LE9-NEXT: bl fmod 582; PC64LE9-NEXT: nop 583; PC64LE9-NEXT: addis 3, 2, .LCPI9_4@toc@ha 584; PC64LE9-NEXT: xscpsgndp 62, 1, 1 585; PC64LE9-NEXT: fmr 2, 31 586; PC64LE9-NEXT: lfs 1, .LCPI9_4@toc@l(3) 587; PC64LE9-NEXT: bl fmod 588; PC64LE9-NEXT: nop 589; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 590; PC64LE9-NEXT: xxmrghd 35, 1, 62 591; PC64LE9-NEXT: vmr 2, 31 592; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 593; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 594; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 595; PC64LE9-NEXT: addi 1, 1, 80 596; PC64LE9-NEXT: ld 0, 16(1) 597; PC64LE9-NEXT: mtlr 0 598; PC64LE9-NEXT: blr 599 %rem = call <4 x double> @llvm.experimental.constrained.frem.v4f64( 600 <4 x double> <double 1.000000e+00, double 2.000000e+00, 601 double 3.000000e+00, double 4.000000e+00>, 602 <4 x double> <double 1.000000e+01, double 1.000000e+01, 603 double 1.000000e+01, double 1.000000e+01>, 604 metadata !"round.dynamic", 605 metadata !"fpexcept.strict") #1 606 ret <4 x double> %rem 607} 608 609define <1 x float> @constrained_vector_fmul_v1f32() #0 { 610; PC64LE-LABEL: constrained_vector_fmul_v1f32: 611; PC64LE: # %bb.0: # %entry 612; PC64LE-NEXT: addis 3, 2, .LCPI10_0@toc@ha 613; PC64LE-NEXT: addis 4, 2, .LCPI10_1@toc@ha 614; PC64LE-NEXT: lfs 0, .LCPI10_0@toc@l(3) 615; PC64LE-NEXT: lfs 1, .LCPI10_1@toc@l(4) 616; PC64LE-NEXT: xsmulsp 1, 1, 0 617; PC64LE-NEXT: blr 618; 619; PC64LE9-LABEL: constrained_vector_fmul_v1f32: 620; PC64LE9: # %bb.0: # %entry 621; PC64LE9-NEXT: addis 3, 2, .LCPI10_0@toc@ha 622; PC64LE9-NEXT: lfs 0, .LCPI10_0@toc@l(3) 623; PC64LE9-NEXT: addis 3, 2, .LCPI10_1@toc@ha 624; PC64LE9-NEXT: lfs 1, .LCPI10_1@toc@l(3) 625; PC64LE9-NEXT: xsmulsp 1, 1, 0 626; PC64LE9-NEXT: blr 627entry: 628 %mul = call <1 x float> @llvm.experimental.constrained.fmul.v1f32( 629 <1 x float> <float 0x7FF0000000000000>, 630 <1 x float> <float 2.000000e+00>, 631 metadata !"round.dynamic", 632 metadata !"fpexcept.strict") #1 633 ret <1 x float> %mul 634} 635 636define <2 x double> @constrained_vector_fmul_v2f64() #0 { 637; PC64LE-LABEL: constrained_vector_fmul_v2f64: 638; PC64LE: # %bb.0: # %entry 639; PC64LE-NEXT: addis 3, 2, .LCPI11_0@toc@ha 640; PC64LE-NEXT: addis 4, 2, .LCPI11_1@toc@ha 641; PC64LE-NEXT: addi 3, 3, .LCPI11_0@toc@l 642; PC64LE-NEXT: addi 4, 4, .LCPI11_1@toc@l 643; PC64LE-NEXT: lxvd2x 0, 0, 3 644; PC64LE-NEXT: lxvd2x 1, 0, 4 645; PC64LE-NEXT: xxswapd 0, 0 646; PC64LE-NEXT: xxswapd 1, 1 647; PC64LE-NEXT: xvmuldp 34, 1, 0 648; PC64LE-NEXT: blr 649; 650; PC64LE9-LABEL: constrained_vector_fmul_v2f64: 651; PC64LE9: # %bb.0: # %entry 652; PC64LE9-NEXT: addis 3, 2, .LCPI11_0@toc@ha 653; PC64LE9-NEXT: addi 3, 3, .LCPI11_0@toc@l 654; PC64LE9-NEXT: lxvx 0, 0, 3 655; PC64LE9-NEXT: addis 3, 2, .LCPI11_1@toc@ha 656; PC64LE9-NEXT: addi 3, 3, .LCPI11_1@toc@l 657; PC64LE9-NEXT: lxvx 1, 0, 3 658; PC64LE9-NEXT: xvmuldp 34, 1, 0 659; PC64LE9-NEXT: blr 660entry: 661 %mul = call <2 x double> @llvm.experimental.constrained.fmul.v2f64( 662 <2 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>, 663 <2 x double> <double 2.000000e+00, double 3.000000e+00>, 664 metadata !"round.dynamic", 665 metadata !"fpexcept.strict") #1 666 ret <2 x double> %mul 667} 668 669define <3 x float> @constrained_vector_fmul_v3f32() #0 { 670; PC64LE-LABEL: constrained_vector_fmul_v3f32: 671; PC64LE: # %bb.0: # %entry 672; PC64LE-NEXT: addis 3, 2, .LCPI12_1@toc@ha 673; PC64LE-NEXT: addis 4, 2, .LCPI12_3@toc@ha 674; PC64LE-NEXT: addis 5, 2, .LCPI12_2@toc@ha 675; PC64LE-NEXT: lfs 0, .LCPI12_1@toc@l(3) 676; PC64LE-NEXT: lfs 1, .LCPI12_3@toc@l(4) 677; PC64LE-NEXT: lfs 2, .LCPI12_2@toc@l(5) 678; PC64LE-NEXT: addis 3, 2, .LCPI12_0@toc@ha 679; PC64LE-NEXT: xsmulsp 1, 0, 1 680; PC64LE-NEXT: lfs 3, .LCPI12_0@toc@l(3) 681; PC64LE-NEXT: addis 3, 2, .LCPI12_4@toc@ha 682; PC64LE-NEXT: xsmulsp 2, 0, 2 683; PC64LE-NEXT: addi 3, 3, .LCPI12_4@toc@l 684; PC64LE-NEXT: lvx 4, 0, 3 685; PC64LE-NEXT: xsmulsp 0, 0, 3 686; PC64LE-NEXT: xscvdpspn 34, 1 687; PC64LE-NEXT: xscvdpspn 35, 2 688; PC64LE-NEXT: vmrghw 2, 3, 2 689; PC64LE-NEXT: xscvdpspn 35, 0 690; PC64LE-NEXT: vperm 2, 3, 2, 4 691; PC64LE-NEXT: blr 692; 693; PC64LE9-LABEL: constrained_vector_fmul_v3f32: 694; PC64LE9: # %bb.0: # %entry 695; PC64LE9-NEXT: addis 3, 2, .LCPI12_0@toc@ha 696; PC64LE9-NEXT: lfs 0, .LCPI12_0@toc@l(3) 697; PC64LE9-NEXT: addis 3, 2, .LCPI12_1@toc@ha 698; PC64LE9-NEXT: lfs 1, .LCPI12_1@toc@l(3) 699; PC64LE9-NEXT: addis 3, 2, .LCPI12_2@toc@ha 700; PC64LE9-NEXT: xsmulsp 0, 1, 0 701; PC64LE9-NEXT: lfs 2, .LCPI12_2@toc@l(3) 702; PC64LE9-NEXT: addis 3, 2, .LCPI12_3@toc@ha 703; PC64LE9-NEXT: lfs 3, .LCPI12_3@toc@l(3) 704; PC64LE9-NEXT: addis 3, 2, .LCPI12_4@toc@ha 705; PC64LE9-NEXT: addi 3, 3, .LCPI12_4@toc@l 706; PC64LE9-NEXT: lxvx 36, 0, 3 707; PC64LE9-NEXT: xsmulsp 2, 1, 2 708; PC64LE9-NEXT: xsmulsp 1, 1, 3 709; PC64LE9-NEXT: xscvdpspn 35, 2 710; PC64LE9-NEXT: xscvdpspn 34, 1 711; PC64LE9-NEXT: vmrghw 2, 3, 2 712; PC64LE9-NEXT: xscvdpspn 35, 0 713; PC64LE9-NEXT: vperm 2, 3, 2, 4 714; PC64LE9-NEXT: blr 715entry: 716 %mul = call <3 x float> @llvm.experimental.constrained.fmul.v3f32( 717 <3 x float> <float 0x7FF0000000000000, float 0x7FF0000000000000, 718 float 0x7FF0000000000000>, 719 <3 x float> <float 1.000000e+00, float 1.000000e+01, float 1.000000e+02>, 720 metadata !"round.dynamic", 721 metadata !"fpexcept.strict") #1 722 ret <3 x float> %mul 723} 724 725define <3 x double> @constrained_vector_fmul_v3f64() #0 { 726; PC64LE-LABEL: constrained_vector_fmul_v3f64: 727; PC64LE: # %bb.0: # %entry 728; PC64LE-NEXT: addis 3, 2, .LCPI13_2@toc@ha 729; PC64LE-NEXT: addis 4, 2, .LCPI13_3@toc@ha 730; PC64LE-NEXT: addi 3, 3, .LCPI13_2@toc@l 731; PC64LE-NEXT: addi 4, 4, .LCPI13_3@toc@l 732; PC64LE-NEXT: lxvd2x 0, 0, 3 733; PC64LE-NEXT: lxvd2x 1, 0, 4 734; PC64LE-NEXT: addis 3, 2, .LCPI13_0@toc@ha 735; PC64LE-NEXT: addis 4, 2, .LCPI13_1@toc@ha 736; PC64LE-NEXT: lfd 3, .LCPI13_0@toc@l(3) 737; PC64LE-NEXT: xxswapd 0, 0 738; PC64LE-NEXT: xxswapd 1, 1 739; PC64LE-NEXT: xvmuldp 2, 1, 0 740; PC64LE-NEXT: lfs 0, .LCPI13_1@toc@l(4) 741; PC64LE-NEXT: xsmuldp 3, 3, 0 742; PC64LE-NEXT: xxswapd 1, 2 743; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 744; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 745; PC64LE-NEXT: blr 746; 747; PC64LE9-LABEL: constrained_vector_fmul_v3f64: 748; PC64LE9: # %bb.0: # %entry 749; PC64LE9-NEXT: addis 3, 2, .LCPI13_0@toc@ha 750; PC64LE9-NEXT: lfd 0, .LCPI13_0@toc@l(3) 751; PC64LE9-NEXT: addis 3, 2, .LCPI13_1@toc@ha 752; PC64LE9-NEXT: lfs 1, .LCPI13_1@toc@l(3) 753; PC64LE9-NEXT: addis 3, 2, .LCPI13_2@toc@ha 754; PC64LE9-NEXT: addi 3, 3, .LCPI13_2@toc@l 755; PC64LE9-NEXT: xsmuldp 3, 0, 1 756; PC64LE9-NEXT: lxvx 0, 0, 3 757; PC64LE9-NEXT: addis 3, 2, .LCPI13_3@toc@ha 758; PC64LE9-NEXT: addi 3, 3, .LCPI13_3@toc@l 759; PC64LE9-NEXT: lxvx 1, 0, 3 760; PC64LE9-NEXT: xvmuldp 2, 1, 0 761; PC64LE9-NEXT: xxswapd 1, 2 762; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 763; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 764; PC64LE9-NEXT: blr 765entry: 766 %mul = call <3 x double> @llvm.experimental.constrained.fmul.v3f64( 767 <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF, 768 double 0x7FEFFFFFFFFFFFFF>, 769 <3 x double> <double 1.000000e+00, double 1.000000e+01, double 1.000000e+02>, 770 metadata !"round.dynamic", 771 metadata !"fpexcept.strict") #1 772 ret <3 x double> %mul 773} 774 775define <4 x double> @constrained_vector_fmul_v4f64() #0 { 776; PC64LE-LABEL: constrained_vector_fmul_v4f64: 777; PC64LE: # %bb.0: # %entry 778; PC64LE-NEXT: addis 3, 2, .LCPI14_0@toc@ha 779; PC64LE-NEXT: addis 4, 2, .LCPI14_1@toc@ha 780; PC64LE-NEXT: addis 5, 2, .LCPI14_2@toc@ha 781; PC64LE-NEXT: addi 3, 3, .LCPI14_0@toc@l 782; PC64LE-NEXT: addi 4, 4, .LCPI14_1@toc@l 783; PC64LE-NEXT: lxvd2x 0, 0, 3 784; PC64LE-NEXT: addi 3, 5, .LCPI14_2@toc@l 785; PC64LE-NEXT: lxvd2x 1, 0, 4 786; PC64LE-NEXT: lxvd2x 2, 0, 3 787; PC64LE-NEXT: xxswapd 0, 0 788; PC64LE-NEXT: xxswapd 1, 1 789; PC64LE-NEXT: xxswapd 2, 2 790; PC64LE-NEXT: xvmuldp 35, 1, 0 791; PC64LE-NEXT: xvmuldp 34, 1, 2 792; PC64LE-NEXT: blr 793; 794; PC64LE9-LABEL: constrained_vector_fmul_v4f64: 795; PC64LE9: # %bb.0: # %entry 796; PC64LE9-NEXT: addis 3, 2, .LCPI14_0@toc@ha 797; PC64LE9-NEXT: addi 3, 3, .LCPI14_0@toc@l 798; PC64LE9-NEXT: lxvx 0, 0, 3 799; PC64LE9-NEXT: addis 3, 2, .LCPI14_1@toc@ha 800; PC64LE9-NEXT: addi 3, 3, .LCPI14_1@toc@l 801; PC64LE9-NEXT: lxvx 1, 0, 3 802; PC64LE9-NEXT: addis 3, 2, .LCPI14_2@toc@ha 803; PC64LE9-NEXT: addi 3, 3, .LCPI14_2@toc@l 804; PC64LE9-NEXT: xvmuldp 35, 1, 0 805; PC64LE9-NEXT: lxvx 0, 0, 3 806; PC64LE9-NEXT: xvmuldp 34, 1, 0 807; PC64LE9-NEXT: blr 808entry: 809 %mul = call <4 x double> @llvm.experimental.constrained.fmul.v4f64( 810 <4 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF, 811 double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>, 812 <4 x double> <double 2.000000e+00, double 3.000000e+00, 813 double 4.000000e+00, double 5.000000e+00>, 814 metadata !"round.dynamic", 815 metadata !"fpexcept.strict") #1 816 ret <4 x double> %mul 817} 818 819define <1 x float> @constrained_vector_fadd_v1f32() #0 { 820; PC64LE-LABEL: constrained_vector_fadd_v1f32: 821; PC64LE: # %bb.0: # %entry 822; PC64LE-NEXT: addis 3, 2, .LCPI15_0@toc@ha 823; PC64LE-NEXT: addis 4, 2, .LCPI15_1@toc@ha 824; PC64LE-NEXT: lfs 0, .LCPI15_0@toc@l(3) 825; PC64LE-NEXT: lfs 1, .LCPI15_1@toc@l(4) 826; PC64LE-NEXT: xsaddsp 1, 1, 0 827; PC64LE-NEXT: blr 828; 829; PC64LE9-LABEL: constrained_vector_fadd_v1f32: 830; PC64LE9: # %bb.0: # %entry 831; PC64LE9-NEXT: addis 3, 2, .LCPI15_0@toc@ha 832; PC64LE9-NEXT: lfs 0, .LCPI15_0@toc@l(3) 833; PC64LE9-NEXT: addis 3, 2, .LCPI15_1@toc@ha 834; PC64LE9-NEXT: lfs 1, .LCPI15_1@toc@l(3) 835; PC64LE9-NEXT: xsaddsp 1, 1, 0 836; PC64LE9-NEXT: blr 837entry: 838 %add = call <1 x float> @llvm.experimental.constrained.fadd.v1f32( 839 <1 x float> <float 0x7FF0000000000000>, 840 <1 x float> <float 1.0>, 841 metadata !"round.dynamic", 842 metadata !"fpexcept.strict") #1 843 ret <1 x float> %add 844} 845 846define <2 x double> @constrained_vector_fadd_v2f64() #0 { 847; PC64LE-LABEL: constrained_vector_fadd_v2f64: 848; PC64LE: # %bb.0: # %entry 849; PC64LE-NEXT: addis 3, 2, .LCPI16_0@toc@ha 850; PC64LE-NEXT: addis 4, 2, .LCPI16_1@toc@ha 851; PC64LE-NEXT: addi 3, 3, .LCPI16_0@toc@l 852; PC64LE-NEXT: addi 4, 4, .LCPI16_1@toc@l 853; PC64LE-NEXT: lxvd2x 0, 0, 3 854; PC64LE-NEXT: lxvd2x 1, 0, 4 855; PC64LE-NEXT: xxswapd 0, 0 856; PC64LE-NEXT: xxswapd 1, 1 857; PC64LE-NEXT: xvadddp 34, 1, 0 858; PC64LE-NEXT: blr 859; 860; PC64LE9-LABEL: constrained_vector_fadd_v2f64: 861; PC64LE9: # %bb.0: # %entry 862; PC64LE9-NEXT: addis 3, 2, .LCPI16_0@toc@ha 863; PC64LE9-NEXT: addi 3, 3, .LCPI16_0@toc@l 864; PC64LE9-NEXT: lxvx 0, 0, 3 865; PC64LE9-NEXT: addis 3, 2, .LCPI16_1@toc@ha 866; PC64LE9-NEXT: addi 3, 3, .LCPI16_1@toc@l 867; PC64LE9-NEXT: lxvx 1, 0, 3 868; PC64LE9-NEXT: xvadddp 34, 1, 0 869; PC64LE9-NEXT: blr 870entry: 871 %add = call <2 x double> @llvm.experimental.constrained.fadd.v2f64( 872 <2 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>, 873 <2 x double> <double 1.000000e+00, double 1.000000e-01>, 874 metadata !"round.dynamic", 875 metadata !"fpexcept.strict") #1 876 ret <2 x double> %add 877} 878 879define <3 x float> @constrained_vector_fadd_v3f32() #0 { 880; PC64LE-LABEL: constrained_vector_fadd_v3f32: 881; PC64LE: # %bb.0: # %entry 882; PC64LE-NEXT: addis 3, 2, .LCPI17_0@toc@ha 883; PC64LE-NEXT: addis 4, 2, .LCPI17_2@toc@ha 884; PC64LE-NEXT: addis 5, 2, .LCPI17_1@toc@ha 885; PC64LE-NEXT: xxlxor 3, 3, 3 886; PC64LE-NEXT: lfs 0, .LCPI17_0@toc@l(3) 887; PC64LE-NEXT: lfs 1, .LCPI17_2@toc@l(4) 888; PC64LE-NEXT: lfs 2, .LCPI17_1@toc@l(5) 889; PC64LE-NEXT: addis 3, 2, .LCPI17_3@toc@ha 890; PC64LE-NEXT: addi 3, 3, .LCPI17_3@toc@l 891; PC64LE-NEXT: xsaddsp 1, 0, 1 892; PC64LE-NEXT: lvx 4, 0, 3 893; PC64LE-NEXT: xsaddsp 2, 0, 2 894; PC64LE-NEXT: xsaddsp 0, 0, 3 895; PC64LE-NEXT: xscvdpspn 34, 1 896; PC64LE-NEXT: xscvdpspn 35, 2 897; PC64LE-NEXT: vmrghw 2, 3, 2 898; PC64LE-NEXT: xscvdpspn 35, 0 899; PC64LE-NEXT: vperm 2, 3, 2, 4 900; PC64LE-NEXT: blr 901; 902; PC64LE9-LABEL: constrained_vector_fadd_v3f32: 903; PC64LE9: # %bb.0: # %entry 904; PC64LE9-NEXT: addis 3, 2, .LCPI17_0@toc@ha 905; PC64LE9-NEXT: xxlxor 1, 1, 1 906; PC64LE9-NEXT: lfs 0, .LCPI17_0@toc@l(3) 907; PC64LE9-NEXT: addis 3, 2, .LCPI17_1@toc@ha 908; PC64LE9-NEXT: lfs 2, .LCPI17_1@toc@l(3) 909; PC64LE9-NEXT: addis 3, 2, .LCPI17_2@toc@ha 910; PC64LE9-NEXT: lfs 3, .LCPI17_2@toc@l(3) 911; PC64LE9-NEXT: addis 3, 2, .LCPI17_3@toc@ha 912; PC64LE9-NEXT: addi 3, 3, .LCPI17_3@toc@l 913; PC64LE9-NEXT: xsaddsp 1, 0, 1 914; PC64LE9-NEXT: lxvx 36, 0, 3 915; PC64LE9-NEXT: xsaddsp 2, 0, 2 916; PC64LE9-NEXT: xsaddsp 0, 0, 3 917; PC64LE9-NEXT: xscvdpspn 35, 2 918; PC64LE9-NEXT: xscvdpspn 34, 0 919; PC64LE9-NEXT: vmrghw 2, 3, 2 920; PC64LE9-NEXT: xscvdpspn 35, 1 921; PC64LE9-NEXT: vperm 2, 3, 2, 4 922; PC64LE9-NEXT: blr 923entry: 924 %add = call <3 x float> @llvm.experimental.constrained.fadd.v3f32( 925 <3 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000, 926 float 0xFFFFFFFFE0000000>, 927 <3 x float> <float 2.0, float 1.0, float 0.0>, 928 metadata !"round.dynamic", 929 metadata !"fpexcept.strict") #1 930 ret <3 x float> %add 931} 932 933define <3 x double> @constrained_vector_fadd_v3f64() #0 { 934; PC64LE-LABEL: constrained_vector_fadd_v3f64: 935; PC64LE: # %bb.0: # %entry 936; PC64LE-NEXT: addis 3, 2, .LCPI18_1@toc@ha 937; PC64LE-NEXT: addis 4, 2, .LCPI18_2@toc@ha 938; PC64LE-NEXT: addi 3, 3, .LCPI18_1@toc@l 939; PC64LE-NEXT: addi 4, 4, .LCPI18_2@toc@l 940; PC64LE-NEXT: lxvd2x 0, 0, 3 941; PC64LE-NEXT: lxvd2x 1, 0, 4 942; PC64LE-NEXT: addis 3, 2, .LCPI18_0@toc@ha 943; PC64LE-NEXT: lfd 3, .LCPI18_0@toc@l(3) 944; PC64LE-NEXT: xxswapd 0, 0 945; PC64LE-NEXT: xxswapd 1, 1 946; PC64LE-NEXT: xvadddp 2, 1, 0 947; PC64LE-NEXT: xxlxor 0, 0, 0 948; PC64LE-NEXT: xsadddp 3, 3, 0 949; PC64LE-NEXT: xxswapd 1, 2 950; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 951; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 952; PC64LE-NEXT: blr 953; 954; PC64LE9-LABEL: constrained_vector_fadd_v3f64: 955; PC64LE9: # %bb.0: # %entry 956; PC64LE9-NEXT: addis 3, 2, .LCPI18_0@toc@ha 957; PC64LE9-NEXT: xxlxor 1, 1, 1 958; PC64LE9-NEXT: lfd 0, .LCPI18_0@toc@l(3) 959; PC64LE9-NEXT: addis 3, 2, .LCPI18_1@toc@ha 960; PC64LE9-NEXT: addi 3, 3, .LCPI18_1@toc@l 961; PC64LE9-NEXT: xsadddp 3, 0, 1 962; PC64LE9-NEXT: lxvx 0, 0, 3 963; PC64LE9-NEXT: addis 3, 2, .LCPI18_2@toc@ha 964; PC64LE9-NEXT: addi 3, 3, .LCPI18_2@toc@l 965; PC64LE9-NEXT: lxvx 1, 0, 3 966; PC64LE9-NEXT: xvadddp 2, 1, 0 967; PC64LE9-NEXT: xxswapd 1, 2 968; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 969; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 970; PC64LE9-NEXT: blr 971entry: 972 %add = call <3 x double> @llvm.experimental.constrained.fadd.v3f64( 973 <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF, 974 double 0x7FEFFFFFFFFFFFFF>, 975 <3 x double> <double 2.0, double 1.0, double 0.0>, 976 metadata !"round.dynamic", 977 metadata !"fpexcept.strict") #1 978 ret <3 x double> %add 979} 980 981define <4 x double> @constrained_vector_fadd_v4f64() #0 { 982; PC64LE-LABEL: constrained_vector_fadd_v4f64: 983; PC64LE: # %bb.0: # %entry 984; PC64LE-NEXT: addis 3, 2, .LCPI19_0@toc@ha 985; PC64LE-NEXT: addis 4, 2, .LCPI19_1@toc@ha 986; PC64LE-NEXT: addis 5, 2, .LCPI19_2@toc@ha 987; PC64LE-NEXT: addi 3, 3, .LCPI19_0@toc@l 988; PC64LE-NEXT: addi 4, 4, .LCPI19_1@toc@l 989; PC64LE-NEXT: lxvd2x 0, 0, 3 990; PC64LE-NEXT: addi 3, 5, .LCPI19_2@toc@l 991; PC64LE-NEXT: lxvd2x 1, 0, 4 992; PC64LE-NEXT: lxvd2x 2, 0, 3 993; PC64LE-NEXT: xxswapd 0, 0 994; PC64LE-NEXT: xxswapd 1, 1 995; PC64LE-NEXT: xxswapd 2, 2 996; PC64LE-NEXT: xvadddp 35, 1, 0 997; PC64LE-NEXT: xvadddp 34, 1, 2 998; PC64LE-NEXT: blr 999; 1000; PC64LE9-LABEL: constrained_vector_fadd_v4f64: 1001; PC64LE9: # %bb.0: # %entry 1002; PC64LE9-NEXT: addis 3, 2, .LCPI19_0@toc@ha 1003; PC64LE9-NEXT: addi 3, 3, .LCPI19_0@toc@l 1004; PC64LE9-NEXT: lxvx 0, 0, 3 1005; PC64LE9-NEXT: addis 3, 2, .LCPI19_1@toc@ha 1006; PC64LE9-NEXT: addi 3, 3, .LCPI19_1@toc@l 1007; PC64LE9-NEXT: lxvx 1, 0, 3 1008; PC64LE9-NEXT: addis 3, 2, .LCPI19_2@toc@ha 1009; PC64LE9-NEXT: addi 3, 3, .LCPI19_2@toc@l 1010; PC64LE9-NEXT: xvadddp 35, 1, 0 1011; PC64LE9-NEXT: lxvx 0, 0, 3 1012; PC64LE9-NEXT: xvadddp 34, 1, 0 1013; PC64LE9-NEXT: blr 1014entry: 1015 %add = call <4 x double> @llvm.experimental.constrained.fadd.v4f64( 1016 <4 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF, 1017 double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>, 1018 <4 x double> <double 1.000000e+00, double 1.000000e-01, 1019 double 2.000000e+00, double 2.000000e-01>, 1020 metadata !"round.dynamic", 1021 metadata !"fpexcept.strict") #1 1022 ret <4 x double> %add 1023} 1024 1025define <1 x float> @constrained_vector_fsub_v1f32() #0 { 1026; PC64LE-LABEL: constrained_vector_fsub_v1f32: 1027; PC64LE: # %bb.0: # %entry 1028; PC64LE-NEXT: addis 3, 2, .LCPI20_0@toc@ha 1029; PC64LE-NEXT: addis 4, 2, .LCPI20_1@toc@ha 1030; PC64LE-NEXT: lfs 0, .LCPI20_0@toc@l(3) 1031; PC64LE-NEXT: lfs 1, .LCPI20_1@toc@l(4) 1032; PC64LE-NEXT: xssubsp 1, 1, 0 1033; PC64LE-NEXT: blr 1034; 1035; PC64LE9-LABEL: constrained_vector_fsub_v1f32: 1036; PC64LE9: # %bb.0: # %entry 1037; PC64LE9-NEXT: addis 3, 2, .LCPI20_0@toc@ha 1038; PC64LE9-NEXT: lfs 0, .LCPI20_0@toc@l(3) 1039; PC64LE9-NEXT: addis 3, 2, .LCPI20_1@toc@ha 1040; PC64LE9-NEXT: lfs 1, .LCPI20_1@toc@l(3) 1041; PC64LE9-NEXT: xssubsp 1, 1, 0 1042; PC64LE9-NEXT: blr 1043entry: 1044 %sub = call <1 x float> @llvm.experimental.constrained.fsub.v1f32( 1045 <1 x float> <float 0x7FF0000000000000>, 1046 <1 x float> <float 1.000000e+00>, 1047 metadata !"round.dynamic", 1048 metadata !"fpexcept.strict") #1 1049 ret <1 x float> %sub 1050} 1051 1052define <2 x double> @constrained_vector_fsub_v2f64() #0 { 1053; PC64LE-LABEL: constrained_vector_fsub_v2f64: 1054; PC64LE: # %bb.0: # %entry 1055; PC64LE-NEXT: addis 3, 2, .LCPI21_0@toc@ha 1056; PC64LE-NEXT: addis 4, 2, .LCPI21_1@toc@ha 1057; PC64LE-NEXT: addi 3, 3, .LCPI21_0@toc@l 1058; PC64LE-NEXT: addi 4, 4, .LCPI21_1@toc@l 1059; PC64LE-NEXT: lxvd2x 0, 0, 3 1060; PC64LE-NEXT: lxvd2x 1, 0, 4 1061; PC64LE-NEXT: xxswapd 0, 0 1062; PC64LE-NEXT: xxswapd 1, 1 1063; PC64LE-NEXT: xvsubdp 34, 1, 0 1064; PC64LE-NEXT: blr 1065; 1066; PC64LE9-LABEL: constrained_vector_fsub_v2f64: 1067; PC64LE9: # %bb.0: # %entry 1068; PC64LE9-NEXT: addis 3, 2, .LCPI21_0@toc@ha 1069; PC64LE9-NEXT: addi 3, 3, .LCPI21_0@toc@l 1070; PC64LE9-NEXT: lxvx 0, 0, 3 1071; PC64LE9-NEXT: addis 3, 2, .LCPI21_1@toc@ha 1072; PC64LE9-NEXT: addi 3, 3, .LCPI21_1@toc@l 1073; PC64LE9-NEXT: lxvx 1, 0, 3 1074; PC64LE9-NEXT: xvsubdp 34, 1, 0 1075; PC64LE9-NEXT: blr 1076entry: 1077 %sub = call <2 x double> @llvm.experimental.constrained.fsub.v2f64( 1078 <2 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF>, 1079 <2 x double> <double 1.000000e+00, double 1.000000e-01>, 1080 metadata !"round.dynamic", 1081 metadata !"fpexcept.strict") #1 1082 ret <2 x double> %sub 1083} 1084 1085define <3 x float> @constrained_vector_fsub_v3f32() #0 { 1086; PC64LE-LABEL: constrained_vector_fsub_v3f32: 1087; PC64LE: # %bb.0: # %entry 1088; PC64LE-NEXT: addis 3, 2, .LCPI22_0@toc@ha 1089; PC64LE-NEXT: addis 4, 2, .LCPI22_2@toc@ha 1090; PC64LE-NEXT: addis 5, 2, .LCPI22_1@toc@ha 1091; PC64LE-NEXT: xxlxor 3, 3, 3 1092; PC64LE-NEXT: lfs 0, .LCPI22_0@toc@l(3) 1093; PC64LE-NEXT: lfs 1, .LCPI22_2@toc@l(4) 1094; PC64LE-NEXT: lfs 2, .LCPI22_1@toc@l(5) 1095; PC64LE-NEXT: addis 3, 2, .LCPI22_3@toc@ha 1096; PC64LE-NEXT: addi 3, 3, .LCPI22_3@toc@l 1097; PC64LE-NEXT: xssubsp 1, 0, 1 1098; PC64LE-NEXT: lvx 4, 0, 3 1099; PC64LE-NEXT: xssubsp 2, 0, 2 1100; PC64LE-NEXT: xssubsp 0, 0, 3 1101; PC64LE-NEXT: xscvdpspn 34, 1 1102; PC64LE-NEXT: xscvdpspn 35, 2 1103; PC64LE-NEXT: vmrghw 2, 3, 2 1104; PC64LE-NEXT: xscvdpspn 35, 0 1105; PC64LE-NEXT: vperm 2, 3, 2, 4 1106; PC64LE-NEXT: blr 1107; 1108; PC64LE9-LABEL: constrained_vector_fsub_v3f32: 1109; PC64LE9: # %bb.0: # %entry 1110; PC64LE9-NEXT: addis 3, 2, .LCPI22_0@toc@ha 1111; PC64LE9-NEXT: xxlxor 1, 1, 1 1112; PC64LE9-NEXT: lfs 0, .LCPI22_0@toc@l(3) 1113; PC64LE9-NEXT: addis 3, 2, .LCPI22_1@toc@ha 1114; PC64LE9-NEXT: lfs 2, .LCPI22_1@toc@l(3) 1115; PC64LE9-NEXT: addis 3, 2, .LCPI22_2@toc@ha 1116; PC64LE9-NEXT: lfs 3, .LCPI22_2@toc@l(3) 1117; PC64LE9-NEXT: addis 3, 2, .LCPI22_3@toc@ha 1118; PC64LE9-NEXT: addi 3, 3, .LCPI22_3@toc@l 1119; PC64LE9-NEXT: xssubsp 1, 0, 1 1120; PC64LE9-NEXT: lxvx 36, 0, 3 1121; PC64LE9-NEXT: xssubsp 2, 0, 2 1122; PC64LE9-NEXT: xssubsp 0, 0, 3 1123; PC64LE9-NEXT: xscvdpspn 35, 2 1124; PC64LE9-NEXT: xscvdpspn 34, 0 1125; PC64LE9-NEXT: vmrghw 2, 3, 2 1126; PC64LE9-NEXT: xscvdpspn 35, 1 1127; PC64LE9-NEXT: vperm 2, 3, 2, 4 1128; PC64LE9-NEXT: blr 1129entry: 1130 %sub = call <3 x float> @llvm.experimental.constrained.fsub.v3f32( 1131 <3 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000, 1132 float 0xFFFFFFFFE0000000>, 1133 <3 x float> <float 2.0, float 1.0, float 0.0>, 1134 metadata !"round.dynamic", 1135 metadata !"fpexcept.strict") #1 1136 ret <3 x float> %sub 1137} 1138 1139define <3 x double> @constrained_vector_fsub_v3f64() #0 { 1140; PC64LE-LABEL: constrained_vector_fsub_v3f64: 1141; PC64LE: # %bb.0: # %entry 1142; PC64LE-NEXT: addis 3, 2, .LCPI23_1@toc@ha 1143; PC64LE-NEXT: addis 4, 2, .LCPI23_2@toc@ha 1144; PC64LE-NEXT: addi 3, 3, .LCPI23_1@toc@l 1145; PC64LE-NEXT: addi 4, 4, .LCPI23_2@toc@l 1146; PC64LE-NEXT: lxvd2x 0, 0, 3 1147; PC64LE-NEXT: lxvd2x 1, 0, 4 1148; PC64LE-NEXT: addis 3, 2, .LCPI23_0@toc@ha 1149; PC64LE-NEXT: lfd 3, .LCPI23_0@toc@l(3) 1150; PC64LE-NEXT: xxswapd 0, 0 1151; PC64LE-NEXT: xxswapd 1, 1 1152; PC64LE-NEXT: xvsubdp 2, 1, 0 1153; PC64LE-NEXT: xxlxor 0, 0, 0 1154; PC64LE-NEXT: xssubdp 3, 3, 0 1155; PC64LE-NEXT: xxswapd 1, 2 1156; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1157; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1158; PC64LE-NEXT: blr 1159; 1160; PC64LE9-LABEL: constrained_vector_fsub_v3f64: 1161; PC64LE9: # %bb.0: # %entry 1162; PC64LE9-NEXT: addis 3, 2, .LCPI23_0@toc@ha 1163; PC64LE9-NEXT: xxlxor 1, 1, 1 1164; PC64LE9-NEXT: lfd 0, .LCPI23_0@toc@l(3) 1165; PC64LE9-NEXT: addis 3, 2, .LCPI23_1@toc@ha 1166; PC64LE9-NEXT: addi 3, 3, .LCPI23_1@toc@l 1167; PC64LE9-NEXT: xssubdp 3, 0, 1 1168; PC64LE9-NEXT: lxvx 0, 0, 3 1169; PC64LE9-NEXT: addis 3, 2, .LCPI23_2@toc@ha 1170; PC64LE9-NEXT: addi 3, 3, .LCPI23_2@toc@l 1171; PC64LE9-NEXT: lxvx 1, 0, 3 1172; PC64LE9-NEXT: xvsubdp 2, 1, 0 1173; PC64LE9-NEXT: xxswapd 1, 2 1174; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1175; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1176; PC64LE9-NEXT: blr 1177entry: 1178 %sub = call <3 x double> @llvm.experimental.constrained.fsub.v3f64( 1179 <3 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF, 1180 double 0xFFEFFFFFFFFFFFFF>, 1181 <3 x double> <double 2.0, double 1.0, double 0.0>, 1182 metadata !"round.dynamic", 1183 metadata !"fpexcept.strict") #1 1184 ret <3 x double> %sub 1185} 1186 1187define <4 x double> @constrained_vector_fsub_v4f64() #0 { 1188; PC64LE-LABEL: constrained_vector_fsub_v4f64: 1189; PC64LE: # %bb.0: # %entry 1190; PC64LE-NEXT: addis 3, 2, .LCPI24_0@toc@ha 1191; PC64LE-NEXT: addis 4, 2, .LCPI24_1@toc@ha 1192; PC64LE-NEXT: addis 5, 2, .LCPI24_2@toc@ha 1193; PC64LE-NEXT: addi 3, 3, .LCPI24_0@toc@l 1194; PC64LE-NEXT: addi 4, 4, .LCPI24_1@toc@l 1195; PC64LE-NEXT: lxvd2x 0, 0, 3 1196; PC64LE-NEXT: addi 3, 5, .LCPI24_2@toc@l 1197; PC64LE-NEXT: lxvd2x 1, 0, 4 1198; PC64LE-NEXT: lxvd2x 2, 0, 3 1199; PC64LE-NEXT: xxswapd 0, 0 1200; PC64LE-NEXT: xxswapd 1, 1 1201; PC64LE-NEXT: xxswapd 2, 2 1202; PC64LE-NEXT: xvsubdp 35, 1, 0 1203; PC64LE-NEXT: xvsubdp 34, 1, 2 1204; PC64LE-NEXT: blr 1205; 1206; PC64LE9-LABEL: constrained_vector_fsub_v4f64: 1207; PC64LE9: # %bb.0: # %entry 1208; PC64LE9-NEXT: addis 3, 2, .LCPI24_0@toc@ha 1209; PC64LE9-NEXT: addi 3, 3, .LCPI24_0@toc@l 1210; PC64LE9-NEXT: lxvx 0, 0, 3 1211; PC64LE9-NEXT: addis 3, 2, .LCPI24_1@toc@ha 1212; PC64LE9-NEXT: addi 3, 3, .LCPI24_1@toc@l 1213; PC64LE9-NEXT: lxvx 1, 0, 3 1214; PC64LE9-NEXT: addis 3, 2, .LCPI24_2@toc@ha 1215; PC64LE9-NEXT: addi 3, 3, .LCPI24_2@toc@l 1216; PC64LE9-NEXT: xvsubdp 35, 1, 0 1217; PC64LE9-NEXT: lxvx 0, 0, 3 1218; PC64LE9-NEXT: xvsubdp 34, 1, 0 1219; PC64LE9-NEXT: blr 1220entry: 1221 %sub = call <4 x double> @llvm.experimental.constrained.fsub.v4f64( 1222 <4 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF, 1223 double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF>, 1224 <4 x double> <double 1.000000e+00, double 1.000000e-01, 1225 double 2.000000e+00, double 2.000000e-01>, 1226 metadata !"round.dynamic", 1227 metadata !"fpexcept.strict") #1 1228 ret <4 x double> %sub 1229} 1230 1231define <1 x float> @constrained_vector_sqrt_v1f32() #0 { 1232; PC64LE-LABEL: constrained_vector_sqrt_v1f32: 1233; PC64LE: # %bb.0: # %entry 1234; PC64LE-NEXT: addis 3, 2, .LCPI25_0@toc@ha 1235; PC64LE-NEXT: lfs 0, .LCPI25_0@toc@l(3) 1236; PC64LE-NEXT: xssqrtsp 1, 0 1237; PC64LE-NEXT: blr 1238; 1239; PC64LE9-LABEL: constrained_vector_sqrt_v1f32: 1240; PC64LE9: # %bb.0: # %entry 1241; PC64LE9-NEXT: addis 3, 2, .LCPI25_0@toc@ha 1242; PC64LE9-NEXT: lfs 0, .LCPI25_0@toc@l(3) 1243; PC64LE9-NEXT: xssqrtsp 1, 0 1244; PC64LE9-NEXT: blr 1245entry: 1246 %sqrt = call <1 x float> @llvm.experimental.constrained.sqrt.v1f32( 1247 <1 x float> <float 42.0>, 1248 metadata !"round.dynamic", 1249 metadata !"fpexcept.strict") #1 1250 ret <1 x float> %sqrt 1251} 1252 1253define <2 x double> @constrained_vector_sqrt_v2f64() #0 { 1254; PC64LE-LABEL: constrained_vector_sqrt_v2f64: 1255; PC64LE: # %bb.0: # %entry 1256; PC64LE-NEXT: addis 3, 2, .LCPI26_0@toc@ha 1257; PC64LE-NEXT: addi 3, 3, .LCPI26_0@toc@l 1258; PC64LE-NEXT: lxvd2x 0, 0, 3 1259; PC64LE-NEXT: xxswapd 0, 0 1260; PC64LE-NEXT: xvsqrtdp 34, 0 1261; PC64LE-NEXT: blr 1262; 1263; PC64LE9-LABEL: constrained_vector_sqrt_v2f64: 1264; PC64LE9: # %bb.0: # %entry 1265; PC64LE9-NEXT: addis 3, 2, .LCPI26_0@toc@ha 1266; PC64LE9-NEXT: addi 3, 3, .LCPI26_0@toc@l 1267; PC64LE9-NEXT: lxvx 0, 0, 3 1268; PC64LE9-NEXT: xvsqrtdp 34, 0 1269; PC64LE9-NEXT: blr 1270entry: 1271 %sqrt = call <2 x double> @llvm.experimental.constrained.sqrt.v2f64( 1272 <2 x double> <double 42.0, double 42.1>, 1273 metadata !"round.dynamic", 1274 metadata !"fpexcept.strict") #1 1275 ret <2 x double> %sqrt 1276} 1277 1278define <3 x float> @constrained_vector_sqrt_v3f32() #0 { 1279; PC64LE-LABEL: constrained_vector_sqrt_v3f32: 1280; PC64LE: # %bb.0: # %entry 1281; PC64LE-NEXT: addis 3, 2, .LCPI27_2@toc@ha 1282; PC64LE-NEXT: addis 4, 2, .LCPI27_1@toc@ha 1283; PC64LE-NEXT: lfs 0, .LCPI27_2@toc@l(3) 1284; PC64LE-NEXT: lfs 1, .LCPI27_1@toc@l(4) 1285; PC64LE-NEXT: addis 3, 2, .LCPI27_0@toc@ha 1286; PC64LE-NEXT: xssqrtsp 0, 0 1287; PC64LE-NEXT: lfs 2, .LCPI27_0@toc@l(3) 1288; PC64LE-NEXT: addis 3, 2, .LCPI27_3@toc@ha 1289; PC64LE-NEXT: xssqrtsp 1, 1 1290; PC64LE-NEXT: addi 3, 3, .LCPI27_3@toc@l 1291; PC64LE-NEXT: lvx 4, 0, 3 1292; PC64LE-NEXT: xssqrtsp 2, 2 1293; PC64LE-NEXT: xscvdpspn 34, 0 1294; PC64LE-NEXT: xscvdpspn 35, 1 1295; PC64LE-NEXT: vmrghw 2, 3, 2 1296; PC64LE-NEXT: xscvdpspn 35, 2 1297; PC64LE-NEXT: vperm 2, 3, 2, 4 1298; PC64LE-NEXT: blr 1299; 1300; PC64LE9-LABEL: constrained_vector_sqrt_v3f32: 1301; PC64LE9: # %bb.0: # %entry 1302; PC64LE9-NEXT: addis 3, 2, .LCPI27_0@toc@ha 1303; PC64LE9-NEXT: lfs 0, .LCPI27_0@toc@l(3) 1304; PC64LE9-NEXT: addis 3, 2, .LCPI27_1@toc@ha 1305; PC64LE9-NEXT: lfs 1, .LCPI27_1@toc@l(3) 1306; PC64LE9-NEXT: addis 3, 2, .LCPI27_2@toc@ha 1307; PC64LE9-NEXT: xssqrtsp 0, 0 1308; PC64LE9-NEXT: lfs 2, .LCPI27_2@toc@l(3) 1309; PC64LE9-NEXT: addis 3, 2, .LCPI27_3@toc@ha 1310; PC64LE9-NEXT: addi 3, 3, .LCPI27_3@toc@l 1311; PC64LE9-NEXT: xssqrtsp 1, 1 1312; PC64LE9-NEXT: xssqrtsp 2, 2 1313; PC64LE9-NEXT: xscvdpspn 36, 0 1314; PC64LE9-NEXT: xscvdpspn 35, 1 1315; PC64LE9-NEXT: xscvdpspn 34, 2 1316; PC64LE9-NEXT: vmrghw 2, 3, 2 1317; PC64LE9-NEXT: lxvx 35, 0, 3 1318; PC64LE9-NEXT: vperm 2, 4, 2, 3 1319; PC64LE9-NEXT: blr 1320entry: 1321 %sqrt = call <3 x float> @llvm.experimental.constrained.sqrt.v3f32( 1322 <3 x float> <float 42.0, float 43.0, float 44.0>, 1323 metadata !"round.dynamic", 1324 metadata !"fpexcept.strict") #1 1325 ret <3 x float> %sqrt 1326} 1327 1328define <3 x double> @constrained_vector_sqrt_v3f64() #0 { 1329; PC64LE-LABEL: constrained_vector_sqrt_v3f64: 1330; PC64LE: # %bb.0: # %entry 1331; PC64LE-NEXT: addis 3, 2, .LCPI28_1@toc@ha 1332; PC64LE-NEXT: addi 3, 3, .LCPI28_1@toc@l 1333; PC64LE-NEXT: lxvd2x 0, 0, 3 1334; PC64LE-NEXT: addis 3, 2, .LCPI28_0@toc@ha 1335; PC64LE-NEXT: lfd 1, .LCPI28_0@toc@l(3) 1336; PC64LE-NEXT: xxswapd 0, 0 1337; PC64LE-NEXT: xssqrtdp 3, 1 1338; PC64LE-NEXT: xvsqrtdp 2, 0 1339; PC64LE-NEXT: xxswapd 1, 2 1340; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1341; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1342; PC64LE-NEXT: blr 1343; 1344; PC64LE9-LABEL: constrained_vector_sqrt_v3f64: 1345; PC64LE9: # %bb.0: # %entry 1346; PC64LE9-NEXT: addis 3, 2, .LCPI28_0@toc@ha 1347; PC64LE9-NEXT: lfd 0, .LCPI28_0@toc@l(3) 1348; PC64LE9-NEXT: addis 3, 2, .LCPI28_1@toc@ha 1349; PC64LE9-NEXT: addi 3, 3, .LCPI28_1@toc@l 1350; PC64LE9-NEXT: xssqrtdp 3, 0 1351; PC64LE9-NEXT: lxvx 0, 0, 3 1352; PC64LE9-NEXT: xvsqrtdp 2, 0 1353; PC64LE9-NEXT: xxswapd 1, 2 1354; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1355; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1356; PC64LE9-NEXT: blr 1357entry: 1358 %sqrt = call <3 x double> @llvm.experimental.constrained.sqrt.v3f64( 1359 <3 x double> <double 42.0, double 42.1, double 42.2>, 1360 metadata !"round.dynamic", 1361 metadata !"fpexcept.strict") #1 1362 ret <3 x double> %sqrt 1363} 1364 1365define <4 x double> @constrained_vector_sqrt_v4f64() #0 { 1366; PC64LE-LABEL: constrained_vector_sqrt_v4f64: 1367; PC64LE: # %bb.0: # %entry 1368; PC64LE-NEXT: addis 3, 2, .LCPI29_0@toc@ha 1369; PC64LE-NEXT: addis 4, 2, .LCPI29_1@toc@ha 1370; PC64LE-NEXT: addi 3, 3, .LCPI29_0@toc@l 1371; PC64LE-NEXT: addi 4, 4, .LCPI29_1@toc@l 1372; PC64LE-NEXT: lxvd2x 0, 0, 3 1373; PC64LE-NEXT: lxvd2x 1, 0, 4 1374; PC64LE-NEXT: xxswapd 0, 0 1375; PC64LE-NEXT: xxswapd 1, 1 1376; PC64LE-NEXT: xvsqrtdp 35, 0 1377; PC64LE-NEXT: xvsqrtdp 34, 1 1378; PC64LE-NEXT: blr 1379; 1380; PC64LE9-LABEL: constrained_vector_sqrt_v4f64: 1381; PC64LE9: # %bb.0: # %entry 1382; PC64LE9-NEXT: addis 3, 2, .LCPI29_0@toc@ha 1383; PC64LE9-NEXT: addi 3, 3, .LCPI29_0@toc@l 1384; PC64LE9-NEXT: lxvx 0, 0, 3 1385; PC64LE9-NEXT: addis 3, 2, .LCPI29_1@toc@ha 1386; PC64LE9-NEXT: addi 3, 3, .LCPI29_1@toc@l 1387; PC64LE9-NEXT: xvsqrtdp 35, 0 1388; PC64LE9-NEXT: lxvx 0, 0, 3 1389; PC64LE9-NEXT: xvsqrtdp 34, 0 1390; PC64LE9-NEXT: blr 1391 entry: 1392 %sqrt = call <4 x double> @llvm.experimental.constrained.sqrt.v4f64( 1393 <4 x double> <double 42.0, double 42.1, 1394 double 42.2, double 42.3>, 1395 metadata !"round.dynamic", 1396 metadata !"fpexcept.strict") #1 1397 ret <4 x double> %sqrt 1398} 1399 1400define <1 x float> @constrained_vector_pow_v1f32() #0 { 1401; PC64LE-LABEL: constrained_vector_pow_v1f32: 1402; PC64LE: # %bb.0: # %entry 1403; PC64LE-NEXT: mflr 0 1404; PC64LE-NEXT: std 0, 16(1) 1405; PC64LE-NEXT: stdu 1, -32(1) 1406; PC64LE-NEXT: addis 3, 2, .LCPI30_0@toc@ha 1407; PC64LE-NEXT: addis 4, 2, .LCPI30_1@toc@ha 1408; PC64LE-NEXT: lfs 1, .LCPI30_0@toc@l(3) 1409; PC64LE-NEXT: lfs 2, .LCPI30_1@toc@l(4) 1410; PC64LE-NEXT: bl powf 1411; PC64LE-NEXT: nop 1412; PC64LE-NEXT: addi 1, 1, 32 1413; PC64LE-NEXT: ld 0, 16(1) 1414; PC64LE-NEXT: mtlr 0 1415; PC64LE-NEXT: blr 1416; 1417; PC64LE9-LABEL: constrained_vector_pow_v1f32: 1418; PC64LE9: # %bb.0: # %entry 1419; PC64LE9-NEXT: mflr 0 1420; PC64LE9-NEXT: std 0, 16(1) 1421; PC64LE9-NEXT: stdu 1, -32(1) 1422; PC64LE9-NEXT: addis 3, 2, .LCPI30_0@toc@ha 1423; PC64LE9-NEXT: lfs 1, .LCPI30_0@toc@l(3) 1424; PC64LE9-NEXT: addis 3, 2, .LCPI30_1@toc@ha 1425; PC64LE9-NEXT: lfs 2, .LCPI30_1@toc@l(3) 1426; PC64LE9-NEXT: bl powf 1427; PC64LE9-NEXT: nop 1428; PC64LE9-NEXT: addi 1, 1, 32 1429; PC64LE9-NEXT: ld 0, 16(1) 1430; PC64LE9-NEXT: mtlr 0 1431; PC64LE9-NEXT: blr 1432entry: 1433 %pow = call <1 x float> @llvm.experimental.constrained.pow.v1f32( 1434 <1 x float> <float 42.0>, 1435 <1 x float> <float 3.0>, 1436 metadata !"round.dynamic", 1437 metadata !"fpexcept.strict") #1 1438 ret <1 x float> %pow 1439} 1440 1441define <2 x double> @constrained_vector_pow_v2f64() #0 { 1442; PC64LE-LABEL: constrained_vector_pow_v2f64: 1443; PC64LE: # %bb.0: # %entry 1444; PC64LE-NEXT: mflr 0 1445; PC64LE-NEXT: std 0, 16(1) 1446; PC64LE-NEXT: stdu 1, -80(1) 1447; PC64LE-NEXT: addis 4, 2, .LCPI31_1@toc@ha 1448; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 1449; PC64LE-NEXT: li 3, 48 1450; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 1451; PC64LE-NEXT: addis 3, 2, .LCPI31_0@toc@ha 1452; PC64LE-NEXT: lfs 31, .LCPI31_1@toc@l(4) 1453; PC64LE-NEXT: lfd 1, .LCPI31_0@toc@l(3) 1454; PC64LE-NEXT: fmr 2, 31 1455; PC64LE-NEXT: bl pow 1456; PC64LE-NEXT: nop 1457; PC64LE-NEXT: addis 3, 2, .LCPI31_2@toc@ha 1458; PC64LE-NEXT: fmr 2, 31 1459; PC64LE-NEXT: xxlor 63, 1, 1 1460; PC64LE-NEXT: lfd 1, .LCPI31_2@toc@l(3) 1461; PC64LE-NEXT: bl pow 1462; PC64LE-NEXT: nop 1463; PC64LE-NEXT: li 3, 48 1464; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1465; PC64LE-NEXT: xxmrghd 34, 1, 63 1466; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 1467; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 1468; PC64LE-NEXT: addi 1, 1, 80 1469; PC64LE-NEXT: ld 0, 16(1) 1470; PC64LE-NEXT: mtlr 0 1471; PC64LE-NEXT: blr 1472; 1473; PC64LE9-LABEL: constrained_vector_pow_v2f64: 1474; PC64LE9: # %bb.0: # %entry 1475; PC64LE9-NEXT: mflr 0 1476; PC64LE9-NEXT: std 0, 16(1) 1477; PC64LE9-NEXT: stdu 1, -64(1) 1478; PC64LE9-NEXT: addis 3, 2, .LCPI31_0@toc@ha 1479; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 1480; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 1481; PC64LE9-NEXT: lfd 1, .LCPI31_0@toc@l(3) 1482; PC64LE9-NEXT: addis 3, 2, .LCPI31_1@toc@ha 1483; PC64LE9-NEXT: lfs 31, .LCPI31_1@toc@l(3) 1484; PC64LE9-NEXT: fmr 2, 31 1485; PC64LE9-NEXT: bl pow 1486; PC64LE9-NEXT: nop 1487; PC64LE9-NEXT: addis 3, 2, .LCPI31_2@toc@ha 1488; PC64LE9-NEXT: xscpsgndp 63, 1, 1 1489; PC64LE9-NEXT: fmr 2, 31 1490; PC64LE9-NEXT: lfd 1, .LCPI31_2@toc@l(3) 1491; PC64LE9-NEXT: bl pow 1492; PC64LE9-NEXT: nop 1493; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1494; PC64LE9-NEXT: xxmrghd 34, 1, 63 1495; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 1496; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 1497; PC64LE9-NEXT: addi 1, 1, 64 1498; PC64LE9-NEXT: ld 0, 16(1) 1499; PC64LE9-NEXT: mtlr 0 1500; PC64LE9-NEXT: blr 1501entry: 1502 %pow = call <2 x double> @llvm.experimental.constrained.pow.v2f64( 1503 <2 x double> <double 42.1, double 42.2>, 1504 <2 x double> <double 3.0, double 3.0>, 1505 metadata !"round.dynamic", 1506 metadata !"fpexcept.strict") #1 1507 ret <2 x double> %pow 1508} 1509 1510define <3 x float> @constrained_vector_pow_v3f32() #0 { 1511; PC64LE-LABEL: constrained_vector_pow_v3f32: 1512; PC64LE: # %bb.0: # %entry 1513; PC64LE-NEXT: mflr 0 1514; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 1515; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 1516; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1517; PC64LE-NEXT: std 0, 16(1) 1518; PC64LE-NEXT: stdu 1, -64(1) 1519; PC64LE-NEXT: addis 4, 2, .LCPI32_1@toc@ha 1520; PC64LE-NEXT: addis 3, 2, .LCPI32_0@toc@ha 1521; PC64LE-NEXT: lfs 31, .LCPI32_1@toc@l(4) 1522; PC64LE-NEXT: lfs 1, .LCPI32_0@toc@l(3) 1523; PC64LE-NEXT: fmr 2, 31 1524; PC64LE-NEXT: bl powf 1525; PC64LE-NEXT: nop 1526; PC64LE-NEXT: addis 3, 2, .LCPI32_2@toc@ha 1527; PC64LE-NEXT: fmr 2, 31 1528; PC64LE-NEXT: fmr 30, 1 1529; PC64LE-NEXT: lfs 1, .LCPI32_2@toc@l(3) 1530; PC64LE-NEXT: bl powf 1531; PC64LE-NEXT: nop 1532; PC64LE-NEXT: addis 3, 2, .LCPI32_3@toc@ha 1533; PC64LE-NEXT: fmr 2, 31 1534; PC64LE-NEXT: fmr 29, 1 1535; PC64LE-NEXT: lfs 1, .LCPI32_3@toc@l(3) 1536; PC64LE-NEXT: bl powf 1537; PC64LE-NEXT: nop 1538; PC64LE-NEXT: xscvdpspn 34, 29 1539; PC64LE-NEXT: addis 3, 2, .LCPI32_4@toc@ha 1540; PC64LE-NEXT: xscvdpspn 35, 1 1541; PC64LE-NEXT: addi 3, 3, .LCPI32_4@toc@l 1542; PC64LE-NEXT: lvx 4, 0, 3 1543; PC64LE-NEXT: vmrghw 2, 2, 3 1544; PC64LE-NEXT: xscvdpspn 35, 30 1545; PC64LE-NEXT: vperm 2, 3, 2, 4 1546; PC64LE-NEXT: addi 1, 1, 64 1547; PC64LE-NEXT: ld 0, 16(1) 1548; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1549; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 1550; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 1551; PC64LE-NEXT: mtlr 0 1552; PC64LE-NEXT: blr 1553; 1554; PC64LE9-LABEL: constrained_vector_pow_v3f32: 1555; PC64LE9: # %bb.0: # %entry 1556; PC64LE9-NEXT: mflr 0 1557; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 1558; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 1559; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1560; PC64LE9-NEXT: std 0, 16(1) 1561; PC64LE9-NEXT: stdu 1, -64(1) 1562; PC64LE9-NEXT: addis 3, 2, .LCPI32_0@toc@ha 1563; PC64LE9-NEXT: lfs 1, .LCPI32_0@toc@l(3) 1564; PC64LE9-NEXT: addis 3, 2, .LCPI32_1@toc@ha 1565; PC64LE9-NEXT: lfs 31, .LCPI32_1@toc@l(3) 1566; PC64LE9-NEXT: fmr 2, 31 1567; PC64LE9-NEXT: bl powf 1568; PC64LE9-NEXT: nop 1569; PC64LE9-NEXT: addis 3, 2, .LCPI32_2@toc@ha 1570; PC64LE9-NEXT: fmr 30, 1 1571; PC64LE9-NEXT: fmr 2, 31 1572; PC64LE9-NEXT: lfs 1, .LCPI32_2@toc@l(3) 1573; PC64LE9-NEXT: bl powf 1574; PC64LE9-NEXT: nop 1575; PC64LE9-NEXT: addis 3, 2, .LCPI32_3@toc@ha 1576; PC64LE9-NEXT: fmr 29, 1 1577; PC64LE9-NEXT: fmr 2, 31 1578; PC64LE9-NEXT: lfs 1, .LCPI32_3@toc@l(3) 1579; PC64LE9-NEXT: bl powf 1580; PC64LE9-NEXT: nop 1581; PC64LE9-NEXT: xscvdpspn 34, 1 1582; PC64LE9-NEXT: xscvdpspn 35, 29 1583; PC64LE9-NEXT: addis 3, 2, .LCPI32_4@toc@ha 1584; PC64LE9-NEXT: addi 3, 3, .LCPI32_4@toc@l 1585; PC64LE9-NEXT: lxvx 36, 0, 3 1586; PC64LE9-NEXT: vmrghw 2, 3, 2 1587; PC64LE9-NEXT: xscvdpspn 35, 30 1588; PC64LE9-NEXT: vperm 2, 3, 2, 4 1589; PC64LE9-NEXT: addi 1, 1, 64 1590; PC64LE9-NEXT: ld 0, 16(1) 1591; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1592; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 1593; PC64LE9-NEXT: mtlr 0 1594; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 1595; PC64LE9-NEXT: blr 1596entry: 1597 %pow = call <3 x float> @llvm.experimental.constrained.pow.v3f32( 1598 <3 x float> <float 42.0, float 43.0, float 44.0>, 1599 <3 x float> <float 3.0, float 3.0, float 3.0>, 1600 metadata !"round.dynamic", 1601 metadata !"fpexcept.strict") #1 1602 ret <3 x float> %pow 1603} 1604 1605define <3 x double> @constrained_vector_pow_v3f64() #0 { 1606; PC64LE-LABEL: constrained_vector_pow_v3f64: 1607; PC64LE: # %bb.0: # %entry 1608; PC64LE-NEXT: mflr 0 1609; PC64LE-NEXT: std 0, 16(1) 1610; PC64LE-NEXT: stdu 1, -80(1) 1611; PC64LE-NEXT: addis 4, 2, .LCPI33_1@toc@ha 1612; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 1613; PC64LE-NEXT: li 3, 48 1614; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 1615; PC64LE-NEXT: addis 3, 2, .LCPI33_0@toc@ha 1616; PC64LE-NEXT: lfs 31, .LCPI33_1@toc@l(4) 1617; PC64LE-NEXT: lfs 1, .LCPI33_0@toc@l(3) 1618; PC64LE-NEXT: fmr 2, 31 1619; PC64LE-NEXT: bl pow 1620; PC64LE-NEXT: nop 1621; PC64LE-NEXT: addis 3, 2, .LCPI33_2@toc@ha 1622; PC64LE-NEXT: fmr 2, 31 1623; PC64LE-NEXT: xxlor 63, 1, 1 1624; PC64LE-NEXT: lfd 1, .LCPI33_2@toc@l(3) 1625; PC64LE-NEXT: bl pow 1626; PC64LE-NEXT: nop 1627; PC64LE-NEXT: addis 3, 2, .LCPI33_3@toc@ha 1628; PC64LE-NEXT: fmr 2, 31 1629; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1630; PC64LE-NEXT: xxmrghd 63, 1, 63 1631; PC64LE-NEXT: lfd 1, .LCPI33_3@toc@l(3) 1632; PC64LE-NEXT: bl pow 1633; PC64LE-NEXT: nop 1634; PC64LE-NEXT: xxswapd 0, 63 1635; PC64LE-NEXT: li 3, 48 1636; PC64LE-NEXT: xxlor 2, 63, 63 1637; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 1638; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 1639; PC64LE-NEXT: fmr 3, 1 1640; PC64LE-NEXT: fmr 1, 0 1641; PC64LE-NEXT: addi 1, 1, 80 1642; PC64LE-NEXT: ld 0, 16(1) 1643; PC64LE-NEXT: mtlr 0 1644; PC64LE-NEXT: blr 1645; 1646; PC64LE9-LABEL: constrained_vector_pow_v3f64: 1647; PC64LE9: # %bb.0: # %entry 1648; PC64LE9-NEXT: mflr 0 1649; PC64LE9-NEXT: std 0, 16(1) 1650; PC64LE9-NEXT: stdu 1, -64(1) 1651; PC64LE9-NEXT: addis 3, 2, .LCPI33_0@toc@ha 1652; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 1653; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 1654; PC64LE9-NEXT: lfs 1, .LCPI33_0@toc@l(3) 1655; PC64LE9-NEXT: addis 3, 2, .LCPI33_1@toc@ha 1656; PC64LE9-NEXT: lfs 31, .LCPI33_1@toc@l(3) 1657; PC64LE9-NEXT: fmr 2, 31 1658; PC64LE9-NEXT: bl pow 1659; PC64LE9-NEXT: nop 1660; PC64LE9-NEXT: addis 3, 2, .LCPI33_2@toc@ha 1661; PC64LE9-NEXT: xscpsgndp 63, 1, 1 1662; PC64LE9-NEXT: fmr 2, 31 1663; PC64LE9-NEXT: lfd 1, .LCPI33_2@toc@l(3) 1664; PC64LE9-NEXT: bl pow 1665; PC64LE9-NEXT: nop 1666; PC64LE9-NEXT: addis 3, 2, .LCPI33_3@toc@ha 1667; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1668; PC64LE9-NEXT: xxmrghd 63, 1, 63 1669; PC64LE9-NEXT: fmr 2, 31 1670; PC64LE9-NEXT: lfd 1, .LCPI33_3@toc@l(3) 1671; PC64LE9-NEXT: bl pow 1672; PC64LE9-NEXT: nop 1673; PC64LE9-NEXT: fmr 3, 1 1674; PC64LE9-NEXT: xxswapd 1, 63 1675; PC64LE9-NEXT: xscpsgndp 2, 63, 63 1676; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 1677; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 1678; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1679; PC64LE9-NEXT: addi 1, 1, 64 1680; PC64LE9-NEXT: ld 0, 16(1) 1681; PC64LE9-NEXT: mtlr 0 1682; PC64LE9-NEXT: blr 1683entry: 1684 %pow = call <3 x double> @llvm.experimental.constrained.pow.v3f64( 1685 <3 x double> <double 42.0, double 42.1, double 42.2>, 1686 <3 x double> <double 3.0, double 3.0, double 3.0>, 1687 metadata !"round.dynamic", 1688 metadata !"fpexcept.strict") #1 1689 ret <3 x double> %pow 1690} 1691 1692define <4 x double> @constrained_vector_pow_v4f64() #0 { 1693; PC64LE-LABEL: constrained_vector_pow_v4f64: 1694; PC64LE: # %bb.0: # %entry 1695; PC64LE-NEXT: mflr 0 1696; PC64LE-NEXT: std 0, 16(1) 1697; PC64LE-NEXT: stdu 1, -96(1) 1698; PC64LE-NEXT: addis 4, 2, .LCPI34_1@toc@ha 1699; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 1700; PC64LE-NEXT: li 3, 48 1701; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 1702; PC64LE-NEXT: li 3, 64 1703; PC64LE-NEXT: lfs 31, .LCPI34_1@toc@l(4) 1704; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 1705; PC64LE-NEXT: addis 3, 2, .LCPI34_0@toc@ha 1706; PC64LE-NEXT: lfd 1, .LCPI34_0@toc@l(3) 1707; PC64LE-NEXT: fmr 2, 31 1708; PC64LE-NEXT: bl pow 1709; PC64LE-NEXT: nop 1710; PC64LE-NEXT: addis 3, 2, .LCPI34_2@toc@ha 1711; PC64LE-NEXT: fmr 2, 31 1712; PC64LE-NEXT: xxlor 63, 1, 1 1713; PC64LE-NEXT: lfd 1, .LCPI34_2@toc@l(3) 1714; PC64LE-NEXT: bl pow 1715; PC64LE-NEXT: nop 1716; PC64LE-NEXT: addis 3, 2, .LCPI34_3@toc@ha 1717; PC64LE-NEXT: fmr 2, 31 1718; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1719; PC64LE-NEXT: xxmrghd 63, 1, 63 1720; PC64LE-NEXT: lfd 1, .LCPI34_3@toc@l(3) 1721; PC64LE-NEXT: bl pow 1722; PC64LE-NEXT: nop 1723; PC64LE-NEXT: addis 3, 2, .LCPI34_4@toc@ha 1724; PC64LE-NEXT: fmr 2, 31 1725; PC64LE-NEXT: xxlor 62, 1, 1 1726; PC64LE-NEXT: lfd 1, .LCPI34_4@toc@l(3) 1727; PC64LE-NEXT: bl pow 1728; PC64LE-NEXT: nop 1729; PC64LE-NEXT: li 3, 64 1730; PC64LE-NEXT: vmr 2, 31 1731; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1732; PC64LE-NEXT: xxmrghd 35, 1, 62 1733; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 1734; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 1735; PC64LE-NEXT: li 3, 48 1736; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 1737; PC64LE-NEXT: addi 1, 1, 96 1738; PC64LE-NEXT: ld 0, 16(1) 1739; PC64LE-NEXT: mtlr 0 1740; PC64LE-NEXT: blr 1741; 1742; PC64LE9-LABEL: constrained_vector_pow_v4f64: 1743; PC64LE9: # %bb.0: # %entry 1744; PC64LE9-NEXT: mflr 0 1745; PC64LE9-NEXT: std 0, 16(1) 1746; PC64LE9-NEXT: stdu 1, -80(1) 1747; PC64LE9-NEXT: addis 3, 2, .LCPI34_0@toc@ha 1748; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 1749; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 1750; PC64LE9-NEXT: lfd 1, .LCPI34_0@toc@l(3) 1751; PC64LE9-NEXT: addis 3, 2, .LCPI34_1@toc@ha 1752; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 1753; PC64LE9-NEXT: lfs 31, .LCPI34_1@toc@l(3) 1754; PC64LE9-NEXT: fmr 2, 31 1755; PC64LE9-NEXT: bl pow 1756; PC64LE9-NEXT: nop 1757; PC64LE9-NEXT: addis 3, 2, .LCPI34_2@toc@ha 1758; PC64LE9-NEXT: xscpsgndp 63, 1, 1 1759; PC64LE9-NEXT: fmr 2, 31 1760; PC64LE9-NEXT: lfd 1, .LCPI34_2@toc@l(3) 1761; PC64LE9-NEXT: bl pow 1762; PC64LE9-NEXT: nop 1763; PC64LE9-NEXT: addis 3, 2, .LCPI34_3@toc@ha 1764; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1765; PC64LE9-NEXT: xxmrghd 63, 1, 63 1766; PC64LE9-NEXT: fmr 2, 31 1767; PC64LE9-NEXT: lfd 1, .LCPI34_3@toc@l(3) 1768; PC64LE9-NEXT: bl pow 1769; PC64LE9-NEXT: nop 1770; PC64LE9-NEXT: addis 3, 2, .LCPI34_4@toc@ha 1771; PC64LE9-NEXT: xscpsgndp 62, 1, 1 1772; PC64LE9-NEXT: fmr 2, 31 1773; PC64LE9-NEXT: lfd 1, .LCPI34_4@toc@l(3) 1774; PC64LE9-NEXT: bl pow 1775; PC64LE9-NEXT: nop 1776; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1777; PC64LE9-NEXT: xxmrghd 35, 1, 62 1778; PC64LE9-NEXT: vmr 2, 31 1779; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 1780; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 1781; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 1782; PC64LE9-NEXT: addi 1, 1, 80 1783; PC64LE9-NEXT: ld 0, 16(1) 1784; PC64LE9-NEXT: mtlr 0 1785; PC64LE9-NEXT: blr 1786entry: 1787 %pow = call <4 x double> @llvm.experimental.constrained.pow.v4f64( 1788 <4 x double> <double 42.1, double 42.2, 1789 double 42.3, double 42.4>, 1790 <4 x double> <double 3.0, double 3.0, 1791 double 3.0, double 3.0>, 1792 metadata !"round.dynamic", 1793 metadata !"fpexcept.strict") #1 1794 ret <4 x double> %pow 1795} 1796 1797define <1 x float> @constrained_vector_powi_v1f32() #0 { 1798; PC64LE-LABEL: constrained_vector_powi_v1f32: 1799; PC64LE: # %bb.0: # %entry 1800; PC64LE-NEXT: mflr 0 1801; PC64LE-NEXT: std 0, 16(1) 1802; PC64LE-NEXT: stdu 1, -32(1) 1803; PC64LE-NEXT: addis 3, 2, .LCPI35_0@toc@ha 1804; PC64LE-NEXT: li 4, 3 1805; PC64LE-NEXT: lfs 1, .LCPI35_0@toc@l(3) 1806; PC64LE-NEXT: bl __powisf2 1807; PC64LE-NEXT: nop 1808; PC64LE-NEXT: addi 1, 1, 32 1809; PC64LE-NEXT: ld 0, 16(1) 1810; PC64LE-NEXT: mtlr 0 1811; PC64LE-NEXT: blr 1812; 1813; PC64LE9-LABEL: constrained_vector_powi_v1f32: 1814; PC64LE9: # %bb.0: # %entry 1815; PC64LE9-NEXT: mflr 0 1816; PC64LE9-NEXT: std 0, 16(1) 1817; PC64LE9-NEXT: stdu 1, -32(1) 1818; PC64LE9-NEXT: addis 3, 2, .LCPI35_0@toc@ha 1819; PC64LE9-NEXT: li 4, 3 1820; PC64LE9-NEXT: lfs 1, .LCPI35_0@toc@l(3) 1821; PC64LE9-NEXT: bl __powisf2 1822; PC64LE9-NEXT: nop 1823; PC64LE9-NEXT: addi 1, 1, 32 1824; PC64LE9-NEXT: ld 0, 16(1) 1825; PC64LE9-NEXT: mtlr 0 1826; PC64LE9-NEXT: blr 1827entry: 1828 %powi = call <1 x float> @llvm.experimental.constrained.powi.v1f32( 1829 <1 x float> <float 42.0>, 1830 i32 3, 1831 metadata !"round.dynamic", 1832 metadata !"fpexcept.strict") #1 1833 ret <1 x float> %powi 1834} 1835 1836define <2 x double> @constrained_vector_powi_v2f64() #0 { 1837; PC64LE-LABEL: constrained_vector_powi_v2f64: 1838; PC64LE: # %bb.0: # %entry 1839; PC64LE-NEXT: mflr 0 1840; PC64LE-NEXT: std 0, 16(1) 1841; PC64LE-NEXT: stdu 1, -64(1) 1842; PC64LE-NEXT: li 3, 48 1843; PC64LE-NEXT: li 4, 3 1844; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 1845; PC64LE-NEXT: addis 3, 2, .LCPI36_0@toc@ha 1846; PC64LE-NEXT: lfd 1, .LCPI36_0@toc@l(3) 1847; PC64LE-NEXT: bl __powidf2 1848; PC64LE-NEXT: nop 1849; PC64LE-NEXT: addis 3, 2, .LCPI36_1@toc@ha 1850; PC64LE-NEXT: xxlor 63, 1, 1 1851; PC64LE-NEXT: li 4, 3 1852; PC64LE-NEXT: lfd 1, .LCPI36_1@toc@l(3) 1853; PC64LE-NEXT: bl __powidf2 1854; PC64LE-NEXT: nop 1855; PC64LE-NEXT: li 3, 48 1856; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1857; PC64LE-NEXT: xxmrghd 34, 1, 63 1858; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 1859; PC64LE-NEXT: addi 1, 1, 64 1860; PC64LE-NEXT: ld 0, 16(1) 1861; PC64LE-NEXT: mtlr 0 1862; PC64LE-NEXT: blr 1863; 1864; PC64LE9-LABEL: constrained_vector_powi_v2f64: 1865; PC64LE9: # %bb.0: # %entry 1866; PC64LE9-NEXT: mflr 0 1867; PC64LE9-NEXT: std 0, 16(1) 1868; PC64LE9-NEXT: stdu 1, -48(1) 1869; PC64LE9-NEXT: addis 3, 2, .LCPI36_0@toc@ha 1870; PC64LE9-NEXT: li 4, 3 1871; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 1872; PC64LE9-NEXT: lfd 1, .LCPI36_0@toc@l(3) 1873; PC64LE9-NEXT: bl __powidf2 1874; PC64LE9-NEXT: nop 1875; PC64LE9-NEXT: addis 3, 2, .LCPI36_1@toc@ha 1876; PC64LE9-NEXT: xscpsgndp 63, 1, 1 1877; PC64LE9-NEXT: li 4, 3 1878; PC64LE9-NEXT: lfd 1, .LCPI36_1@toc@l(3) 1879; PC64LE9-NEXT: bl __powidf2 1880; PC64LE9-NEXT: nop 1881; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1882; PC64LE9-NEXT: xxmrghd 34, 1, 63 1883; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 1884; PC64LE9-NEXT: addi 1, 1, 48 1885; PC64LE9-NEXT: ld 0, 16(1) 1886; PC64LE9-NEXT: mtlr 0 1887; PC64LE9-NEXT: blr 1888entry: 1889 %powi = call <2 x double> @llvm.experimental.constrained.powi.v2f64( 1890 <2 x double> <double 42.1, double 42.2>, 1891 i32 3, 1892 metadata !"round.dynamic", 1893 metadata !"fpexcept.strict") #1 1894 ret <2 x double> %powi 1895} 1896 1897define <3 x float> @constrained_vector_powi_v3f32() #0 { 1898; 1899; 1900; PC64LE-LABEL: constrained_vector_powi_v3f32: 1901; PC64LE: # %bb.0: # %entry 1902; PC64LE-NEXT: mflr 0 1903; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 1904; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1905; PC64LE-NEXT: std 0, 16(1) 1906; PC64LE-NEXT: stdu 1, -48(1) 1907; PC64LE-NEXT: addis 3, 2, .LCPI37_0@toc@ha 1908; PC64LE-NEXT: li 4, 3 1909; PC64LE-NEXT: lfs 1, .LCPI37_0@toc@l(3) 1910; PC64LE-NEXT: bl __powisf2 1911; PC64LE-NEXT: nop 1912; PC64LE-NEXT: addis 3, 2, .LCPI37_1@toc@ha 1913; PC64LE-NEXT: fmr 31, 1 1914; PC64LE-NEXT: li 4, 3 1915; PC64LE-NEXT: lfs 1, .LCPI37_1@toc@l(3) 1916; PC64LE-NEXT: bl __powisf2 1917; PC64LE-NEXT: nop 1918; PC64LE-NEXT: addis 3, 2, .LCPI37_2@toc@ha 1919; PC64LE-NEXT: fmr 30, 1 1920; PC64LE-NEXT: li 4, 3 1921; PC64LE-NEXT: lfs 1, .LCPI37_2@toc@l(3) 1922; PC64LE-NEXT: bl __powisf2 1923; PC64LE-NEXT: nop 1924; PC64LE-NEXT: xscvdpspn 34, 30 1925; PC64LE-NEXT: addis 3, 2, .LCPI37_3@toc@ha 1926; PC64LE-NEXT: xscvdpspn 35, 1 1927; PC64LE-NEXT: addi 3, 3, .LCPI37_3@toc@l 1928; PC64LE-NEXT: lvx 4, 0, 3 1929; PC64LE-NEXT: vmrghw 2, 2, 3 1930; PC64LE-NEXT: xscvdpspn 35, 31 1931; PC64LE-NEXT: vperm 2, 3, 2, 4 1932; PC64LE-NEXT: addi 1, 1, 48 1933; PC64LE-NEXT: ld 0, 16(1) 1934; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1935; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 1936; PC64LE-NEXT: mtlr 0 1937; PC64LE-NEXT: blr 1938; 1939; PC64LE9-LABEL: constrained_vector_powi_v3f32: 1940; PC64LE9: # %bb.0: # %entry 1941; PC64LE9-NEXT: mflr 0 1942; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 1943; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1944; PC64LE9-NEXT: std 0, 16(1) 1945; PC64LE9-NEXT: stdu 1, -48(1) 1946; PC64LE9-NEXT: addis 3, 2, .LCPI37_0@toc@ha 1947; PC64LE9-NEXT: li 4, 3 1948; PC64LE9-NEXT: lfs 1, .LCPI37_0@toc@l(3) 1949; PC64LE9-NEXT: bl __powisf2 1950; PC64LE9-NEXT: nop 1951; PC64LE9-NEXT: addis 3, 2, .LCPI37_1@toc@ha 1952; PC64LE9-NEXT: fmr 31, 1 1953; PC64LE9-NEXT: li 4, 3 1954; PC64LE9-NEXT: lfs 1, .LCPI37_1@toc@l(3) 1955; PC64LE9-NEXT: bl __powisf2 1956; PC64LE9-NEXT: nop 1957; PC64LE9-NEXT: addis 3, 2, .LCPI37_2@toc@ha 1958; PC64LE9-NEXT: fmr 30, 1 1959; PC64LE9-NEXT: li 4, 3 1960; PC64LE9-NEXT: lfs 1, .LCPI37_2@toc@l(3) 1961; PC64LE9-NEXT: bl __powisf2 1962; PC64LE9-NEXT: nop 1963; PC64LE9-NEXT: xscvdpspn 34, 1 1964; PC64LE9-NEXT: xscvdpspn 35, 30 1965; PC64LE9-NEXT: addis 3, 2, .LCPI37_3@toc@ha 1966; PC64LE9-NEXT: addi 3, 3, .LCPI37_3@toc@l 1967; PC64LE9-NEXT: lxvx 36, 0, 3 1968; PC64LE9-NEXT: vmrghw 2, 3, 2 1969; PC64LE9-NEXT: xscvdpspn 35, 31 1970; PC64LE9-NEXT: vperm 2, 3, 2, 4 1971; PC64LE9-NEXT: addi 1, 1, 48 1972; PC64LE9-NEXT: ld 0, 16(1) 1973; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1974; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 1975; PC64LE9-NEXT: mtlr 0 1976; PC64LE9-NEXT: blr 1977entry: 1978 %powi = call <3 x float> @llvm.experimental.constrained.powi.v3f32( 1979 <3 x float> <float 42.0, float 43.0, float 44.0>, 1980 i32 3, 1981 metadata !"round.dynamic", 1982 metadata !"fpexcept.strict") #1 1983 ret <3 x float> %powi 1984} 1985 1986define <3 x double> @constrained_vector_powi_v3f64() #0 { 1987; PC64LE-LABEL: constrained_vector_powi_v3f64: 1988; PC64LE: # %bb.0: # %entry 1989; PC64LE-NEXT: mflr 0 1990; PC64LE-NEXT: std 0, 16(1) 1991; PC64LE-NEXT: stdu 1, -64(1) 1992; PC64LE-NEXT: li 3, 48 1993; PC64LE-NEXT: li 4, 3 1994; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 1995; PC64LE-NEXT: addis 3, 2, .LCPI38_0@toc@ha 1996; PC64LE-NEXT: lfd 1, .LCPI38_0@toc@l(3) 1997; PC64LE-NEXT: bl __powidf2 1998; PC64LE-NEXT: nop 1999; PC64LE-NEXT: addis 3, 2, .LCPI38_1@toc@ha 2000; PC64LE-NEXT: xxlor 63, 1, 1 2001; PC64LE-NEXT: li 4, 3 2002; PC64LE-NEXT: lfs 1, .LCPI38_1@toc@l(3) 2003; PC64LE-NEXT: bl __powidf2 2004; PC64LE-NEXT: nop 2005; PC64LE-NEXT: addis 3, 2, .LCPI38_2@toc@ha 2006; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2007; PC64LE-NEXT: xxmrghd 63, 63, 1 2008; PC64LE-NEXT: li 4, 3 2009; PC64LE-NEXT: lfd 1, .LCPI38_2@toc@l(3) 2010; PC64LE-NEXT: bl __powidf2 2011; PC64LE-NEXT: nop 2012; PC64LE-NEXT: xxswapd 0, 63 2013; PC64LE-NEXT: li 3, 48 2014; PC64LE-NEXT: xxlor 2, 63, 63 2015; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2016; PC64LE-NEXT: fmr 3, 1 2017; PC64LE-NEXT: fmr 1, 0 2018; PC64LE-NEXT: addi 1, 1, 64 2019; PC64LE-NEXT: ld 0, 16(1) 2020; PC64LE-NEXT: mtlr 0 2021; PC64LE-NEXT: blr 2022; 2023; PC64LE9-LABEL: constrained_vector_powi_v3f64: 2024; PC64LE9: # %bb.0: # %entry 2025; PC64LE9-NEXT: mflr 0 2026; PC64LE9-NEXT: std 0, 16(1) 2027; PC64LE9-NEXT: stdu 1, -48(1) 2028; PC64LE9-NEXT: addis 3, 2, .LCPI38_0@toc@ha 2029; PC64LE9-NEXT: li 4, 3 2030; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 2031; PC64LE9-NEXT: lfd 1, .LCPI38_0@toc@l(3) 2032; PC64LE9-NEXT: bl __powidf2 2033; PC64LE9-NEXT: nop 2034; PC64LE9-NEXT: addis 3, 2, .LCPI38_1@toc@ha 2035; PC64LE9-NEXT: xscpsgndp 63, 1, 1 2036; PC64LE9-NEXT: li 4, 3 2037; PC64LE9-NEXT: lfs 1, .LCPI38_1@toc@l(3) 2038; PC64LE9-NEXT: bl __powidf2 2039; PC64LE9-NEXT: nop 2040; PC64LE9-NEXT: addis 3, 2, .LCPI38_2@toc@ha 2041; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2042; PC64LE9-NEXT: xxmrghd 63, 63, 1 2043; PC64LE9-NEXT: li 4, 3 2044; PC64LE9-NEXT: lfd 1, .LCPI38_2@toc@l(3) 2045; PC64LE9-NEXT: bl __powidf2 2046; PC64LE9-NEXT: nop 2047; PC64LE9-NEXT: fmr 3, 1 2048; PC64LE9-NEXT: xxswapd 1, 63 2049; PC64LE9-NEXT: xscpsgndp 2, 63, 63 2050; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 2051; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2052; PC64LE9-NEXT: addi 1, 1, 48 2053; PC64LE9-NEXT: ld 0, 16(1) 2054; PC64LE9-NEXT: mtlr 0 2055; PC64LE9-NEXT: blr 2056entry: 2057 %powi = call <3 x double> @llvm.experimental.constrained.powi.v3f64( 2058 <3 x double> <double 42.0, double 42.1, double 42.2>, 2059 i32 3, 2060 metadata !"round.dynamic", 2061 metadata !"fpexcept.strict") #1 2062 ret <3 x double> %powi 2063} 2064 2065define <4 x double> @constrained_vector_powi_v4f64() #0 { 2066; PC64LE-LABEL: constrained_vector_powi_v4f64: 2067; PC64LE: # %bb.0: # %entry 2068; PC64LE-NEXT: mflr 0 2069; PC64LE-NEXT: std 0, 16(1) 2070; PC64LE-NEXT: stdu 1, -80(1) 2071; PC64LE-NEXT: li 3, 48 2072; PC64LE-NEXT: li 4, 3 2073; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 2074; PC64LE-NEXT: li 3, 64 2075; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2076; PC64LE-NEXT: addis 3, 2, .LCPI39_0@toc@ha 2077; PC64LE-NEXT: lfd 1, .LCPI39_0@toc@l(3) 2078; PC64LE-NEXT: bl __powidf2 2079; PC64LE-NEXT: nop 2080; PC64LE-NEXT: addis 3, 2, .LCPI39_1@toc@ha 2081; PC64LE-NEXT: xxlor 63, 1, 1 2082; PC64LE-NEXT: li 4, 3 2083; PC64LE-NEXT: lfd 1, .LCPI39_1@toc@l(3) 2084; PC64LE-NEXT: bl __powidf2 2085; PC64LE-NEXT: nop 2086; PC64LE-NEXT: addis 3, 2, .LCPI39_2@toc@ha 2087; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2088; PC64LE-NEXT: xxmrghd 63, 1, 63 2089; PC64LE-NEXT: li 4, 3 2090; PC64LE-NEXT: lfd 1, .LCPI39_2@toc@l(3) 2091; PC64LE-NEXT: bl __powidf2 2092; PC64LE-NEXT: nop 2093; PC64LE-NEXT: addis 3, 2, .LCPI39_3@toc@ha 2094; PC64LE-NEXT: xxlor 62, 1, 1 2095; PC64LE-NEXT: li 4, 3 2096; PC64LE-NEXT: lfd 1, .LCPI39_3@toc@l(3) 2097; PC64LE-NEXT: bl __powidf2 2098; PC64LE-NEXT: nop 2099; PC64LE-NEXT: li 3, 64 2100; PC64LE-NEXT: vmr 2, 31 2101; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2102; PC64LE-NEXT: xxmrghd 35, 1, 62 2103; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2104; PC64LE-NEXT: li 3, 48 2105; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 2106; PC64LE-NEXT: addi 1, 1, 80 2107; PC64LE-NEXT: ld 0, 16(1) 2108; PC64LE-NEXT: mtlr 0 2109; PC64LE-NEXT: blr 2110; 2111; PC64LE9-LABEL: constrained_vector_powi_v4f64: 2112; PC64LE9: # %bb.0: # %entry 2113; PC64LE9-NEXT: mflr 0 2114; PC64LE9-NEXT: std 0, 16(1) 2115; PC64LE9-NEXT: stdu 1, -64(1) 2116; PC64LE9-NEXT: addis 3, 2, .LCPI39_0@toc@ha 2117; PC64LE9-NEXT: li 4, 3 2118; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 2119; PC64LE9-NEXT: lfd 1, .LCPI39_0@toc@l(3) 2120; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2121; PC64LE9-NEXT: bl __powidf2 2122; PC64LE9-NEXT: nop 2123; PC64LE9-NEXT: addis 3, 2, .LCPI39_1@toc@ha 2124; PC64LE9-NEXT: xscpsgndp 63, 1, 1 2125; PC64LE9-NEXT: li 4, 3 2126; PC64LE9-NEXT: lfd 1, .LCPI39_1@toc@l(3) 2127; PC64LE9-NEXT: bl __powidf2 2128; PC64LE9-NEXT: nop 2129; PC64LE9-NEXT: addis 3, 2, .LCPI39_2@toc@ha 2130; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2131; PC64LE9-NEXT: xxmrghd 63, 1, 63 2132; PC64LE9-NEXT: li 4, 3 2133; PC64LE9-NEXT: lfd 1, .LCPI39_2@toc@l(3) 2134; PC64LE9-NEXT: bl __powidf2 2135; PC64LE9-NEXT: nop 2136; PC64LE9-NEXT: addis 3, 2, .LCPI39_3@toc@ha 2137; PC64LE9-NEXT: xscpsgndp 62, 1, 1 2138; PC64LE9-NEXT: li 4, 3 2139; PC64LE9-NEXT: lfd 1, .LCPI39_3@toc@l(3) 2140; PC64LE9-NEXT: bl __powidf2 2141; PC64LE9-NEXT: nop 2142; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2143; PC64LE9-NEXT: xxmrghd 35, 1, 62 2144; PC64LE9-NEXT: vmr 2, 31 2145; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2146; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 2147; PC64LE9-NEXT: addi 1, 1, 64 2148; PC64LE9-NEXT: ld 0, 16(1) 2149; PC64LE9-NEXT: mtlr 0 2150; PC64LE9-NEXT: blr 2151entry: 2152 %powi = call <4 x double> @llvm.experimental.constrained.powi.v4f64( 2153 <4 x double> <double 42.1, double 42.2, 2154 double 42.3, double 42.4>, 2155 i32 3, 2156 metadata !"round.dynamic", 2157 metadata !"fpexcept.strict") #1 2158 ret <4 x double> %powi 2159} 2160 2161define <1 x float> @constrained_vector_sin_v1f32() #0 { 2162; PC64LE-LABEL: constrained_vector_sin_v1f32: 2163; PC64LE: # %bb.0: # %entry 2164; PC64LE-NEXT: mflr 0 2165; PC64LE-NEXT: std 0, 16(1) 2166; PC64LE-NEXT: stdu 1, -32(1) 2167; PC64LE-NEXT: addis 3, 2, .LCPI40_0@toc@ha 2168; PC64LE-NEXT: lfs 1, .LCPI40_0@toc@l(3) 2169; PC64LE-NEXT: bl sinf 2170; PC64LE-NEXT: nop 2171; PC64LE-NEXT: addi 1, 1, 32 2172; PC64LE-NEXT: ld 0, 16(1) 2173; PC64LE-NEXT: mtlr 0 2174; PC64LE-NEXT: blr 2175; 2176; PC64LE9-LABEL: constrained_vector_sin_v1f32: 2177; PC64LE9: # %bb.0: # %entry 2178; PC64LE9-NEXT: mflr 0 2179; PC64LE9-NEXT: std 0, 16(1) 2180; PC64LE9-NEXT: stdu 1, -32(1) 2181; PC64LE9-NEXT: addis 3, 2, .LCPI40_0@toc@ha 2182; PC64LE9-NEXT: lfs 1, .LCPI40_0@toc@l(3) 2183; PC64LE9-NEXT: bl sinf 2184; PC64LE9-NEXT: nop 2185; PC64LE9-NEXT: addi 1, 1, 32 2186; PC64LE9-NEXT: ld 0, 16(1) 2187; PC64LE9-NEXT: mtlr 0 2188; PC64LE9-NEXT: blr 2189entry: 2190 %sin = call <1 x float> @llvm.experimental.constrained.sin.v1f32( 2191 <1 x float> <float 42.0>, 2192 metadata !"round.dynamic", 2193 metadata !"fpexcept.strict") #1 2194 ret <1 x float> %sin 2195} 2196 2197define <2 x double> @constrained_vector_sin_v2f64() #0 { 2198; PC64LE-LABEL: constrained_vector_sin_v2f64: 2199; PC64LE: # %bb.0: # %entry 2200; PC64LE-NEXT: mflr 0 2201; PC64LE-NEXT: std 0, 16(1) 2202; PC64LE-NEXT: stdu 1, -64(1) 2203; PC64LE-NEXT: li 3, 48 2204; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2205; PC64LE-NEXT: addis 3, 2, .LCPI41_0@toc@ha 2206; PC64LE-NEXT: lfd 1, .LCPI41_0@toc@l(3) 2207; PC64LE-NEXT: bl sin 2208; PC64LE-NEXT: nop 2209; PC64LE-NEXT: addis 3, 2, .LCPI41_1@toc@ha 2210; PC64LE-NEXT: xxlor 63, 1, 1 2211; PC64LE-NEXT: lfs 1, .LCPI41_1@toc@l(3) 2212; PC64LE-NEXT: bl sin 2213; PC64LE-NEXT: nop 2214; PC64LE-NEXT: li 3, 48 2215; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2216; PC64LE-NEXT: xxmrghd 34, 63, 1 2217; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2218; PC64LE-NEXT: addi 1, 1, 64 2219; PC64LE-NEXT: ld 0, 16(1) 2220; PC64LE-NEXT: mtlr 0 2221; PC64LE-NEXT: blr 2222; 2223; PC64LE9-LABEL: constrained_vector_sin_v2f64: 2224; PC64LE9: # %bb.0: # %entry 2225; PC64LE9-NEXT: mflr 0 2226; PC64LE9-NEXT: std 0, 16(1) 2227; PC64LE9-NEXT: stdu 1, -48(1) 2228; PC64LE9-NEXT: addis 3, 2, .LCPI41_0@toc@ha 2229; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 2230; PC64LE9-NEXT: lfd 1, .LCPI41_0@toc@l(3) 2231; PC64LE9-NEXT: bl sin 2232; PC64LE9-NEXT: nop 2233; PC64LE9-NEXT: addis 3, 2, .LCPI41_1@toc@ha 2234; PC64LE9-NEXT: xscpsgndp 63, 1, 1 2235; PC64LE9-NEXT: lfs 1, .LCPI41_1@toc@l(3) 2236; PC64LE9-NEXT: bl sin 2237; PC64LE9-NEXT: nop 2238; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2239; PC64LE9-NEXT: xxmrghd 34, 63, 1 2240; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 2241; PC64LE9-NEXT: addi 1, 1, 48 2242; PC64LE9-NEXT: ld 0, 16(1) 2243; PC64LE9-NEXT: mtlr 0 2244; PC64LE9-NEXT: blr 2245entry: 2246 %sin = call <2 x double> @llvm.experimental.constrained.sin.v2f64( 2247 <2 x double> <double 42.0, double 42.1>, 2248 metadata !"round.dynamic", 2249 metadata !"fpexcept.strict") #1 2250 ret <2 x double> %sin 2251} 2252 2253define <3 x float> @constrained_vector_sin_v3f32() #0 { 2254; PC64LE-LABEL: constrained_vector_sin_v3f32: 2255; PC64LE: # %bb.0: # %entry 2256; PC64LE-NEXT: mflr 0 2257; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 2258; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 2259; PC64LE-NEXT: std 0, 16(1) 2260; PC64LE-NEXT: stdu 1, -48(1) 2261; PC64LE-NEXT: addis 3, 2, .LCPI42_0@toc@ha 2262; PC64LE-NEXT: lfs 1, .LCPI42_0@toc@l(3) 2263; PC64LE-NEXT: bl sinf 2264; PC64LE-NEXT: nop 2265; PC64LE-NEXT: addis 3, 2, .LCPI42_1@toc@ha 2266; PC64LE-NEXT: fmr 31, 1 2267; PC64LE-NEXT: lfs 1, .LCPI42_1@toc@l(3) 2268; PC64LE-NEXT: bl sinf 2269; PC64LE-NEXT: nop 2270; PC64LE-NEXT: addis 3, 2, .LCPI42_2@toc@ha 2271; PC64LE-NEXT: fmr 30, 1 2272; PC64LE-NEXT: lfs 1, .LCPI42_2@toc@l(3) 2273; PC64LE-NEXT: bl sinf 2274; PC64LE-NEXT: nop 2275; PC64LE-NEXT: xscvdpspn 34, 30 2276; PC64LE-NEXT: addis 3, 2, .LCPI42_3@toc@ha 2277; PC64LE-NEXT: xscvdpspn 35, 1 2278; PC64LE-NEXT: addi 3, 3, .LCPI42_3@toc@l 2279; PC64LE-NEXT: lvx 4, 0, 3 2280; PC64LE-NEXT: vmrghw 2, 2, 3 2281; PC64LE-NEXT: xscvdpspn 35, 31 2282; PC64LE-NEXT: vperm 2, 3, 2, 4 2283; PC64LE-NEXT: addi 1, 1, 48 2284; PC64LE-NEXT: ld 0, 16(1) 2285; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2286; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2287; PC64LE-NEXT: mtlr 0 2288; PC64LE-NEXT: blr 2289; 2290; PC64LE9-LABEL: constrained_vector_sin_v3f32: 2291; PC64LE9: # %bb.0: # %entry 2292; PC64LE9-NEXT: mflr 0 2293; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 2294; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 2295; PC64LE9-NEXT: std 0, 16(1) 2296; PC64LE9-NEXT: stdu 1, -48(1) 2297; PC64LE9-NEXT: addis 3, 2, .LCPI42_0@toc@ha 2298; PC64LE9-NEXT: lfs 1, .LCPI42_0@toc@l(3) 2299; PC64LE9-NEXT: bl sinf 2300; PC64LE9-NEXT: nop 2301; PC64LE9-NEXT: addis 3, 2, .LCPI42_1@toc@ha 2302; PC64LE9-NEXT: fmr 31, 1 2303; PC64LE9-NEXT: lfs 1, .LCPI42_1@toc@l(3) 2304; PC64LE9-NEXT: bl sinf 2305; PC64LE9-NEXT: nop 2306; PC64LE9-NEXT: addis 3, 2, .LCPI42_2@toc@ha 2307; PC64LE9-NEXT: fmr 30, 1 2308; PC64LE9-NEXT: lfs 1, .LCPI42_2@toc@l(3) 2309; PC64LE9-NEXT: bl sinf 2310; PC64LE9-NEXT: nop 2311; PC64LE9-NEXT: xscvdpspn 34, 1 2312; PC64LE9-NEXT: xscvdpspn 35, 30 2313; PC64LE9-NEXT: addis 3, 2, .LCPI42_3@toc@ha 2314; PC64LE9-NEXT: xscvdpspn 36, 31 2315; PC64LE9-NEXT: addi 3, 3, .LCPI42_3@toc@l 2316; PC64LE9-NEXT: vmrghw 2, 3, 2 2317; PC64LE9-NEXT: lxvx 35, 0, 3 2318; PC64LE9-NEXT: vperm 2, 4, 2, 3 2319; PC64LE9-NEXT: addi 1, 1, 48 2320; PC64LE9-NEXT: ld 0, 16(1) 2321; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2322; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2323; PC64LE9-NEXT: mtlr 0 2324; PC64LE9-NEXT: blr 2325entry: 2326 %sin = call <3 x float> @llvm.experimental.constrained.sin.v3f32( 2327 <3 x float> <float 42.0, float 43.0, float 44.0>, 2328 metadata !"round.dynamic", 2329 metadata !"fpexcept.strict") #1 2330 ret <3 x float> %sin 2331} 2332 2333define <3 x double> @constrained_vector_sin_v3f64() #0 { 2334; PC64LE-LABEL: constrained_vector_sin_v3f64: 2335; PC64LE: # %bb.0: # %entry 2336; PC64LE-NEXT: mflr 0 2337; PC64LE-NEXT: std 0, 16(1) 2338; PC64LE-NEXT: stdu 1, -64(1) 2339; PC64LE-NEXT: li 3, 48 2340; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2341; PC64LE-NEXT: addis 3, 2, .LCPI43_0@toc@ha 2342; PC64LE-NEXT: lfd 1, .LCPI43_0@toc@l(3) 2343; PC64LE-NEXT: bl sin 2344; PC64LE-NEXT: nop 2345; PC64LE-NEXT: addis 3, 2, .LCPI43_1@toc@ha 2346; PC64LE-NEXT: xxlor 63, 1, 1 2347; PC64LE-NEXT: lfs 1, .LCPI43_1@toc@l(3) 2348; PC64LE-NEXT: bl sin 2349; PC64LE-NEXT: nop 2350; PC64LE-NEXT: addis 3, 2, .LCPI43_2@toc@ha 2351; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2352; PC64LE-NEXT: xxmrghd 63, 63, 1 2353; PC64LE-NEXT: lfd 1, .LCPI43_2@toc@l(3) 2354; PC64LE-NEXT: bl sin 2355; PC64LE-NEXT: nop 2356; PC64LE-NEXT: xxswapd 0, 63 2357; PC64LE-NEXT: li 3, 48 2358; PC64LE-NEXT: xxlor 2, 63, 63 2359; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2360; PC64LE-NEXT: fmr 3, 1 2361; PC64LE-NEXT: fmr 1, 0 2362; PC64LE-NEXT: addi 1, 1, 64 2363; PC64LE-NEXT: ld 0, 16(1) 2364; PC64LE-NEXT: mtlr 0 2365; PC64LE-NEXT: blr 2366; 2367; PC64LE9-LABEL: constrained_vector_sin_v3f64: 2368; PC64LE9: # %bb.0: # %entry 2369; PC64LE9-NEXT: mflr 0 2370; PC64LE9-NEXT: std 0, 16(1) 2371; PC64LE9-NEXT: stdu 1, -48(1) 2372; PC64LE9-NEXT: addis 3, 2, .LCPI43_0@toc@ha 2373; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 2374; PC64LE9-NEXT: lfd 1, .LCPI43_0@toc@l(3) 2375; PC64LE9-NEXT: bl sin 2376; PC64LE9-NEXT: nop 2377; PC64LE9-NEXT: addis 3, 2, .LCPI43_1@toc@ha 2378; PC64LE9-NEXT: xscpsgndp 63, 1, 1 2379; PC64LE9-NEXT: lfs 1, .LCPI43_1@toc@l(3) 2380; PC64LE9-NEXT: bl sin 2381; PC64LE9-NEXT: nop 2382; PC64LE9-NEXT: addis 3, 2, .LCPI43_2@toc@ha 2383; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2384; PC64LE9-NEXT: xxmrghd 63, 63, 1 2385; PC64LE9-NEXT: lfd 1, .LCPI43_2@toc@l(3) 2386; PC64LE9-NEXT: bl sin 2387; PC64LE9-NEXT: nop 2388; PC64LE9-NEXT: fmr 3, 1 2389; PC64LE9-NEXT: xxswapd 1, 63 2390; PC64LE9-NEXT: xscpsgndp 2, 63, 63 2391; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 2392; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2393; PC64LE9-NEXT: addi 1, 1, 48 2394; PC64LE9-NEXT: ld 0, 16(1) 2395; PC64LE9-NEXT: mtlr 0 2396; PC64LE9-NEXT: blr 2397entry: 2398 %sin = call <3 x double> @llvm.experimental.constrained.sin.v3f64( 2399 <3 x double> <double 42.0, double 42.1, double 42.2>, 2400 metadata !"round.dynamic", 2401 metadata !"fpexcept.strict") #1 2402 ret <3 x double> %sin 2403} 2404 2405define <4 x double> @constrained_vector_sin_v4f64() #0 { 2406; PC64LE-LABEL: constrained_vector_sin_v4f64: 2407; PC64LE: # %bb.0: # %entry 2408; PC64LE-NEXT: mflr 0 2409; PC64LE-NEXT: std 0, 16(1) 2410; PC64LE-NEXT: stdu 1, -80(1) 2411; PC64LE-NEXT: li 3, 48 2412; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 2413; PC64LE-NEXT: li 3, 64 2414; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2415; PC64LE-NEXT: addis 3, 2, .LCPI44_0@toc@ha 2416; PC64LE-NEXT: lfd 1, .LCPI44_0@toc@l(3) 2417; PC64LE-NEXT: bl sin 2418; PC64LE-NEXT: nop 2419; PC64LE-NEXT: addis 3, 2, .LCPI44_1@toc@ha 2420; PC64LE-NEXT: xxlor 63, 1, 1 2421; PC64LE-NEXT: lfd 1, .LCPI44_1@toc@l(3) 2422; PC64LE-NEXT: bl sin 2423; PC64LE-NEXT: nop 2424; PC64LE-NEXT: addis 3, 2, .LCPI44_2@toc@ha 2425; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2426; PC64LE-NEXT: xxmrghd 63, 1, 63 2427; PC64LE-NEXT: lfd 1, .LCPI44_2@toc@l(3) 2428; PC64LE-NEXT: bl sin 2429; PC64LE-NEXT: nop 2430; PC64LE-NEXT: addis 3, 2, .LCPI44_3@toc@ha 2431; PC64LE-NEXT: xxlor 62, 1, 1 2432; PC64LE-NEXT: lfs 1, .LCPI44_3@toc@l(3) 2433; PC64LE-NEXT: bl sin 2434; PC64LE-NEXT: nop 2435; PC64LE-NEXT: li 3, 64 2436; PC64LE-NEXT: vmr 3, 31 2437; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2438; PC64LE-NEXT: xxmrghd 34, 62, 1 2439; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2440; PC64LE-NEXT: li 3, 48 2441; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 2442; PC64LE-NEXT: addi 1, 1, 80 2443; PC64LE-NEXT: ld 0, 16(1) 2444; PC64LE-NEXT: mtlr 0 2445; PC64LE-NEXT: blr 2446; 2447; PC64LE9-LABEL: constrained_vector_sin_v4f64: 2448; PC64LE9: # %bb.0: # %entry 2449; PC64LE9-NEXT: mflr 0 2450; PC64LE9-NEXT: std 0, 16(1) 2451; PC64LE9-NEXT: stdu 1, -64(1) 2452; PC64LE9-NEXT: addis 3, 2, .LCPI44_0@toc@ha 2453; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 2454; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2455; PC64LE9-NEXT: lfd 1, .LCPI44_0@toc@l(3) 2456; PC64LE9-NEXT: bl sin 2457; PC64LE9-NEXT: nop 2458; PC64LE9-NEXT: addis 3, 2, .LCPI44_1@toc@ha 2459; PC64LE9-NEXT: xscpsgndp 63, 1, 1 2460; PC64LE9-NEXT: lfd 1, .LCPI44_1@toc@l(3) 2461; PC64LE9-NEXT: bl sin 2462; PC64LE9-NEXT: nop 2463; PC64LE9-NEXT: addis 3, 2, .LCPI44_2@toc@ha 2464; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2465; PC64LE9-NEXT: xxmrghd 63, 1, 63 2466; PC64LE9-NEXT: lfd 1, .LCPI44_2@toc@l(3) 2467; PC64LE9-NEXT: bl sin 2468; PC64LE9-NEXT: nop 2469; PC64LE9-NEXT: addis 3, 2, .LCPI44_3@toc@ha 2470; PC64LE9-NEXT: xscpsgndp 62, 1, 1 2471; PC64LE9-NEXT: lfs 1, .LCPI44_3@toc@l(3) 2472; PC64LE9-NEXT: bl sin 2473; PC64LE9-NEXT: nop 2474; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2475; PC64LE9-NEXT: xxmrghd 34, 62, 1 2476; PC64LE9-NEXT: vmr 3, 31 2477; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2478; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 2479; PC64LE9-NEXT: addi 1, 1, 64 2480; PC64LE9-NEXT: ld 0, 16(1) 2481; PC64LE9-NEXT: mtlr 0 2482; PC64LE9-NEXT: blr 2483entry: 2484 %sin = call <4 x double> @llvm.experimental.constrained.sin.v4f64( 2485 <4 x double> <double 42.0, double 42.1, 2486 double 42.2, double 42.3>, 2487 metadata !"round.dynamic", 2488 metadata !"fpexcept.strict") #1 2489 ret <4 x double> %sin 2490} 2491 2492define <1 x float> @constrained_vector_cos_v1f32() #0 { 2493; PC64LE-LABEL: constrained_vector_cos_v1f32: 2494; PC64LE: # %bb.0: # %entry 2495; PC64LE-NEXT: mflr 0 2496; PC64LE-NEXT: std 0, 16(1) 2497; PC64LE-NEXT: stdu 1, -32(1) 2498; PC64LE-NEXT: addis 3, 2, .LCPI45_0@toc@ha 2499; PC64LE-NEXT: lfs 1, .LCPI45_0@toc@l(3) 2500; PC64LE-NEXT: bl cosf 2501; PC64LE-NEXT: nop 2502; PC64LE-NEXT: addi 1, 1, 32 2503; PC64LE-NEXT: ld 0, 16(1) 2504; PC64LE-NEXT: mtlr 0 2505; PC64LE-NEXT: blr 2506; 2507; PC64LE9-LABEL: constrained_vector_cos_v1f32: 2508; PC64LE9: # %bb.0: # %entry 2509; PC64LE9-NEXT: mflr 0 2510; PC64LE9-NEXT: std 0, 16(1) 2511; PC64LE9-NEXT: stdu 1, -32(1) 2512; PC64LE9-NEXT: addis 3, 2, .LCPI45_0@toc@ha 2513; PC64LE9-NEXT: lfs 1, .LCPI45_0@toc@l(3) 2514; PC64LE9-NEXT: bl cosf 2515; PC64LE9-NEXT: nop 2516; PC64LE9-NEXT: addi 1, 1, 32 2517; PC64LE9-NEXT: ld 0, 16(1) 2518; PC64LE9-NEXT: mtlr 0 2519; PC64LE9-NEXT: blr 2520entry: 2521 %cos = call <1 x float> @llvm.experimental.constrained.cos.v1f32( 2522 <1 x float> <float 42.0>, 2523 metadata !"round.dynamic", 2524 metadata !"fpexcept.strict") #1 2525 ret <1 x float> %cos 2526} 2527 2528define <2 x double> @constrained_vector_cos_v2f64() #0 { 2529; PC64LE-LABEL: constrained_vector_cos_v2f64: 2530; PC64LE: # %bb.0: # %entry 2531; PC64LE-NEXT: mflr 0 2532; PC64LE-NEXT: std 0, 16(1) 2533; PC64LE-NEXT: stdu 1, -64(1) 2534; PC64LE-NEXT: li 3, 48 2535; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2536; PC64LE-NEXT: addis 3, 2, .LCPI46_0@toc@ha 2537; PC64LE-NEXT: lfd 1, .LCPI46_0@toc@l(3) 2538; PC64LE-NEXT: bl cos 2539; PC64LE-NEXT: nop 2540; PC64LE-NEXT: addis 3, 2, .LCPI46_1@toc@ha 2541; PC64LE-NEXT: xxlor 63, 1, 1 2542; PC64LE-NEXT: lfs 1, .LCPI46_1@toc@l(3) 2543; PC64LE-NEXT: bl cos 2544; PC64LE-NEXT: nop 2545; PC64LE-NEXT: li 3, 48 2546; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2547; PC64LE-NEXT: xxmrghd 34, 63, 1 2548; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2549; PC64LE-NEXT: addi 1, 1, 64 2550; PC64LE-NEXT: ld 0, 16(1) 2551; PC64LE-NEXT: mtlr 0 2552; PC64LE-NEXT: blr 2553; 2554; PC64LE9-LABEL: constrained_vector_cos_v2f64: 2555; PC64LE9: # %bb.0: # %entry 2556; PC64LE9-NEXT: mflr 0 2557; PC64LE9-NEXT: std 0, 16(1) 2558; PC64LE9-NEXT: stdu 1, -48(1) 2559; PC64LE9-NEXT: addis 3, 2, .LCPI46_0@toc@ha 2560; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 2561; PC64LE9-NEXT: lfd 1, .LCPI46_0@toc@l(3) 2562; PC64LE9-NEXT: bl cos 2563; PC64LE9-NEXT: nop 2564; PC64LE9-NEXT: addis 3, 2, .LCPI46_1@toc@ha 2565; PC64LE9-NEXT: xscpsgndp 63, 1, 1 2566; PC64LE9-NEXT: lfs 1, .LCPI46_1@toc@l(3) 2567; PC64LE9-NEXT: bl cos 2568; PC64LE9-NEXT: nop 2569; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2570; PC64LE9-NEXT: xxmrghd 34, 63, 1 2571; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 2572; PC64LE9-NEXT: addi 1, 1, 48 2573; PC64LE9-NEXT: ld 0, 16(1) 2574; PC64LE9-NEXT: mtlr 0 2575; PC64LE9-NEXT: blr 2576entry: 2577 %cos = call <2 x double> @llvm.experimental.constrained.cos.v2f64( 2578 <2 x double> <double 42.0, double 42.1>, 2579 metadata !"round.dynamic", 2580 metadata !"fpexcept.strict") #1 2581 ret <2 x double> %cos 2582} 2583 2584define <3 x float> @constrained_vector_cos_v3f32() #0 { 2585; PC64LE-LABEL: constrained_vector_cos_v3f32: 2586; PC64LE: # %bb.0: # %entry 2587; PC64LE-NEXT: mflr 0 2588; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 2589; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 2590; PC64LE-NEXT: std 0, 16(1) 2591; PC64LE-NEXT: stdu 1, -48(1) 2592; PC64LE-NEXT: addis 3, 2, .LCPI47_0@toc@ha 2593; PC64LE-NEXT: lfs 1, .LCPI47_0@toc@l(3) 2594; PC64LE-NEXT: bl cosf 2595; PC64LE-NEXT: nop 2596; PC64LE-NEXT: addis 3, 2, .LCPI47_1@toc@ha 2597; PC64LE-NEXT: fmr 31, 1 2598; PC64LE-NEXT: lfs 1, .LCPI47_1@toc@l(3) 2599; PC64LE-NEXT: bl cosf 2600; PC64LE-NEXT: nop 2601; PC64LE-NEXT: addis 3, 2, .LCPI47_2@toc@ha 2602; PC64LE-NEXT: fmr 30, 1 2603; PC64LE-NEXT: lfs 1, .LCPI47_2@toc@l(3) 2604; PC64LE-NEXT: bl cosf 2605; PC64LE-NEXT: nop 2606; PC64LE-NEXT: xscvdpspn 34, 30 2607; PC64LE-NEXT: addis 3, 2, .LCPI47_3@toc@ha 2608; PC64LE-NEXT: xscvdpspn 35, 1 2609; PC64LE-NEXT: addi 3, 3, .LCPI47_3@toc@l 2610; PC64LE-NEXT: lvx 4, 0, 3 2611; PC64LE-NEXT: vmrghw 2, 2, 3 2612; PC64LE-NEXT: xscvdpspn 35, 31 2613; PC64LE-NEXT: vperm 2, 3, 2, 4 2614; PC64LE-NEXT: addi 1, 1, 48 2615; PC64LE-NEXT: ld 0, 16(1) 2616; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2617; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2618; PC64LE-NEXT: mtlr 0 2619; PC64LE-NEXT: blr 2620; 2621; PC64LE9-LABEL: constrained_vector_cos_v3f32: 2622; PC64LE9: # %bb.0: # %entry 2623; PC64LE9-NEXT: mflr 0 2624; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 2625; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 2626; PC64LE9-NEXT: std 0, 16(1) 2627; PC64LE9-NEXT: stdu 1, -48(1) 2628; PC64LE9-NEXT: addis 3, 2, .LCPI47_0@toc@ha 2629; PC64LE9-NEXT: lfs 1, .LCPI47_0@toc@l(3) 2630; PC64LE9-NEXT: bl cosf 2631; PC64LE9-NEXT: nop 2632; PC64LE9-NEXT: addis 3, 2, .LCPI47_1@toc@ha 2633; PC64LE9-NEXT: fmr 31, 1 2634; PC64LE9-NEXT: lfs 1, .LCPI47_1@toc@l(3) 2635; PC64LE9-NEXT: bl cosf 2636; PC64LE9-NEXT: nop 2637; PC64LE9-NEXT: addis 3, 2, .LCPI47_2@toc@ha 2638; PC64LE9-NEXT: fmr 30, 1 2639; PC64LE9-NEXT: lfs 1, .LCPI47_2@toc@l(3) 2640; PC64LE9-NEXT: bl cosf 2641; PC64LE9-NEXT: nop 2642; PC64LE9-NEXT: xscvdpspn 34, 1 2643; PC64LE9-NEXT: xscvdpspn 35, 30 2644; PC64LE9-NEXT: addis 3, 2, .LCPI47_3@toc@ha 2645; PC64LE9-NEXT: xscvdpspn 36, 31 2646; PC64LE9-NEXT: addi 3, 3, .LCPI47_3@toc@l 2647; PC64LE9-NEXT: vmrghw 2, 3, 2 2648; PC64LE9-NEXT: lxvx 35, 0, 3 2649; PC64LE9-NEXT: vperm 2, 4, 2, 3 2650; PC64LE9-NEXT: addi 1, 1, 48 2651; PC64LE9-NEXT: ld 0, 16(1) 2652; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2653; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2654; PC64LE9-NEXT: mtlr 0 2655; PC64LE9-NEXT: blr 2656entry: 2657 %cos = call <3 x float> @llvm.experimental.constrained.cos.v3f32( 2658 <3 x float> <float 42.0, float 43.0, float 44.0>, 2659 metadata !"round.dynamic", 2660 metadata !"fpexcept.strict") #1 2661 ret <3 x float> %cos 2662} 2663 2664define <3 x double> @constrained_vector_cos_v3f64() #0 { 2665; PC64LE-LABEL: constrained_vector_cos_v3f64: 2666; PC64LE: # %bb.0: # %entry 2667; PC64LE-NEXT: mflr 0 2668; PC64LE-NEXT: std 0, 16(1) 2669; PC64LE-NEXT: stdu 1, -64(1) 2670; PC64LE-NEXT: li 3, 48 2671; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2672; PC64LE-NEXT: addis 3, 2, .LCPI48_0@toc@ha 2673; PC64LE-NEXT: lfd 1, .LCPI48_0@toc@l(3) 2674; PC64LE-NEXT: bl cos 2675; PC64LE-NEXT: nop 2676; PC64LE-NEXT: addis 3, 2, .LCPI48_1@toc@ha 2677; PC64LE-NEXT: xxlor 63, 1, 1 2678; PC64LE-NEXT: lfs 1, .LCPI48_1@toc@l(3) 2679; PC64LE-NEXT: bl cos 2680; PC64LE-NEXT: nop 2681; PC64LE-NEXT: addis 3, 2, .LCPI48_2@toc@ha 2682; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2683; PC64LE-NEXT: xxmrghd 63, 63, 1 2684; PC64LE-NEXT: lfd 1, .LCPI48_2@toc@l(3) 2685; PC64LE-NEXT: bl cos 2686; PC64LE-NEXT: nop 2687; PC64LE-NEXT: xxswapd 0, 63 2688; PC64LE-NEXT: li 3, 48 2689; PC64LE-NEXT: xxlor 2, 63, 63 2690; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2691; PC64LE-NEXT: fmr 3, 1 2692; PC64LE-NEXT: fmr 1, 0 2693; PC64LE-NEXT: addi 1, 1, 64 2694; PC64LE-NEXT: ld 0, 16(1) 2695; PC64LE-NEXT: mtlr 0 2696; PC64LE-NEXT: blr 2697; 2698; PC64LE9-LABEL: constrained_vector_cos_v3f64: 2699; PC64LE9: # %bb.0: # %entry 2700; PC64LE9-NEXT: mflr 0 2701; PC64LE9-NEXT: std 0, 16(1) 2702; PC64LE9-NEXT: stdu 1, -48(1) 2703; PC64LE9-NEXT: addis 3, 2, .LCPI48_0@toc@ha 2704; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 2705; PC64LE9-NEXT: lfd 1, .LCPI48_0@toc@l(3) 2706; PC64LE9-NEXT: bl cos 2707; PC64LE9-NEXT: nop 2708; PC64LE9-NEXT: addis 3, 2, .LCPI48_1@toc@ha 2709; PC64LE9-NEXT: xscpsgndp 63, 1, 1 2710; PC64LE9-NEXT: lfs 1, .LCPI48_1@toc@l(3) 2711; PC64LE9-NEXT: bl cos 2712; PC64LE9-NEXT: nop 2713; PC64LE9-NEXT: addis 3, 2, .LCPI48_2@toc@ha 2714; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2715; PC64LE9-NEXT: xxmrghd 63, 63, 1 2716; PC64LE9-NEXT: lfd 1, .LCPI48_2@toc@l(3) 2717; PC64LE9-NEXT: bl cos 2718; PC64LE9-NEXT: nop 2719; PC64LE9-NEXT: fmr 3, 1 2720; PC64LE9-NEXT: xxswapd 1, 63 2721; PC64LE9-NEXT: xscpsgndp 2, 63, 63 2722; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 2723; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2724; PC64LE9-NEXT: addi 1, 1, 48 2725; PC64LE9-NEXT: ld 0, 16(1) 2726; PC64LE9-NEXT: mtlr 0 2727; PC64LE9-NEXT: blr 2728entry: 2729 %cos = call <3 x double> @llvm.experimental.constrained.cos.v3f64( 2730 <3 x double> <double 42.0, double 42.1, double 42.2>, 2731 metadata !"round.dynamic", 2732 metadata !"fpexcept.strict") #1 2733 ret <3 x double> %cos 2734} 2735 2736define <4 x double> @constrained_vector_cos_v4f64() #0 { 2737; PC64LE-LABEL: constrained_vector_cos_v4f64: 2738; PC64LE: # %bb.0: # %entry 2739; PC64LE-NEXT: mflr 0 2740; PC64LE-NEXT: std 0, 16(1) 2741; PC64LE-NEXT: stdu 1, -80(1) 2742; PC64LE-NEXT: li 3, 48 2743; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 2744; PC64LE-NEXT: li 3, 64 2745; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2746; PC64LE-NEXT: addis 3, 2, .LCPI49_0@toc@ha 2747; PC64LE-NEXT: lfd 1, .LCPI49_0@toc@l(3) 2748; PC64LE-NEXT: bl cos 2749; PC64LE-NEXT: nop 2750; PC64LE-NEXT: addis 3, 2, .LCPI49_1@toc@ha 2751; PC64LE-NEXT: xxlor 63, 1, 1 2752; PC64LE-NEXT: lfd 1, .LCPI49_1@toc@l(3) 2753; PC64LE-NEXT: bl cos 2754; PC64LE-NEXT: nop 2755; PC64LE-NEXT: addis 3, 2, .LCPI49_2@toc@ha 2756; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2757; PC64LE-NEXT: xxmrghd 63, 1, 63 2758; PC64LE-NEXT: lfd 1, .LCPI49_2@toc@l(3) 2759; PC64LE-NEXT: bl cos 2760; PC64LE-NEXT: nop 2761; PC64LE-NEXT: addis 3, 2, .LCPI49_3@toc@ha 2762; PC64LE-NEXT: xxlor 62, 1, 1 2763; PC64LE-NEXT: lfs 1, .LCPI49_3@toc@l(3) 2764; PC64LE-NEXT: bl cos 2765; PC64LE-NEXT: nop 2766; PC64LE-NEXT: li 3, 64 2767; PC64LE-NEXT: vmr 3, 31 2768; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2769; PC64LE-NEXT: xxmrghd 34, 62, 1 2770; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2771; PC64LE-NEXT: li 3, 48 2772; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 2773; PC64LE-NEXT: addi 1, 1, 80 2774; PC64LE-NEXT: ld 0, 16(1) 2775; PC64LE-NEXT: mtlr 0 2776; PC64LE-NEXT: blr 2777; 2778; PC64LE9-LABEL: constrained_vector_cos_v4f64: 2779; PC64LE9: # %bb.0: # %entry 2780; PC64LE9-NEXT: mflr 0 2781; PC64LE9-NEXT: std 0, 16(1) 2782; PC64LE9-NEXT: stdu 1, -64(1) 2783; PC64LE9-NEXT: addis 3, 2, .LCPI49_0@toc@ha 2784; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 2785; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2786; PC64LE9-NEXT: lfd 1, .LCPI49_0@toc@l(3) 2787; PC64LE9-NEXT: bl cos 2788; PC64LE9-NEXT: nop 2789; PC64LE9-NEXT: addis 3, 2, .LCPI49_1@toc@ha 2790; PC64LE9-NEXT: xscpsgndp 63, 1, 1 2791; PC64LE9-NEXT: lfd 1, .LCPI49_1@toc@l(3) 2792; PC64LE9-NEXT: bl cos 2793; PC64LE9-NEXT: nop 2794; PC64LE9-NEXT: addis 3, 2, .LCPI49_2@toc@ha 2795; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2796; PC64LE9-NEXT: xxmrghd 63, 1, 63 2797; PC64LE9-NEXT: lfd 1, .LCPI49_2@toc@l(3) 2798; PC64LE9-NEXT: bl cos 2799; PC64LE9-NEXT: nop 2800; PC64LE9-NEXT: addis 3, 2, .LCPI49_3@toc@ha 2801; PC64LE9-NEXT: xscpsgndp 62, 1, 1 2802; PC64LE9-NEXT: lfs 1, .LCPI49_3@toc@l(3) 2803; PC64LE9-NEXT: bl cos 2804; PC64LE9-NEXT: nop 2805; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2806; PC64LE9-NEXT: xxmrghd 34, 62, 1 2807; PC64LE9-NEXT: vmr 3, 31 2808; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2809; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 2810; PC64LE9-NEXT: addi 1, 1, 64 2811; PC64LE9-NEXT: ld 0, 16(1) 2812; PC64LE9-NEXT: mtlr 0 2813; PC64LE9-NEXT: blr 2814entry: 2815 %cos = call <4 x double> @llvm.experimental.constrained.cos.v4f64( 2816 <4 x double> <double 42.0, double 42.1, 2817 double 42.2, double 42.3>, 2818 metadata !"round.dynamic", 2819 metadata !"fpexcept.strict") #1 2820 ret <4 x double> %cos 2821} 2822 2823define <1 x float> @constrained_vector_exp_v1f32() #0 { 2824; PC64LE-LABEL: constrained_vector_exp_v1f32: 2825; PC64LE: # %bb.0: # %entry 2826; PC64LE-NEXT: mflr 0 2827; PC64LE-NEXT: std 0, 16(1) 2828; PC64LE-NEXT: stdu 1, -32(1) 2829; PC64LE-NEXT: addis 3, 2, .LCPI50_0@toc@ha 2830; PC64LE-NEXT: lfs 1, .LCPI50_0@toc@l(3) 2831; PC64LE-NEXT: bl expf 2832; PC64LE-NEXT: nop 2833; PC64LE-NEXT: addi 1, 1, 32 2834; PC64LE-NEXT: ld 0, 16(1) 2835; PC64LE-NEXT: mtlr 0 2836; PC64LE-NEXT: blr 2837; 2838; PC64LE9-LABEL: constrained_vector_exp_v1f32: 2839; PC64LE9: # %bb.0: # %entry 2840; PC64LE9-NEXT: mflr 0 2841; PC64LE9-NEXT: std 0, 16(1) 2842; PC64LE9-NEXT: stdu 1, -32(1) 2843; PC64LE9-NEXT: addis 3, 2, .LCPI50_0@toc@ha 2844; PC64LE9-NEXT: lfs 1, .LCPI50_0@toc@l(3) 2845; PC64LE9-NEXT: bl expf 2846; PC64LE9-NEXT: nop 2847; PC64LE9-NEXT: addi 1, 1, 32 2848; PC64LE9-NEXT: ld 0, 16(1) 2849; PC64LE9-NEXT: mtlr 0 2850; PC64LE9-NEXT: blr 2851entry: 2852 %exp = call <1 x float> @llvm.experimental.constrained.exp.v1f32( 2853 <1 x float> <float 42.0>, 2854 metadata !"round.dynamic", 2855 metadata !"fpexcept.strict") #1 2856 ret <1 x float> %exp 2857} 2858 2859define <2 x double> @constrained_vector_exp_v2f64() #0 { 2860; PC64LE-LABEL: constrained_vector_exp_v2f64: 2861; PC64LE: # %bb.0: # %entry 2862; PC64LE-NEXT: mflr 0 2863; PC64LE-NEXT: std 0, 16(1) 2864; PC64LE-NEXT: stdu 1, -64(1) 2865; PC64LE-NEXT: li 3, 48 2866; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2867; PC64LE-NEXT: addis 3, 2, .LCPI51_0@toc@ha 2868; PC64LE-NEXT: lfd 1, .LCPI51_0@toc@l(3) 2869; PC64LE-NEXT: bl exp 2870; PC64LE-NEXT: nop 2871; PC64LE-NEXT: addis 3, 2, .LCPI51_1@toc@ha 2872; PC64LE-NEXT: xxlor 63, 1, 1 2873; PC64LE-NEXT: lfs 1, .LCPI51_1@toc@l(3) 2874; PC64LE-NEXT: bl exp 2875; PC64LE-NEXT: nop 2876; PC64LE-NEXT: li 3, 48 2877; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2878; PC64LE-NEXT: xxmrghd 34, 63, 1 2879; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2880; PC64LE-NEXT: addi 1, 1, 64 2881; PC64LE-NEXT: ld 0, 16(1) 2882; PC64LE-NEXT: mtlr 0 2883; PC64LE-NEXT: blr 2884; 2885; PC64LE9-LABEL: constrained_vector_exp_v2f64: 2886; PC64LE9: # %bb.0: # %entry 2887; PC64LE9-NEXT: mflr 0 2888; PC64LE9-NEXT: std 0, 16(1) 2889; PC64LE9-NEXT: stdu 1, -48(1) 2890; PC64LE9-NEXT: addis 3, 2, .LCPI51_0@toc@ha 2891; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 2892; PC64LE9-NEXT: lfd 1, .LCPI51_0@toc@l(3) 2893; PC64LE9-NEXT: bl exp 2894; PC64LE9-NEXT: nop 2895; PC64LE9-NEXT: addis 3, 2, .LCPI51_1@toc@ha 2896; PC64LE9-NEXT: xscpsgndp 63, 1, 1 2897; PC64LE9-NEXT: lfs 1, .LCPI51_1@toc@l(3) 2898; PC64LE9-NEXT: bl exp 2899; PC64LE9-NEXT: nop 2900; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2901; PC64LE9-NEXT: xxmrghd 34, 63, 1 2902; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 2903; PC64LE9-NEXT: addi 1, 1, 48 2904; PC64LE9-NEXT: ld 0, 16(1) 2905; PC64LE9-NEXT: mtlr 0 2906; PC64LE9-NEXT: blr 2907entry: 2908 %exp = call <2 x double> @llvm.experimental.constrained.exp.v2f64( 2909 <2 x double> <double 42.0, double 42.1>, 2910 metadata !"round.dynamic", 2911 metadata !"fpexcept.strict") #1 2912 ret <2 x double> %exp 2913} 2914 2915define <3 x float> @constrained_vector_exp_v3f32() #0 { 2916; PC64LE-LABEL: constrained_vector_exp_v3f32: 2917; PC64LE: # %bb.0: # %entry 2918; PC64LE-NEXT: mflr 0 2919; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 2920; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 2921; PC64LE-NEXT: std 0, 16(1) 2922; PC64LE-NEXT: stdu 1, -48(1) 2923; PC64LE-NEXT: addis 3, 2, .LCPI52_0@toc@ha 2924; PC64LE-NEXT: lfs 1, .LCPI52_0@toc@l(3) 2925; PC64LE-NEXT: bl expf 2926; PC64LE-NEXT: nop 2927; PC64LE-NEXT: addis 3, 2, .LCPI52_1@toc@ha 2928; PC64LE-NEXT: fmr 31, 1 2929; PC64LE-NEXT: lfs 1, .LCPI52_1@toc@l(3) 2930; PC64LE-NEXT: bl expf 2931; PC64LE-NEXT: nop 2932; PC64LE-NEXT: addis 3, 2, .LCPI52_2@toc@ha 2933; PC64LE-NEXT: fmr 30, 1 2934; PC64LE-NEXT: lfs 1, .LCPI52_2@toc@l(3) 2935; PC64LE-NEXT: bl expf 2936; PC64LE-NEXT: nop 2937; PC64LE-NEXT: xscvdpspn 34, 30 2938; PC64LE-NEXT: addis 3, 2, .LCPI52_3@toc@ha 2939; PC64LE-NEXT: xscvdpspn 35, 1 2940; PC64LE-NEXT: addi 3, 3, .LCPI52_3@toc@l 2941; PC64LE-NEXT: lvx 4, 0, 3 2942; PC64LE-NEXT: vmrghw 2, 2, 3 2943; PC64LE-NEXT: xscvdpspn 35, 31 2944; PC64LE-NEXT: vperm 2, 3, 2, 4 2945; PC64LE-NEXT: addi 1, 1, 48 2946; PC64LE-NEXT: ld 0, 16(1) 2947; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2948; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2949; PC64LE-NEXT: mtlr 0 2950; PC64LE-NEXT: blr 2951; 2952; PC64LE9-LABEL: constrained_vector_exp_v3f32: 2953; PC64LE9: # %bb.0: # %entry 2954; PC64LE9-NEXT: mflr 0 2955; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 2956; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 2957; PC64LE9-NEXT: std 0, 16(1) 2958; PC64LE9-NEXT: stdu 1, -48(1) 2959; PC64LE9-NEXT: addis 3, 2, .LCPI52_0@toc@ha 2960; PC64LE9-NEXT: lfs 1, .LCPI52_0@toc@l(3) 2961; PC64LE9-NEXT: bl expf 2962; PC64LE9-NEXT: nop 2963; PC64LE9-NEXT: addis 3, 2, .LCPI52_1@toc@ha 2964; PC64LE9-NEXT: fmr 31, 1 2965; PC64LE9-NEXT: lfs 1, .LCPI52_1@toc@l(3) 2966; PC64LE9-NEXT: bl expf 2967; PC64LE9-NEXT: nop 2968; PC64LE9-NEXT: addis 3, 2, .LCPI52_2@toc@ha 2969; PC64LE9-NEXT: fmr 30, 1 2970; PC64LE9-NEXT: lfs 1, .LCPI52_2@toc@l(3) 2971; PC64LE9-NEXT: bl expf 2972; PC64LE9-NEXT: nop 2973; PC64LE9-NEXT: xscvdpspn 34, 1 2974; PC64LE9-NEXT: xscvdpspn 35, 30 2975; PC64LE9-NEXT: addis 3, 2, .LCPI52_3@toc@ha 2976; PC64LE9-NEXT: xscvdpspn 36, 31 2977; PC64LE9-NEXT: addi 3, 3, .LCPI52_3@toc@l 2978; PC64LE9-NEXT: vmrghw 2, 3, 2 2979; PC64LE9-NEXT: lxvx 35, 0, 3 2980; PC64LE9-NEXT: vperm 2, 4, 2, 3 2981; PC64LE9-NEXT: addi 1, 1, 48 2982; PC64LE9-NEXT: ld 0, 16(1) 2983; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2984; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2985; PC64LE9-NEXT: mtlr 0 2986; PC64LE9-NEXT: blr 2987entry: 2988 %exp = call <3 x float> @llvm.experimental.constrained.exp.v3f32( 2989 <3 x float> <float 42.0, float 43.0, float 44.0>, 2990 metadata !"round.dynamic", 2991 metadata !"fpexcept.strict") #1 2992 ret <3 x float> %exp 2993} 2994 2995define <3 x double> @constrained_vector_exp_v3f64() #0 { 2996; PC64LE-LABEL: constrained_vector_exp_v3f64: 2997; PC64LE: # %bb.0: # %entry 2998; PC64LE-NEXT: mflr 0 2999; PC64LE-NEXT: std 0, 16(1) 3000; PC64LE-NEXT: stdu 1, -64(1) 3001; PC64LE-NEXT: li 3, 48 3002; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3003; PC64LE-NEXT: addis 3, 2, .LCPI53_0@toc@ha 3004; PC64LE-NEXT: lfd 1, .LCPI53_0@toc@l(3) 3005; PC64LE-NEXT: bl exp 3006; PC64LE-NEXT: nop 3007; PC64LE-NEXT: addis 3, 2, .LCPI53_1@toc@ha 3008; PC64LE-NEXT: xxlor 63, 1, 1 3009; PC64LE-NEXT: lfs 1, .LCPI53_1@toc@l(3) 3010; PC64LE-NEXT: bl exp 3011; PC64LE-NEXT: nop 3012; PC64LE-NEXT: addis 3, 2, .LCPI53_2@toc@ha 3013; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3014; PC64LE-NEXT: xxmrghd 63, 63, 1 3015; PC64LE-NEXT: lfd 1, .LCPI53_2@toc@l(3) 3016; PC64LE-NEXT: bl exp 3017; PC64LE-NEXT: nop 3018; PC64LE-NEXT: xxswapd 0, 63 3019; PC64LE-NEXT: li 3, 48 3020; PC64LE-NEXT: xxlor 2, 63, 63 3021; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3022; PC64LE-NEXT: fmr 3, 1 3023; PC64LE-NEXT: fmr 1, 0 3024; PC64LE-NEXT: addi 1, 1, 64 3025; PC64LE-NEXT: ld 0, 16(1) 3026; PC64LE-NEXT: mtlr 0 3027; PC64LE-NEXT: blr 3028; 3029; PC64LE9-LABEL: constrained_vector_exp_v3f64: 3030; PC64LE9: # %bb.0: # %entry 3031; PC64LE9-NEXT: mflr 0 3032; PC64LE9-NEXT: std 0, 16(1) 3033; PC64LE9-NEXT: stdu 1, -48(1) 3034; PC64LE9-NEXT: addis 3, 2, .LCPI53_0@toc@ha 3035; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 3036; PC64LE9-NEXT: lfd 1, .LCPI53_0@toc@l(3) 3037; PC64LE9-NEXT: bl exp 3038; PC64LE9-NEXT: nop 3039; PC64LE9-NEXT: addis 3, 2, .LCPI53_1@toc@ha 3040; PC64LE9-NEXT: xscpsgndp 63, 1, 1 3041; PC64LE9-NEXT: lfs 1, .LCPI53_1@toc@l(3) 3042; PC64LE9-NEXT: bl exp 3043; PC64LE9-NEXT: nop 3044; PC64LE9-NEXT: addis 3, 2, .LCPI53_2@toc@ha 3045; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3046; PC64LE9-NEXT: xxmrghd 63, 63, 1 3047; PC64LE9-NEXT: lfd 1, .LCPI53_2@toc@l(3) 3048; PC64LE9-NEXT: bl exp 3049; PC64LE9-NEXT: nop 3050; PC64LE9-NEXT: fmr 3, 1 3051; PC64LE9-NEXT: xxswapd 1, 63 3052; PC64LE9-NEXT: xscpsgndp 2, 63, 63 3053; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 3054; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3055; PC64LE9-NEXT: addi 1, 1, 48 3056; PC64LE9-NEXT: ld 0, 16(1) 3057; PC64LE9-NEXT: mtlr 0 3058; PC64LE9-NEXT: blr 3059entry: 3060 %exp = call <3 x double> @llvm.experimental.constrained.exp.v3f64( 3061 <3 x double> <double 42.0, double 42.1, double 42.2>, 3062 metadata !"round.dynamic", 3063 metadata !"fpexcept.strict") #1 3064 ret <3 x double> %exp 3065} 3066 3067define <4 x double> @constrained_vector_exp_v4f64() #0 { 3068; PC64LE-LABEL: constrained_vector_exp_v4f64: 3069; PC64LE: # %bb.0: # %entry 3070; PC64LE-NEXT: mflr 0 3071; PC64LE-NEXT: std 0, 16(1) 3072; PC64LE-NEXT: stdu 1, -80(1) 3073; PC64LE-NEXT: li 3, 48 3074; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 3075; PC64LE-NEXT: li 3, 64 3076; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3077; PC64LE-NEXT: addis 3, 2, .LCPI54_0@toc@ha 3078; PC64LE-NEXT: lfd 1, .LCPI54_0@toc@l(3) 3079; PC64LE-NEXT: bl exp 3080; PC64LE-NEXT: nop 3081; PC64LE-NEXT: addis 3, 2, .LCPI54_1@toc@ha 3082; PC64LE-NEXT: xxlor 63, 1, 1 3083; PC64LE-NEXT: lfd 1, .LCPI54_1@toc@l(3) 3084; PC64LE-NEXT: bl exp 3085; PC64LE-NEXT: nop 3086; PC64LE-NEXT: addis 3, 2, .LCPI54_2@toc@ha 3087; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3088; PC64LE-NEXT: xxmrghd 63, 1, 63 3089; PC64LE-NEXT: lfd 1, .LCPI54_2@toc@l(3) 3090; PC64LE-NEXT: bl exp 3091; PC64LE-NEXT: nop 3092; PC64LE-NEXT: addis 3, 2, .LCPI54_3@toc@ha 3093; PC64LE-NEXT: xxlor 62, 1, 1 3094; PC64LE-NEXT: lfs 1, .LCPI54_3@toc@l(3) 3095; PC64LE-NEXT: bl exp 3096; PC64LE-NEXT: nop 3097; PC64LE-NEXT: li 3, 64 3098; PC64LE-NEXT: vmr 3, 31 3099; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3100; PC64LE-NEXT: xxmrghd 34, 62, 1 3101; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3102; PC64LE-NEXT: li 3, 48 3103; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 3104; PC64LE-NEXT: addi 1, 1, 80 3105; PC64LE-NEXT: ld 0, 16(1) 3106; PC64LE-NEXT: mtlr 0 3107; PC64LE-NEXT: blr 3108; 3109; PC64LE9-LABEL: constrained_vector_exp_v4f64: 3110; PC64LE9: # %bb.0: # %entry 3111; PC64LE9-NEXT: mflr 0 3112; PC64LE9-NEXT: std 0, 16(1) 3113; PC64LE9-NEXT: stdu 1, -64(1) 3114; PC64LE9-NEXT: addis 3, 2, .LCPI54_0@toc@ha 3115; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 3116; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3117; PC64LE9-NEXT: lfd 1, .LCPI54_0@toc@l(3) 3118; PC64LE9-NEXT: bl exp 3119; PC64LE9-NEXT: nop 3120; PC64LE9-NEXT: addis 3, 2, .LCPI54_1@toc@ha 3121; PC64LE9-NEXT: xscpsgndp 63, 1, 1 3122; PC64LE9-NEXT: lfd 1, .LCPI54_1@toc@l(3) 3123; PC64LE9-NEXT: bl exp 3124; PC64LE9-NEXT: nop 3125; PC64LE9-NEXT: addis 3, 2, .LCPI54_2@toc@ha 3126; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3127; PC64LE9-NEXT: xxmrghd 63, 1, 63 3128; PC64LE9-NEXT: lfd 1, .LCPI54_2@toc@l(3) 3129; PC64LE9-NEXT: bl exp 3130; PC64LE9-NEXT: nop 3131; PC64LE9-NEXT: addis 3, 2, .LCPI54_3@toc@ha 3132; PC64LE9-NEXT: xscpsgndp 62, 1, 1 3133; PC64LE9-NEXT: lfs 1, .LCPI54_3@toc@l(3) 3134; PC64LE9-NEXT: bl exp 3135; PC64LE9-NEXT: nop 3136; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3137; PC64LE9-NEXT: xxmrghd 34, 62, 1 3138; PC64LE9-NEXT: vmr 3, 31 3139; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3140; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 3141; PC64LE9-NEXT: addi 1, 1, 64 3142; PC64LE9-NEXT: ld 0, 16(1) 3143; PC64LE9-NEXT: mtlr 0 3144; PC64LE9-NEXT: blr 3145entry: 3146 %exp = call <4 x double> @llvm.experimental.constrained.exp.v4f64( 3147 <4 x double> <double 42.0, double 42.1, 3148 double 42.2, double 42.3>, 3149 metadata !"round.dynamic", 3150 metadata !"fpexcept.strict") #1 3151 ret <4 x double> %exp 3152} 3153 3154define <1 x float> @constrained_vector_exp2_v1f32() #0 { 3155; PC64LE-LABEL: constrained_vector_exp2_v1f32: 3156; PC64LE: # %bb.0: # %entry 3157; PC64LE-NEXT: mflr 0 3158; PC64LE-NEXT: std 0, 16(1) 3159; PC64LE-NEXT: stdu 1, -32(1) 3160; PC64LE-NEXT: addis 3, 2, .LCPI55_0@toc@ha 3161; PC64LE-NEXT: lfs 1, .LCPI55_0@toc@l(3) 3162; PC64LE-NEXT: bl exp2f 3163; PC64LE-NEXT: nop 3164; PC64LE-NEXT: addi 1, 1, 32 3165; PC64LE-NEXT: ld 0, 16(1) 3166; PC64LE-NEXT: mtlr 0 3167; PC64LE-NEXT: blr 3168; 3169; PC64LE9-LABEL: constrained_vector_exp2_v1f32: 3170; PC64LE9: # %bb.0: # %entry 3171; PC64LE9-NEXT: mflr 0 3172; PC64LE9-NEXT: std 0, 16(1) 3173; PC64LE9-NEXT: stdu 1, -32(1) 3174; PC64LE9-NEXT: addis 3, 2, .LCPI55_0@toc@ha 3175; PC64LE9-NEXT: lfs 1, .LCPI55_0@toc@l(3) 3176; PC64LE9-NEXT: bl exp2f 3177; PC64LE9-NEXT: nop 3178; PC64LE9-NEXT: addi 1, 1, 32 3179; PC64LE9-NEXT: ld 0, 16(1) 3180; PC64LE9-NEXT: mtlr 0 3181; PC64LE9-NEXT: blr 3182entry: 3183 %exp2 = call <1 x float> @llvm.experimental.constrained.exp2.v1f32( 3184 <1 x float> <float 42.0>, 3185 metadata !"round.dynamic", 3186 metadata !"fpexcept.strict") #1 3187 ret <1 x float> %exp2 3188} 3189 3190define <2 x double> @constrained_vector_exp2_v2f64() #0 { 3191; PC64LE-LABEL: constrained_vector_exp2_v2f64: 3192; PC64LE: # %bb.0: # %entry 3193; PC64LE-NEXT: mflr 0 3194; PC64LE-NEXT: std 0, 16(1) 3195; PC64LE-NEXT: stdu 1, -64(1) 3196; PC64LE-NEXT: li 3, 48 3197; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3198; PC64LE-NEXT: addis 3, 2, .LCPI56_0@toc@ha 3199; PC64LE-NEXT: lfd 1, .LCPI56_0@toc@l(3) 3200; PC64LE-NEXT: bl exp2 3201; PC64LE-NEXT: nop 3202; PC64LE-NEXT: addis 3, 2, .LCPI56_1@toc@ha 3203; PC64LE-NEXT: xxlor 63, 1, 1 3204; PC64LE-NEXT: lfs 1, .LCPI56_1@toc@l(3) 3205; PC64LE-NEXT: bl exp2 3206; PC64LE-NEXT: nop 3207; PC64LE-NEXT: li 3, 48 3208; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3209; PC64LE-NEXT: xxmrghd 34, 1, 63 3210; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3211; PC64LE-NEXT: addi 1, 1, 64 3212; PC64LE-NEXT: ld 0, 16(1) 3213; PC64LE-NEXT: mtlr 0 3214; PC64LE-NEXT: blr 3215; 3216; PC64LE9-LABEL: constrained_vector_exp2_v2f64: 3217; PC64LE9: # %bb.0: # %entry 3218; PC64LE9-NEXT: mflr 0 3219; PC64LE9-NEXT: std 0, 16(1) 3220; PC64LE9-NEXT: stdu 1, -48(1) 3221; PC64LE9-NEXT: addis 3, 2, .LCPI56_0@toc@ha 3222; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 3223; PC64LE9-NEXT: lfd 1, .LCPI56_0@toc@l(3) 3224; PC64LE9-NEXT: bl exp2 3225; PC64LE9-NEXT: nop 3226; PC64LE9-NEXT: addis 3, 2, .LCPI56_1@toc@ha 3227; PC64LE9-NEXT: xscpsgndp 63, 1, 1 3228; PC64LE9-NEXT: lfs 1, .LCPI56_1@toc@l(3) 3229; PC64LE9-NEXT: bl exp2 3230; PC64LE9-NEXT: nop 3231; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3232; PC64LE9-NEXT: xxmrghd 34, 1, 63 3233; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 3234; PC64LE9-NEXT: addi 1, 1, 48 3235; PC64LE9-NEXT: ld 0, 16(1) 3236; PC64LE9-NEXT: mtlr 0 3237; PC64LE9-NEXT: blr 3238entry: 3239 %exp2 = call <2 x double> @llvm.experimental.constrained.exp2.v2f64( 3240 <2 x double> <double 42.1, double 42.0>, 3241 metadata !"round.dynamic", 3242 metadata !"fpexcept.strict") #1 3243 ret <2 x double> %exp2 3244} 3245 3246define <3 x float> @constrained_vector_exp2_v3f32() #0 { 3247; PC64LE-LABEL: constrained_vector_exp2_v3f32: 3248; PC64LE: # %bb.0: # %entry 3249; PC64LE-NEXT: mflr 0 3250; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3251; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3252; PC64LE-NEXT: std 0, 16(1) 3253; PC64LE-NEXT: stdu 1, -48(1) 3254; PC64LE-NEXT: addis 3, 2, .LCPI57_0@toc@ha 3255; PC64LE-NEXT: lfs 1, .LCPI57_0@toc@l(3) 3256; PC64LE-NEXT: bl exp2f 3257; PC64LE-NEXT: nop 3258; PC64LE-NEXT: addis 3, 2, .LCPI57_1@toc@ha 3259; PC64LE-NEXT: fmr 31, 1 3260; PC64LE-NEXT: lfs 1, .LCPI57_1@toc@l(3) 3261; PC64LE-NEXT: bl exp2f 3262; PC64LE-NEXT: nop 3263; PC64LE-NEXT: addis 3, 2, .LCPI57_2@toc@ha 3264; PC64LE-NEXT: fmr 30, 1 3265; PC64LE-NEXT: lfs 1, .LCPI57_2@toc@l(3) 3266; PC64LE-NEXT: bl exp2f 3267; PC64LE-NEXT: nop 3268; PC64LE-NEXT: xscvdpspn 34, 30 3269; PC64LE-NEXT: addis 3, 2, .LCPI57_3@toc@ha 3270; PC64LE-NEXT: xscvdpspn 35, 1 3271; PC64LE-NEXT: addi 3, 3, .LCPI57_3@toc@l 3272; PC64LE-NEXT: lvx 4, 0, 3 3273; PC64LE-NEXT: vmrghw 2, 2, 3 3274; PC64LE-NEXT: xscvdpspn 35, 31 3275; PC64LE-NEXT: vperm 2, 3, 2, 4 3276; PC64LE-NEXT: addi 1, 1, 48 3277; PC64LE-NEXT: ld 0, 16(1) 3278; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3279; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3280; PC64LE-NEXT: mtlr 0 3281; PC64LE-NEXT: blr 3282; 3283; PC64LE9-LABEL: constrained_vector_exp2_v3f32: 3284; PC64LE9: # %bb.0: # %entry 3285; PC64LE9-NEXT: mflr 0 3286; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3287; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3288; PC64LE9-NEXT: std 0, 16(1) 3289; PC64LE9-NEXT: stdu 1, -48(1) 3290; PC64LE9-NEXT: addis 3, 2, .LCPI57_0@toc@ha 3291; PC64LE9-NEXT: lfs 1, .LCPI57_0@toc@l(3) 3292; PC64LE9-NEXT: bl exp2f 3293; PC64LE9-NEXT: nop 3294; PC64LE9-NEXT: addis 3, 2, .LCPI57_1@toc@ha 3295; PC64LE9-NEXT: fmr 31, 1 3296; PC64LE9-NEXT: lfs 1, .LCPI57_1@toc@l(3) 3297; PC64LE9-NEXT: bl exp2f 3298; PC64LE9-NEXT: nop 3299; PC64LE9-NEXT: addis 3, 2, .LCPI57_2@toc@ha 3300; PC64LE9-NEXT: fmr 30, 1 3301; PC64LE9-NEXT: lfs 1, .LCPI57_2@toc@l(3) 3302; PC64LE9-NEXT: bl exp2f 3303; PC64LE9-NEXT: nop 3304; PC64LE9-NEXT: xscvdpspn 34, 1 3305; PC64LE9-NEXT: xscvdpspn 35, 30 3306; PC64LE9-NEXT: addis 3, 2, .LCPI57_3@toc@ha 3307; PC64LE9-NEXT: xscvdpspn 36, 31 3308; PC64LE9-NEXT: addi 3, 3, .LCPI57_3@toc@l 3309; PC64LE9-NEXT: vmrghw 2, 3, 2 3310; PC64LE9-NEXT: lxvx 35, 0, 3 3311; PC64LE9-NEXT: vperm 2, 4, 2, 3 3312; PC64LE9-NEXT: addi 1, 1, 48 3313; PC64LE9-NEXT: ld 0, 16(1) 3314; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3315; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3316; PC64LE9-NEXT: mtlr 0 3317; PC64LE9-NEXT: blr 3318entry: 3319 %exp2 = call <3 x float> @llvm.experimental.constrained.exp2.v3f32( 3320 <3 x float> <float 42.0, float 43.0, float 44.0>, 3321 metadata !"round.dynamic", 3322 metadata !"fpexcept.strict") #1 3323 ret <3 x float> %exp2 3324} 3325 3326define <3 x double> @constrained_vector_exp2_v3f64() #0 { 3327; PC64LE-LABEL: constrained_vector_exp2_v3f64: 3328; PC64LE: # %bb.0: # %entry 3329; PC64LE-NEXT: mflr 0 3330; PC64LE-NEXT: std 0, 16(1) 3331; PC64LE-NEXT: stdu 1, -64(1) 3332; PC64LE-NEXT: li 3, 48 3333; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3334; PC64LE-NEXT: addis 3, 2, .LCPI58_0@toc@ha 3335; PC64LE-NEXT: lfd 1, .LCPI58_0@toc@l(3) 3336; PC64LE-NEXT: bl exp2 3337; PC64LE-NEXT: nop 3338; PC64LE-NEXT: addis 3, 2, .LCPI58_1@toc@ha 3339; PC64LE-NEXT: xxlor 63, 1, 1 3340; PC64LE-NEXT: lfs 1, .LCPI58_1@toc@l(3) 3341; PC64LE-NEXT: bl exp2 3342; PC64LE-NEXT: nop 3343; PC64LE-NEXT: addis 3, 2, .LCPI58_2@toc@ha 3344; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3345; PC64LE-NEXT: xxmrghd 63, 63, 1 3346; PC64LE-NEXT: lfd 1, .LCPI58_2@toc@l(3) 3347; PC64LE-NEXT: bl exp2 3348; PC64LE-NEXT: nop 3349; PC64LE-NEXT: xxswapd 0, 63 3350; PC64LE-NEXT: li 3, 48 3351; PC64LE-NEXT: xxlor 2, 63, 63 3352; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3353; PC64LE-NEXT: fmr 3, 1 3354; PC64LE-NEXT: fmr 1, 0 3355; PC64LE-NEXT: addi 1, 1, 64 3356; PC64LE-NEXT: ld 0, 16(1) 3357; PC64LE-NEXT: mtlr 0 3358; PC64LE-NEXT: blr 3359; 3360; PC64LE9-LABEL: constrained_vector_exp2_v3f64: 3361; PC64LE9: # %bb.0: # %entry 3362; PC64LE9-NEXT: mflr 0 3363; PC64LE9-NEXT: std 0, 16(1) 3364; PC64LE9-NEXT: stdu 1, -48(1) 3365; PC64LE9-NEXT: addis 3, 2, .LCPI58_0@toc@ha 3366; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 3367; PC64LE9-NEXT: lfd 1, .LCPI58_0@toc@l(3) 3368; PC64LE9-NEXT: bl exp2 3369; PC64LE9-NEXT: nop 3370; PC64LE9-NEXT: addis 3, 2, .LCPI58_1@toc@ha 3371; PC64LE9-NEXT: xscpsgndp 63, 1, 1 3372; PC64LE9-NEXT: lfs 1, .LCPI58_1@toc@l(3) 3373; PC64LE9-NEXT: bl exp2 3374; PC64LE9-NEXT: nop 3375; PC64LE9-NEXT: addis 3, 2, .LCPI58_2@toc@ha 3376; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3377; PC64LE9-NEXT: xxmrghd 63, 63, 1 3378; PC64LE9-NEXT: lfd 1, .LCPI58_2@toc@l(3) 3379; PC64LE9-NEXT: bl exp2 3380; PC64LE9-NEXT: nop 3381; PC64LE9-NEXT: fmr 3, 1 3382; PC64LE9-NEXT: xxswapd 1, 63 3383; PC64LE9-NEXT: xscpsgndp 2, 63, 63 3384; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 3385; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3386; PC64LE9-NEXT: addi 1, 1, 48 3387; PC64LE9-NEXT: ld 0, 16(1) 3388; PC64LE9-NEXT: mtlr 0 3389; PC64LE9-NEXT: blr 3390entry: 3391 %exp2 = call <3 x double> @llvm.experimental.constrained.exp2.v3f64( 3392 <3 x double> <double 42.0, double 42.1, double 42.2>, 3393 metadata !"round.dynamic", 3394 metadata !"fpexcept.strict") #1 3395 ret <3 x double> %exp2 3396} 3397 3398define <4 x double> @constrained_vector_exp2_v4f64() #0 { 3399; PC64LE-LABEL: constrained_vector_exp2_v4f64: 3400; PC64LE: # %bb.0: # %entry 3401; PC64LE-NEXT: mflr 0 3402; PC64LE-NEXT: std 0, 16(1) 3403; PC64LE-NEXT: stdu 1, -80(1) 3404; PC64LE-NEXT: li 3, 48 3405; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 3406; PC64LE-NEXT: li 3, 64 3407; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3408; PC64LE-NEXT: addis 3, 2, .LCPI59_0@toc@ha 3409; PC64LE-NEXT: lfd 1, .LCPI59_0@toc@l(3) 3410; PC64LE-NEXT: bl exp2 3411; PC64LE-NEXT: nop 3412; PC64LE-NEXT: addis 3, 2, .LCPI59_1@toc@ha 3413; PC64LE-NEXT: xxlor 63, 1, 1 3414; PC64LE-NEXT: lfd 1, .LCPI59_1@toc@l(3) 3415; PC64LE-NEXT: bl exp2 3416; PC64LE-NEXT: nop 3417; PC64LE-NEXT: addis 3, 2, .LCPI59_2@toc@ha 3418; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3419; PC64LE-NEXT: xxmrghd 63, 1, 63 3420; PC64LE-NEXT: lfd 1, .LCPI59_2@toc@l(3) 3421; PC64LE-NEXT: bl exp2 3422; PC64LE-NEXT: nop 3423; PC64LE-NEXT: addis 3, 2, .LCPI59_3@toc@ha 3424; PC64LE-NEXT: xxlor 62, 1, 1 3425; PC64LE-NEXT: lfd 1, .LCPI59_3@toc@l(3) 3426; PC64LE-NEXT: bl exp2 3427; PC64LE-NEXT: nop 3428; PC64LE-NEXT: li 3, 64 3429; PC64LE-NEXT: vmr 2, 31 3430; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3431; PC64LE-NEXT: xxmrghd 35, 1, 62 3432; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3433; PC64LE-NEXT: li 3, 48 3434; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 3435; PC64LE-NEXT: addi 1, 1, 80 3436; PC64LE-NEXT: ld 0, 16(1) 3437; PC64LE-NEXT: mtlr 0 3438; PC64LE-NEXT: blr 3439; 3440; PC64LE9-LABEL: constrained_vector_exp2_v4f64: 3441; PC64LE9: # %bb.0: # %entry 3442; PC64LE9-NEXT: mflr 0 3443; PC64LE9-NEXT: std 0, 16(1) 3444; PC64LE9-NEXT: stdu 1, -64(1) 3445; PC64LE9-NEXT: addis 3, 2, .LCPI59_0@toc@ha 3446; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 3447; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3448; PC64LE9-NEXT: lfd 1, .LCPI59_0@toc@l(3) 3449; PC64LE9-NEXT: bl exp2 3450; PC64LE9-NEXT: nop 3451; PC64LE9-NEXT: addis 3, 2, .LCPI59_1@toc@ha 3452; PC64LE9-NEXT: xscpsgndp 63, 1, 1 3453; PC64LE9-NEXT: lfd 1, .LCPI59_1@toc@l(3) 3454; PC64LE9-NEXT: bl exp2 3455; PC64LE9-NEXT: nop 3456; PC64LE9-NEXT: addis 3, 2, .LCPI59_2@toc@ha 3457; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3458; PC64LE9-NEXT: xxmrghd 63, 1, 63 3459; PC64LE9-NEXT: lfd 1, .LCPI59_2@toc@l(3) 3460; PC64LE9-NEXT: bl exp2 3461; PC64LE9-NEXT: nop 3462; PC64LE9-NEXT: addis 3, 2, .LCPI59_3@toc@ha 3463; PC64LE9-NEXT: xscpsgndp 62, 1, 1 3464; PC64LE9-NEXT: lfd 1, .LCPI59_3@toc@l(3) 3465; PC64LE9-NEXT: bl exp2 3466; PC64LE9-NEXT: nop 3467; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3468; PC64LE9-NEXT: xxmrghd 35, 1, 62 3469; PC64LE9-NEXT: vmr 2, 31 3470; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3471; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 3472; PC64LE9-NEXT: addi 1, 1, 64 3473; PC64LE9-NEXT: ld 0, 16(1) 3474; PC64LE9-NEXT: mtlr 0 3475; PC64LE9-NEXT: blr 3476entry: 3477 %exp2 = call <4 x double> @llvm.experimental.constrained.exp2.v4f64( 3478 <4 x double> <double 42.1, double 42.2, 3479 double 42.3, double 42.4>, 3480 metadata !"round.dynamic", 3481 metadata !"fpexcept.strict") #1 3482 ret <4 x double> %exp2 3483} 3484 3485define <1 x float> @constrained_vector_log_v1f32() #0 { 3486; PC64LE-LABEL: constrained_vector_log_v1f32: 3487; PC64LE: # %bb.0: # %entry 3488; PC64LE-NEXT: mflr 0 3489; PC64LE-NEXT: std 0, 16(1) 3490; PC64LE-NEXT: stdu 1, -32(1) 3491; PC64LE-NEXT: addis 3, 2, .LCPI60_0@toc@ha 3492; PC64LE-NEXT: lfs 1, .LCPI60_0@toc@l(3) 3493; PC64LE-NEXT: bl logf 3494; PC64LE-NEXT: nop 3495; PC64LE-NEXT: addi 1, 1, 32 3496; PC64LE-NEXT: ld 0, 16(1) 3497; PC64LE-NEXT: mtlr 0 3498; PC64LE-NEXT: blr 3499; 3500; PC64LE9-LABEL: constrained_vector_log_v1f32: 3501; PC64LE9: # %bb.0: # %entry 3502; PC64LE9-NEXT: mflr 0 3503; PC64LE9-NEXT: std 0, 16(1) 3504; PC64LE9-NEXT: stdu 1, -32(1) 3505; PC64LE9-NEXT: addis 3, 2, .LCPI60_0@toc@ha 3506; PC64LE9-NEXT: lfs 1, .LCPI60_0@toc@l(3) 3507; PC64LE9-NEXT: bl logf 3508; PC64LE9-NEXT: nop 3509; PC64LE9-NEXT: addi 1, 1, 32 3510; PC64LE9-NEXT: ld 0, 16(1) 3511; PC64LE9-NEXT: mtlr 0 3512; PC64LE9-NEXT: blr 3513entry: 3514 %log = call <1 x float> @llvm.experimental.constrained.log.v1f32( 3515 <1 x float> <float 42.0>, 3516 metadata !"round.dynamic", 3517 metadata !"fpexcept.strict") #1 3518 ret <1 x float> %log 3519} 3520 3521define <2 x double> @constrained_vector_log_v2f64() #0 { 3522; PC64LE-LABEL: constrained_vector_log_v2f64: 3523; PC64LE: # %bb.0: # %entry 3524; PC64LE-NEXT: mflr 0 3525; PC64LE-NEXT: std 0, 16(1) 3526; PC64LE-NEXT: stdu 1, -64(1) 3527; PC64LE-NEXT: li 3, 48 3528; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3529; PC64LE-NEXT: addis 3, 2, .LCPI61_0@toc@ha 3530; PC64LE-NEXT: lfd 1, .LCPI61_0@toc@l(3) 3531; PC64LE-NEXT: bl log 3532; PC64LE-NEXT: nop 3533; PC64LE-NEXT: addis 3, 2, .LCPI61_1@toc@ha 3534; PC64LE-NEXT: xxlor 63, 1, 1 3535; PC64LE-NEXT: lfs 1, .LCPI61_1@toc@l(3) 3536; PC64LE-NEXT: bl log 3537; PC64LE-NEXT: nop 3538; PC64LE-NEXT: li 3, 48 3539; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3540; PC64LE-NEXT: xxmrghd 34, 63, 1 3541; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3542; PC64LE-NEXT: addi 1, 1, 64 3543; PC64LE-NEXT: ld 0, 16(1) 3544; PC64LE-NEXT: mtlr 0 3545; PC64LE-NEXT: blr 3546; 3547; PC64LE9-LABEL: constrained_vector_log_v2f64: 3548; PC64LE9: # %bb.0: # %entry 3549; PC64LE9-NEXT: mflr 0 3550; PC64LE9-NEXT: std 0, 16(1) 3551; PC64LE9-NEXT: stdu 1, -48(1) 3552; PC64LE9-NEXT: addis 3, 2, .LCPI61_0@toc@ha 3553; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 3554; PC64LE9-NEXT: lfd 1, .LCPI61_0@toc@l(3) 3555; PC64LE9-NEXT: bl log 3556; PC64LE9-NEXT: nop 3557; PC64LE9-NEXT: addis 3, 2, .LCPI61_1@toc@ha 3558; PC64LE9-NEXT: xscpsgndp 63, 1, 1 3559; PC64LE9-NEXT: lfs 1, .LCPI61_1@toc@l(3) 3560; PC64LE9-NEXT: bl log 3561; PC64LE9-NEXT: nop 3562; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3563; PC64LE9-NEXT: xxmrghd 34, 63, 1 3564; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 3565; PC64LE9-NEXT: addi 1, 1, 48 3566; PC64LE9-NEXT: ld 0, 16(1) 3567; PC64LE9-NEXT: mtlr 0 3568; PC64LE9-NEXT: blr 3569entry: 3570 %log = call <2 x double> @llvm.experimental.constrained.log.v2f64( 3571 <2 x double> <double 42.0, double 42.1>, 3572 metadata !"round.dynamic", 3573 metadata !"fpexcept.strict") #1 3574 ret <2 x double> %log 3575} 3576 3577define <3 x float> @constrained_vector_log_v3f32() #0 { 3578; PC64LE-LABEL: constrained_vector_log_v3f32: 3579; PC64LE: # %bb.0: # %entry 3580; PC64LE-NEXT: mflr 0 3581; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3582; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3583; PC64LE-NEXT: std 0, 16(1) 3584; PC64LE-NEXT: stdu 1, -48(1) 3585; PC64LE-NEXT: addis 3, 2, .LCPI62_0@toc@ha 3586; PC64LE-NEXT: lfs 1, .LCPI62_0@toc@l(3) 3587; PC64LE-NEXT: bl logf 3588; PC64LE-NEXT: nop 3589; PC64LE-NEXT: addis 3, 2, .LCPI62_1@toc@ha 3590; PC64LE-NEXT: fmr 31, 1 3591; PC64LE-NEXT: lfs 1, .LCPI62_1@toc@l(3) 3592; PC64LE-NEXT: bl logf 3593; PC64LE-NEXT: nop 3594; PC64LE-NEXT: addis 3, 2, .LCPI62_2@toc@ha 3595; PC64LE-NEXT: fmr 30, 1 3596; PC64LE-NEXT: lfs 1, .LCPI62_2@toc@l(3) 3597; PC64LE-NEXT: bl logf 3598; PC64LE-NEXT: nop 3599; PC64LE-NEXT: xscvdpspn 34, 30 3600; PC64LE-NEXT: addis 3, 2, .LCPI62_3@toc@ha 3601; PC64LE-NEXT: xscvdpspn 35, 1 3602; PC64LE-NEXT: addi 3, 3, .LCPI62_3@toc@l 3603; PC64LE-NEXT: lvx 4, 0, 3 3604; PC64LE-NEXT: vmrghw 2, 2, 3 3605; PC64LE-NEXT: xscvdpspn 35, 31 3606; PC64LE-NEXT: vperm 2, 3, 2, 4 3607; PC64LE-NEXT: addi 1, 1, 48 3608; PC64LE-NEXT: ld 0, 16(1) 3609; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3610; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3611; PC64LE-NEXT: mtlr 0 3612; PC64LE-NEXT: blr 3613; 3614; PC64LE9-LABEL: constrained_vector_log_v3f32: 3615; PC64LE9: # %bb.0: # %entry 3616; PC64LE9-NEXT: mflr 0 3617; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3618; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3619; PC64LE9-NEXT: std 0, 16(1) 3620; PC64LE9-NEXT: stdu 1, -48(1) 3621; PC64LE9-NEXT: addis 3, 2, .LCPI62_0@toc@ha 3622; PC64LE9-NEXT: lfs 1, .LCPI62_0@toc@l(3) 3623; PC64LE9-NEXT: bl logf 3624; PC64LE9-NEXT: nop 3625; PC64LE9-NEXT: addis 3, 2, .LCPI62_1@toc@ha 3626; PC64LE9-NEXT: fmr 31, 1 3627; PC64LE9-NEXT: lfs 1, .LCPI62_1@toc@l(3) 3628; PC64LE9-NEXT: bl logf 3629; PC64LE9-NEXT: nop 3630; PC64LE9-NEXT: addis 3, 2, .LCPI62_2@toc@ha 3631; PC64LE9-NEXT: fmr 30, 1 3632; PC64LE9-NEXT: lfs 1, .LCPI62_2@toc@l(3) 3633; PC64LE9-NEXT: bl logf 3634; PC64LE9-NEXT: nop 3635; PC64LE9-NEXT: xscvdpspn 34, 1 3636; PC64LE9-NEXT: xscvdpspn 35, 30 3637; PC64LE9-NEXT: addis 3, 2, .LCPI62_3@toc@ha 3638; PC64LE9-NEXT: xscvdpspn 36, 31 3639; PC64LE9-NEXT: addi 3, 3, .LCPI62_3@toc@l 3640; PC64LE9-NEXT: vmrghw 2, 3, 2 3641; PC64LE9-NEXT: lxvx 35, 0, 3 3642; PC64LE9-NEXT: vperm 2, 4, 2, 3 3643; PC64LE9-NEXT: addi 1, 1, 48 3644; PC64LE9-NEXT: ld 0, 16(1) 3645; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3646; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3647; PC64LE9-NEXT: mtlr 0 3648; PC64LE9-NEXT: blr 3649entry: 3650 %log = call <3 x float> @llvm.experimental.constrained.log.v3f32( 3651 <3 x float> <float 42.0, float 43.0, float 44.0>, 3652 metadata !"round.dynamic", 3653 metadata !"fpexcept.strict") #1 3654 ret <3 x float> %log 3655} 3656 3657define <3 x double> @constrained_vector_log_v3f64() #0 { 3658; PC64LE-LABEL: constrained_vector_log_v3f64: 3659; PC64LE: # %bb.0: # %entry 3660; PC64LE-NEXT: mflr 0 3661; PC64LE-NEXT: std 0, 16(1) 3662; PC64LE-NEXT: stdu 1, -64(1) 3663; PC64LE-NEXT: li 3, 48 3664; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3665; PC64LE-NEXT: addis 3, 2, .LCPI63_0@toc@ha 3666; PC64LE-NEXT: lfd 1, .LCPI63_0@toc@l(3) 3667; PC64LE-NEXT: bl log 3668; PC64LE-NEXT: nop 3669; PC64LE-NEXT: addis 3, 2, .LCPI63_1@toc@ha 3670; PC64LE-NEXT: xxlor 63, 1, 1 3671; PC64LE-NEXT: lfs 1, .LCPI63_1@toc@l(3) 3672; PC64LE-NEXT: bl log 3673; PC64LE-NEXT: nop 3674; PC64LE-NEXT: addis 3, 2, .LCPI63_2@toc@ha 3675; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3676; PC64LE-NEXT: xxmrghd 63, 63, 1 3677; PC64LE-NEXT: lfd 1, .LCPI63_2@toc@l(3) 3678; PC64LE-NEXT: bl log 3679; PC64LE-NEXT: nop 3680; PC64LE-NEXT: xxswapd 0, 63 3681; PC64LE-NEXT: li 3, 48 3682; PC64LE-NEXT: xxlor 2, 63, 63 3683; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3684; PC64LE-NEXT: fmr 3, 1 3685; PC64LE-NEXT: fmr 1, 0 3686; PC64LE-NEXT: addi 1, 1, 64 3687; PC64LE-NEXT: ld 0, 16(1) 3688; PC64LE-NEXT: mtlr 0 3689; PC64LE-NEXT: blr 3690; 3691; PC64LE9-LABEL: constrained_vector_log_v3f64: 3692; PC64LE9: # %bb.0: # %entry 3693; PC64LE9-NEXT: mflr 0 3694; PC64LE9-NEXT: std 0, 16(1) 3695; PC64LE9-NEXT: stdu 1, -48(1) 3696; PC64LE9-NEXT: addis 3, 2, .LCPI63_0@toc@ha 3697; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 3698; PC64LE9-NEXT: lfd 1, .LCPI63_0@toc@l(3) 3699; PC64LE9-NEXT: bl log 3700; PC64LE9-NEXT: nop 3701; PC64LE9-NEXT: addis 3, 2, .LCPI63_1@toc@ha 3702; PC64LE9-NEXT: xscpsgndp 63, 1, 1 3703; PC64LE9-NEXT: lfs 1, .LCPI63_1@toc@l(3) 3704; PC64LE9-NEXT: bl log 3705; PC64LE9-NEXT: nop 3706; PC64LE9-NEXT: addis 3, 2, .LCPI63_2@toc@ha 3707; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3708; PC64LE9-NEXT: xxmrghd 63, 63, 1 3709; PC64LE9-NEXT: lfd 1, .LCPI63_2@toc@l(3) 3710; PC64LE9-NEXT: bl log 3711; PC64LE9-NEXT: nop 3712; PC64LE9-NEXT: fmr 3, 1 3713; PC64LE9-NEXT: xxswapd 1, 63 3714; PC64LE9-NEXT: xscpsgndp 2, 63, 63 3715; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 3716; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3717; PC64LE9-NEXT: addi 1, 1, 48 3718; PC64LE9-NEXT: ld 0, 16(1) 3719; PC64LE9-NEXT: mtlr 0 3720; PC64LE9-NEXT: blr 3721entry: 3722 %log = call <3 x double> @llvm.experimental.constrained.log.v3f64( 3723 <3 x double> <double 42.0, double 42.1, double 42.2>, 3724 metadata !"round.dynamic", 3725 metadata !"fpexcept.strict") #1 3726 ret <3 x double> %log 3727} 3728 3729define <4 x double> @constrained_vector_log_v4f64() #0 { 3730; PC64LE-LABEL: constrained_vector_log_v4f64: 3731; PC64LE: # %bb.0: # %entry 3732; PC64LE-NEXT: mflr 0 3733; PC64LE-NEXT: std 0, 16(1) 3734; PC64LE-NEXT: stdu 1, -80(1) 3735; PC64LE-NEXT: li 3, 48 3736; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 3737; PC64LE-NEXT: li 3, 64 3738; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3739; PC64LE-NEXT: addis 3, 2, .LCPI64_0@toc@ha 3740; PC64LE-NEXT: lfd 1, .LCPI64_0@toc@l(3) 3741; PC64LE-NEXT: bl log 3742; PC64LE-NEXT: nop 3743; PC64LE-NEXT: addis 3, 2, .LCPI64_1@toc@ha 3744; PC64LE-NEXT: xxlor 63, 1, 1 3745; PC64LE-NEXT: lfd 1, .LCPI64_1@toc@l(3) 3746; PC64LE-NEXT: bl log 3747; PC64LE-NEXT: nop 3748; PC64LE-NEXT: addis 3, 2, .LCPI64_2@toc@ha 3749; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3750; PC64LE-NEXT: xxmrghd 63, 1, 63 3751; PC64LE-NEXT: lfd 1, .LCPI64_2@toc@l(3) 3752; PC64LE-NEXT: bl log 3753; PC64LE-NEXT: nop 3754; PC64LE-NEXT: addis 3, 2, .LCPI64_3@toc@ha 3755; PC64LE-NEXT: xxlor 62, 1, 1 3756; PC64LE-NEXT: lfs 1, .LCPI64_3@toc@l(3) 3757; PC64LE-NEXT: bl log 3758; PC64LE-NEXT: nop 3759; PC64LE-NEXT: li 3, 64 3760; PC64LE-NEXT: vmr 3, 31 3761; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3762; PC64LE-NEXT: xxmrghd 34, 62, 1 3763; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3764; PC64LE-NEXT: li 3, 48 3765; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 3766; PC64LE-NEXT: addi 1, 1, 80 3767; PC64LE-NEXT: ld 0, 16(1) 3768; PC64LE-NEXT: mtlr 0 3769; PC64LE-NEXT: blr 3770; 3771; PC64LE9-LABEL: constrained_vector_log_v4f64: 3772; PC64LE9: # %bb.0: # %entry 3773; PC64LE9-NEXT: mflr 0 3774; PC64LE9-NEXT: std 0, 16(1) 3775; PC64LE9-NEXT: stdu 1, -64(1) 3776; PC64LE9-NEXT: addis 3, 2, .LCPI64_0@toc@ha 3777; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 3778; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3779; PC64LE9-NEXT: lfd 1, .LCPI64_0@toc@l(3) 3780; PC64LE9-NEXT: bl log 3781; PC64LE9-NEXT: nop 3782; PC64LE9-NEXT: addis 3, 2, .LCPI64_1@toc@ha 3783; PC64LE9-NEXT: xscpsgndp 63, 1, 1 3784; PC64LE9-NEXT: lfd 1, .LCPI64_1@toc@l(3) 3785; PC64LE9-NEXT: bl log 3786; PC64LE9-NEXT: nop 3787; PC64LE9-NEXT: addis 3, 2, .LCPI64_2@toc@ha 3788; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3789; PC64LE9-NEXT: xxmrghd 63, 1, 63 3790; PC64LE9-NEXT: lfd 1, .LCPI64_2@toc@l(3) 3791; PC64LE9-NEXT: bl log 3792; PC64LE9-NEXT: nop 3793; PC64LE9-NEXT: addis 3, 2, .LCPI64_3@toc@ha 3794; PC64LE9-NEXT: xscpsgndp 62, 1, 1 3795; PC64LE9-NEXT: lfs 1, .LCPI64_3@toc@l(3) 3796; PC64LE9-NEXT: bl log 3797; PC64LE9-NEXT: nop 3798; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3799; PC64LE9-NEXT: xxmrghd 34, 62, 1 3800; PC64LE9-NEXT: vmr 3, 31 3801; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3802; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 3803; PC64LE9-NEXT: addi 1, 1, 64 3804; PC64LE9-NEXT: ld 0, 16(1) 3805; PC64LE9-NEXT: mtlr 0 3806; PC64LE9-NEXT: blr 3807entry: 3808 %log = call <4 x double> @llvm.experimental.constrained.log.v4f64( 3809 <4 x double> <double 42.0, double 42.1, 3810 double 42.2, double 42.3>, 3811 metadata !"round.dynamic", 3812 metadata !"fpexcept.strict") #1 3813 ret <4 x double> %log 3814} 3815 3816define <1 x float> @constrained_vector_log10_v1f32() #0 { 3817; PC64LE-LABEL: constrained_vector_log10_v1f32: 3818; PC64LE: # %bb.0: # %entry 3819; PC64LE-NEXT: mflr 0 3820; PC64LE-NEXT: std 0, 16(1) 3821; PC64LE-NEXT: stdu 1, -32(1) 3822; PC64LE-NEXT: addis 3, 2, .LCPI65_0@toc@ha 3823; PC64LE-NEXT: lfs 1, .LCPI65_0@toc@l(3) 3824; PC64LE-NEXT: bl log10f 3825; PC64LE-NEXT: nop 3826; PC64LE-NEXT: addi 1, 1, 32 3827; PC64LE-NEXT: ld 0, 16(1) 3828; PC64LE-NEXT: mtlr 0 3829; PC64LE-NEXT: blr 3830; 3831; PC64LE9-LABEL: constrained_vector_log10_v1f32: 3832; PC64LE9: # %bb.0: # %entry 3833; PC64LE9-NEXT: mflr 0 3834; PC64LE9-NEXT: std 0, 16(1) 3835; PC64LE9-NEXT: stdu 1, -32(1) 3836; PC64LE9-NEXT: addis 3, 2, .LCPI65_0@toc@ha 3837; PC64LE9-NEXT: lfs 1, .LCPI65_0@toc@l(3) 3838; PC64LE9-NEXT: bl log10f 3839; PC64LE9-NEXT: nop 3840; PC64LE9-NEXT: addi 1, 1, 32 3841; PC64LE9-NEXT: ld 0, 16(1) 3842; PC64LE9-NEXT: mtlr 0 3843; PC64LE9-NEXT: blr 3844entry: 3845 %log10 = call <1 x float> @llvm.experimental.constrained.log10.v1f32( 3846 <1 x float> <float 42.0>, 3847 metadata !"round.dynamic", 3848 metadata !"fpexcept.strict") #1 3849 ret <1 x float> %log10 3850} 3851 3852define <2 x double> @constrained_vector_log10_v2f64() #0 { 3853; PC64LE-LABEL: constrained_vector_log10_v2f64: 3854; PC64LE: # %bb.0: # %entry 3855; PC64LE-NEXT: mflr 0 3856; PC64LE-NEXT: std 0, 16(1) 3857; PC64LE-NEXT: stdu 1, -64(1) 3858; PC64LE-NEXT: li 3, 48 3859; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3860; PC64LE-NEXT: addis 3, 2, .LCPI66_0@toc@ha 3861; PC64LE-NEXT: lfd 1, .LCPI66_0@toc@l(3) 3862; PC64LE-NEXT: bl log10 3863; PC64LE-NEXT: nop 3864; PC64LE-NEXT: addis 3, 2, .LCPI66_1@toc@ha 3865; PC64LE-NEXT: xxlor 63, 1, 1 3866; PC64LE-NEXT: lfs 1, .LCPI66_1@toc@l(3) 3867; PC64LE-NEXT: bl log10 3868; PC64LE-NEXT: nop 3869; PC64LE-NEXT: li 3, 48 3870; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3871; PC64LE-NEXT: xxmrghd 34, 63, 1 3872; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3873; PC64LE-NEXT: addi 1, 1, 64 3874; PC64LE-NEXT: ld 0, 16(1) 3875; PC64LE-NEXT: mtlr 0 3876; PC64LE-NEXT: blr 3877; 3878; PC64LE9-LABEL: constrained_vector_log10_v2f64: 3879; PC64LE9: # %bb.0: # %entry 3880; PC64LE9-NEXT: mflr 0 3881; PC64LE9-NEXT: std 0, 16(1) 3882; PC64LE9-NEXT: stdu 1, -48(1) 3883; PC64LE9-NEXT: addis 3, 2, .LCPI66_0@toc@ha 3884; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 3885; PC64LE9-NEXT: lfd 1, .LCPI66_0@toc@l(3) 3886; PC64LE9-NEXT: bl log10 3887; PC64LE9-NEXT: nop 3888; PC64LE9-NEXT: addis 3, 2, .LCPI66_1@toc@ha 3889; PC64LE9-NEXT: xscpsgndp 63, 1, 1 3890; PC64LE9-NEXT: lfs 1, .LCPI66_1@toc@l(3) 3891; PC64LE9-NEXT: bl log10 3892; PC64LE9-NEXT: nop 3893; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3894; PC64LE9-NEXT: xxmrghd 34, 63, 1 3895; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 3896; PC64LE9-NEXT: addi 1, 1, 48 3897; PC64LE9-NEXT: ld 0, 16(1) 3898; PC64LE9-NEXT: mtlr 0 3899; PC64LE9-NEXT: blr 3900entry: 3901 %log10 = call <2 x double> @llvm.experimental.constrained.log10.v2f64( 3902 <2 x double> <double 42.0, double 42.1>, 3903 metadata !"round.dynamic", 3904 metadata !"fpexcept.strict") #1 3905 ret <2 x double> %log10 3906} 3907 3908define <3 x float> @constrained_vector_log10_v3f32() #0 { 3909; PC64LE-LABEL: constrained_vector_log10_v3f32: 3910; PC64LE: # %bb.0: # %entry 3911; PC64LE-NEXT: mflr 0 3912; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3913; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3914; PC64LE-NEXT: std 0, 16(1) 3915; PC64LE-NEXT: stdu 1, -48(1) 3916; PC64LE-NEXT: addis 3, 2, .LCPI67_0@toc@ha 3917; PC64LE-NEXT: lfs 1, .LCPI67_0@toc@l(3) 3918; PC64LE-NEXT: bl log10f 3919; PC64LE-NEXT: nop 3920; PC64LE-NEXT: addis 3, 2, .LCPI67_1@toc@ha 3921; PC64LE-NEXT: fmr 31, 1 3922; PC64LE-NEXT: lfs 1, .LCPI67_1@toc@l(3) 3923; PC64LE-NEXT: bl log10f 3924; PC64LE-NEXT: nop 3925; PC64LE-NEXT: addis 3, 2, .LCPI67_2@toc@ha 3926; PC64LE-NEXT: fmr 30, 1 3927; PC64LE-NEXT: lfs 1, .LCPI67_2@toc@l(3) 3928; PC64LE-NEXT: bl log10f 3929; PC64LE-NEXT: nop 3930; PC64LE-NEXT: xscvdpspn 34, 30 3931; PC64LE-NEXT: addis 3, 2, .LCPI67_3@toc@ha 3932; PC64LE-NEXT: xscvdpspn 35, 1 3933; PC64LE-NEXT: addi 3, 3, .LCPI67_3@toc@l 3934; PC64LE-NEXT: lvx 4, 0, 3 3935; PC64LE-NEXT: vmrghw 2, 2, 3 3936; PC64LE-NEXT: xscvdpspn 35, 31 3937; PC64LE-NEXT: vperm 2, 3, 2, 4 3938; PC64LE-NEXT: addi 1, 1, 48 3939; PC64LE-NEXT: ld 0, 16(1) 3940; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3941; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3942; PC64LE-NEXT: mtlr 0 3943; PC64LE-NEXT: blr 3944; 3945; PC64LE9-LABEL: constrained_vector_log10_v3f32: 3946; PC64LE9: # %bb.0: # %entry 3947; PC64LE9-NEXT: mflr 0 3948; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3949; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3950; PC64LE9-NEXT: std 0, 16(1) 3951; PC64LE9-NEXT: stdu 1, -48(1) 3952; PC64LE9-NEXT: addis 3, 2, .LCPI67_0@toc@ha 3953; PC64LE9-NEXT: lfs 1, .LCPI67_0@toc@l(3) 3954; PC64LE9-NEXT: bl log10f 3955; PC64LE9-NEXT: nop 3956; PC64LE9-NEXT: addis 3, 2, .LCPI67_1@toc@ha 3957; PC64LE9-NEXT: fmr 31, 1 3958; PC64LE9-NEXT: lfs 1, .LCPI67_1@toc@l(3) 3959; PC64LE9-NEXT: bl log10f 3960; PC64LE9-NEXT: nop 3961; PC64LE9-NEXT: addis 3, 2, .LCPI67_2@toc@ha 3962; PC64LE9-NEXT: fmr 30, 1 3963; PC64LE9-NEXT: lfs 1, .LCPI67_2@toc@l(3) 3964; PC64LE9-NEXT: bl log10f 3965; PC64LE9-NEXT: nop 3966; PC64LE9-NEXT: xscvdpspn 34, 1 3967; PC64LE9-NEXT: xscvdpspn 35, 30 3968; PC64LE9-NEXT: addis 3, 2, .LCPI67_3@toc@ha 3969; PC64LE9-NEXT: xscvdpspn 36, 31 3970; PC64LE9-NEXT: addi 3, 3, .LCPI67_3@toc@l 3971; PC64LE9-NEXT: vmrghw 2, 3, 2 3972; PC64LE9-NEXT: lxvx 35, 0, 3 3973; PC64LE9-NEXT: vperm 2, 4, 2, 3 3974; PC64LE9-NEXT: addi 1, 1, 48 3975; PC64LE9-NEXT: ld 0, 16(1) 3976; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3977; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3978; PC64LE9-NEXT: mtlr 0 3979; PC64LE9-NEXT: blr 3980entry: 3981 %log10 = call <3 x float> @llvm.experimental.constrained.log10.v3f32( 3982 <3 x float> <float 42.0, float 43.0, float 44.0>, 3983 metadata !"round.dynamic", 3984 metadata !"fpexcept.strict") #1 3985 ret <3 x float> %log10 3986} 3987 3988define <3 x double> @constrained_vector_log10_v3f64() #0 { 3989; PC64LE-LABEL: constrained_vector_log10_v3f64: 3990; PC64LE: # %bb.0: # %entry 3991; PC64LE-NEXT: mflr 0 3992; PC64LE-NEXT: std 0, 16(1) 3993; PC64LE-NEXT: stdu 1, -64(1) 3994; PC64LE-NEXT: li 3, 48 3995; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3996; PC64LE-NEXT: addis 3, 2, .LCPI68_0@toc@ha 3997; PC64LE-NEXT: lfd 1, .LCPI68_0@toc@l(3) 3998; PC64LE-NEXT: bl log10 3999; PC64LE-NEXT: nop 4000; PC64LE-NEXT: addis 3, 2, .LCPI68_1@toc@ha 4001; PC64LE-NEXT: xxlor 63, 1, 1 4002; PC64LE-NEXT: lfs 1, .LCPI68_1@toc@l(3) 4003; PC64LE-NEXT: bl log10 4004; PC64LE-NEXT: nop 4005; PC64LE-NEXT: addis 3, 2, .LCPI68_2@toc@ha 4006; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4007; PC64LE-NEXT: xxmrghd 63, 63, 1 4008; PC64LE-NEXT: lfd 1, .LCPI68_2@toc@l(3) 4009; PC64LE-NEXT: bl log10 4010; PC64LE-NEXT: nop 4011; PC64LE-NEXT: xxswapd 0, 63 4012; PC64LE-NEXT: li 3, 48 4013; PC64LE-NEXT: xxlor 2, 63, 63 4014; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4015; PC64LE-NEXT: fmr 3, 1 4016; PC64LE-NEXT: fmr 1, 0 4017; PC64LE-NEXT: addi 1, 1, 64 4018; PC64LE-NEXT: ld 0, 16(1) 4019; PC64LE-NEXT: mtlr 0 4020; PC64LE-NEXT: blr 4021; 4022; PC64LE9-LABEL: constrained_vector_log10_v3f64: 4023; PC64LE9: # %bb.0: # %entry 4024; PC64LE9-NEXT: mflr 0 4025; PC64LE9-NEXT: std 0, 16(1) 4026; PC64LE9-NEXT: stdu 1, -48(1) 4027; PC64LE9-NEXT: addis 3, 2, .LCPI68_0@toc@ha 4028; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 4029; PC64LE9-NEXT: lfd 1, .LCPI68_0@toc@l(3) 4030; PC64LE9-NEXT: bl log10 4031; PC64LE9-NEXT: nop 4032; PC64LE9-NEXT: addis 3, 2, .LCPI68_1@toc@ha 4033; PC64LE9-NEXT: xscpsgndp 63, 1, 1 4034; PC64LE9-NEXT: lfs 1, .LCPI68_1@toc@l(3) 4035; PC64LE9-NEXT: bl log10 4036; PC64LE9-NEXT: nop 4037; PC64LE9-NEXT: addis 3, 2, .LCPI68_2@toc@ha 4038; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4039; PC64LE9-NEXT: xxmrghd 63, 63, 1 4040; PC64LE9-NEXT: lfd 1, .LCPI68_2@toc@l(3) 4041; PC64LE9-NEXT: bl log10 4042; PC64LE9-NEXT: nop 4043; PC64LE9-NEXT: fmr 3, 1 4044; PC64LE9-NEXT: xxswapd 1, 63 4045; PC64LE9-NEXT: xscpsgndp 2, 63, 63 4046; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 4047; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4048; PC64LE9-NEXT: addi 1, 1, 48 4049; PC64LE9-NEXT: ld 0, 16(1) 4050; PC64LE9-NEXT: mtlr 0 4051; PC64LE9-NEXT: blr 4052entry: 4053 %log10 = call <3 x double> @llvm.experimental.constrained.log10.v3f64( 4054 <3 x double> <double 42.0, double 42.1, double 42.2>, 4055 metadata !"round.dynamic", 4056 metadata !"fpexcept.strict") #1 4057 ret <3 x double> %log10 4058} 4059 4060define <4 x double> @constrained_vector_log10_v4f64() #0 { 4061; PC64LE-LABEL: constrained_vector_log10_v4f64: 4062; PC64LE: # %bb.0: # %entry 4063; PC64LE-NEXT: mflr 0 4064; PC64LE-NEXT: std 0, 16(1) 4065; PC64LE-NEXT: stdu 1, -80(1) 4066; PC64LE-NEXT: li 3, 48 4067; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 4068; PC64LE-NEXT: li 3, 64 4069; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4070; PC64LE-NEXT: addis 3, 2, .LCPI69_0@toc@ha 4071; PC64LE-NEXT: lfd 1, .LCPI69_0@toc@l(3) 4072; PC64LE-NEXT: bl log10 4073; PC64LE-NEXT: nop 4074; PC64LE-NEXT: addis 3, 2, .LCPI69_1@toc@ha 4075; PC64LE-NEXT: xxlor 63, 1, 1 4076; PC64LE-NEXT: lfd 1, .LCPI69_1@toc@l(3) 4077; PC64LE-NEXT: bl log10 4078; PC64LE-NEXT: nop 4079; PC64LE-NEXT: addis 3, 2, .LCPI69_2@toc@ha 4080; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4081; PC64LE-NEXT: xxmrghd 63, 1, 63 4082; PC64LE-NEXT: lfd 1, .LCPI69_2@toc@l(3) 4083; PC64LE-NEXT: bl log10 4084; PC64LE-NEXT: nop 4085; PC64LE-NEXT: addis 3, 2, .LCPI69_3@toc@ha 4086; PC64LE-NEXT: xxlor 62, 1, 1 4087; PC64LE-NEXT: lfs 1, .LCPI69_3@toc@l(3) 4088; PC64LE-NEXT: bl log10 4089; PC64LE-NEXT: nop 4090; PC64LE-NEXT: li 3, 64 4091; PC64LE-NEXT: vmr 3, 31 4092; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4093; PC64LE-NEXT: xxmrghd 34, 62, 1 4094; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4095; PC64LE-NEXT: li 3, 48 4096; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 4097; PC64LE-NEXT: addi 1, 1, 80 4098; PC64LE-NEXT: ld 0, 16(1) 4099; PC64LE-NEXT: mtlr 0 4100; PC64LE-NEXT: blr 4101; 4102; PC64LE9-LABEL: constrained_vector_log10_v4f64: 4103; PC64LE9: # %bb.0: # %entry 4104; PC64LE9-NEXT: mflr 0 4105; PC64LE9-NEXT: std 0, 16(1) 4106; PC64LE9-NEXT: stdu 1, -64(1) 4107; PC64LE9-NEXT: addis 3, 2, .LCPI69_0@toc@ha 4108; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 4109; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 4110; PC64LE9-NEXT: lfd 1, .LCPI69_0@toc@l(3) 4111; PC64LE9-NEXT: bl log10 4112; PC64LE9-NEXT: nop 4113; PC64LE9-NEXT: addis 3, 2, .LCPI69_1@toc@ha 4114; PC64LE9-NEXT: xscpsgndp 63, 1, 1 4115; PC64LE9-NEXT: lfd 1, .LCPI69_1@toc@l(3) 4116; PC64LE9-NEXT: bl log10 4117; PC64LE9-NEXT: nop 4118; PC64LE9-NEXT: addis 3, 2, .LCPI69_2@toc@ha 4119; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4120; PC64LE9-NEXT: xxmrghd 63, 1, 63 4121; PC64LE9-NEXT: lfd 1, .LCPI69_2@toc@l(3) 4122; PC64LE9-NEXT: bl log10 4123; PC64LE9-NEXT: nop 4124; PC64LE9-NEXT: addis 3, 2, .LCPI69_3@toc@ha 4125; PC64LE9-NEXT: xscpsgndp 62, 1, 1 4126; PC64LE9-NEXT: lfs 1, .LCPI69_3@toc@l(3) 4127; PC64LE9-NEXT: bl log10 4128; PC64LE9-NEXT: nop 4129; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4130; PC64LE9-NEXT: xxmrghd 34, 62, 1 4131; PC64LE9-NEXT: vmr 3, 31 4132; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 4133; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 4134; PC64LE9-NEXT: addi 1, 1, 64 4135; PC64LE9-NEXT: ld 0, 16(1) 4136; PC64LE9-NEXT: mtlr 0 4137; PC64LE9-NEXT: blr 4138entry: 4139 %log10 = call <4 x double> @llvm.experimental.constrained.log10.v4f64( 4140 <4 x double> <double 42.0, double 42.1, 4141 double 42.2, double 42.3>, 4142 metadata !"round.dynamic", 4143 metadata !"fpexcept.strict") #1 4144 ret <4 x double> %log10 4145} 4146 4147define <1 x float> @constrained_vector_log2_v1f32() #0 { 4148; PC64LE-LABEL: constrained_vector_log2_v1f32: 4149; PC64LE: # %bb.0: # %entry 4150; PC64LE-NEXT: mflr 0 4151; PC64LE-NEXT: std 0, 16(1) 4152; PC64LE-NEXT: stdu 1, -32(1) 4153; PC64LE-NEXT: addis 3, 2, .LCPI70_0@toc@ha 4154; PC64LE-NEXT: lfs 1, .LCPI70_0@toc@l(3) 4155; PC64LE-NEXT: bl log2f 4156; PC64LE-NEXT: nop 4157; PC64LE-NEXT: addi 1, 1, 32 4158; PC64LE-NEXT: ld 0, 16(1) 4159; PC64LE-NEXT: mtlr 0 4160; PC64LE-NEXT: blr 4161; 4162; PC64LE9-LABEL: constrained_vector_log2_v1f32: 4163; PC64LE9: # %bb.0: # %entry 4164; PC64LE9-NEXT: mflr 0 4165; PC64LE9-NEXT: std 0, 16(1) 4166; PC64LE9-NEXT: stdu 1, -32(1) 4167; PC64LE9-NEXT: addis 3, 2, .LCPI70_0@toc@ha 4168; PC64LE9-NEXT: lfs 1, .LCPI70_0@toc@l(3) 4169; PC64LE9-NEXT: bl log2f 4170; PC64LE9-NEXT: nop 4171; PC64LE9-NEXT: addi 1, 1, 32 4172; PC64LE9-NEXT: ld 0, 16(1) 4173; PC64LE9-NEXT: mtlr 0 4174; PC64LE9-NEXT: blr 4175entry: 4176 %log2 = call <1 x float> @llvm.experimental.constrained.log2.v1f32( 4177 <1 x float> <float 42.0>, 4178 metadata !"round.dynamic", 4179 metadata !"fpexcept.strict") #1 4180 ret <1 x float> %log2 4181} 4182 4183define <2 x double> @constrained_vector_log2_v2f64() #0 { 4184; PC64LE-LABEL: constrained_vector_log2_v2f64: 4185; PC64LE: # %bb.0: # %entry 4186; PC64LE-NEXT: mflr 0 4187; PC64LE-NEXT: std 0, 16(1) 4188; PC64LE-NEXT: stdu 1, -64(1) 4189; PC64LE-NEXT: li 3, 48 4190; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4191; PC64LE-NEXT: addis 3, 2, .LCPI71_0@toc@ha 4192; PC64LE-NEXT: lfd 1, .LCPI71_0@toc@l(3) 4193; PC64LE-NEXT: bl log2 4194; PC64LE-NEXT: nop 4195; PC64LE-NEXT: addis 3, 2, .LCPI71_1@toc@ha 4196; PC64LE-NEXT: xxlor 63, 1, 1 4197; PC64LE-NEXT: lfs 1, .LCPI71_1@toc@l(3) 4198; PC64LE-NEXT: bl log2 4199; PC64LE-NEXT: nop 4200; PC64LE-NEXT: li 3, 48 4201; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4202; PC64LE-NEXT: xxmrghd 34, 63, 1 4203; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4204; PC64LE-NEXT: addi 1, 1, 64 4205; PC64LE-NEXT: ld 0, 16(1) 4206; PC64LE-NEXT: mtlr 0 4207; PC64LE-NEXT: blr 4208; 4209; PC64LE9-LABEL: constrained_vector_log2_v2f64: 4210; PC64LE9: # %bb.0: # %entry 4211; PC64LE9-NEXT: mflr 0 4212; PC64LE9-NEXT: std 0, 16(1) 4213; PC64LE9-NEXT: stdu 1, -48(1) 4214; PC64LE9-NEXT: addis 3, 2, .LCPI71_0@toc@ha 4215; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 4216; PC64LE9-NEXT: lfd 1, .LCPI71_0@toc@l(3) 4217; PC64LE9-NEXT: bl log2 4218; PC64LE9-NEXT: nop 4219; PC64LE9-NEXT: addis 3, 2, .LCPI71_1@toc@ha 4220; PC64LE9-NEXT: xscpsgndp 63, 1, 1 4221; PC64LE9-NEXT: lfs 1, .LCPI71_1@toc@l(3) 4222; PC64LE9-NEXT: bl log2 4223; PC64LE9-NEXT: nop 4224; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4225; PC64LE9-NEXT: xxmrghd 34, 63, 1 4226; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 4227; PC64LE9-NEXT: addi 1, 1, 48 4228; PC64LE9-NEXT: ld 0, 16(1) 4229; PC64LE9-NEXT: mtlr 0 4230; PC64LE9-NEXT: blr 4231entry: 4232 %log2 = call <2 x double> @llvm.experimental.constrained.log2.v2f64( 4233 <2 x double> <double 42.0, double 42.1>, 4234 metadata !"round.dynamic", 4235 metadata !"fpexcept.strict") #1 4236 ret <2 x double> %log2 4237} 4238 4239define <3 x float> @constrained_vector_log2_v3f32() #0 { 4240; PC64LE-LABEL: constrained_vector_log2_v3f32: 4241; PC64LE: # %bb.0: # %entry 4242; PC64LE-NEXT: mflr 0 4243; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 4244; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 4245; PC64LE-NEXT: std 0, 16(1) 4246; PC64LE-NEXT: stdu 1, -48(1) 4247; PC64LE-NEXT: addis 3, 2, .LCPI72_0@toc@ha 4248; PC64LE-NEXT: lfs 1, .LCPI72_0@toc@l(3) 4249; PC64LE-NEXT: bl log2f 4250; PC64LE-NEXT: nop 4251; PC64LE-NEXT: addis 3, 2, .LCPI72_1@toc@ha 4252; PC64LE-NEXT: fmr 31, 1 4253; PC64LE-NEXT: lfs 1, .LCPI72_1@toc@l(3) 4254; PC64LE-NEXT: bl log2f 4255; PC64LE-NEXT: nop 4256; PC64LE-NEXT: addis 3, 2, .LCPI72_2@toc@ha 4257; PC64LE-NEXT: fmr 30, 1 4258; PC64LE-NEXT: lfs 1, .LCPI72_2@toc@l(3) 4259; PC64LE-NEXT: bl log2f 4260; PC64LE-NEXT: nop 4261; PC64LE-NEXT: xscvdpspn 34, 30 4262; PC64LE-NEXT: addis 3, 2, .LCPI72_3@toc@ha 4263; PC64LE-NEXT: xscvdpspn 35, 1 4264; PC64LE-NEXT: addi 3, 3, .LCPI72_3@toc@l 4265; PC64LE-NEXT: lvx 4, 0, 3 4266; PC64LE-NEXT: vmrghw 2, 2, 3 4267; PC64LE-NEXT: xscvdpspn 35, 31 4268; PC64LE-NEXT: vperm 2, 3, 2, 4 4269; PC64LE-NEXT: addi 1, 1, 48 4270; PC64LE-NEXT: ld 0, 16(1) 4271; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 4272; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 4273; PC64LE-NEXT: mtlr 0 4274; PC64LE-NEXT: blr 4275; 4276; PC64LE9-LABEL: constrained_vector_log2_v3f32: 4277; PC64LE9: # %bb.0: # %entry 4278; PC64LE9-NEXT: mflr 0 4279; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 4280; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 4281; PC64LE9-NEXT: std 0, 16(1) 4282; PC64LE9-NEXT: stdu 1, -48(1) 4283; PC64LE9-NEXT: addis 3, 2, .LCPI72_0@toc@ha 4284; PC64LE9-NEXT: lfs 1, .LCPI72_0@toc@l(3) 4285; PC64LE9-NEXT: bl log2f 4286; PC64LE9-NEXT: nop 4287; PC64LE9-NEXT: addis 3, 2, .LCPI72_1@toc@ha 4288; PC64LE9-NEXT: fmr 31, 1 4289; PC64LE9-NEXT: lfs 1, .LCPI72_1@toc@l(3) 4290; PC64LE9-NEXT: bl log2f 4291; PC64LE9-NEXT: nop 4292; PC64LE9-NEXT: addis 3, 2, .LCPI72_2@toc@ha 4293; PC64LE9-NEXT: fmr 30, 1 4294; PC64LE9-NEXT: lfs 1, .LCPI72_2@toc@l(3) 4295; PC64LE9-NEXT: bl log2f 4296; PC64LE9-NEXT: nop 4297; PC64LE9-NEXT: xscvdpspn 34, 1 4298; PC64LE9-NEXT: xscvdpspn 35, 30 4299; PC64LE9-NEXT: addis 3, 2, .LCPI72_3@toc@ha 4300; PC64LE9-NEXT: xscvdpspn 36, 31 4301; PC64LE9-NEXT: addi 3, 3, .LCPI72_3@toc@l 4302; PC64LE9-NEXT: vmrghw 2, 3, 2 4303; PC64LE9-NEXT: lxvx 35, 0, 3 4304; PC64LE9-NEXT: vperm 2, 4, 2, 3 4305; PC64LE9-NEXT: addi 1, 1, 48 4306; PC64LE9-NEXT: ld 0, 16(1) 4307; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 4308; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 4309; PC64LE9-NEXT: mtlr 0 4310; PC64LE9-NEXT: blr 4311entry: 4312 %log2 = call <3 x float> @llvm.experimental.constrained.log2.v3f32( 4313 <3 x float> <float 42.0, float 43.0, float 44.0>, 4314 metadata !"round.dynamic", 4315 metadata !"fpexcept.strict") #1 4316 ret <3 x float> %log2 4317} 4318 4319define <3 x double> @constrained_vector_log2_v3f64() #0 { 4320; PC64LE-LABEL: constrained_vector_log2_v3f64: 4321; PC64LE: # %bb.0: # %entry 4322; PC64LE-NEXT: mflr 0 4323; PC64LE-NEXT: std 0, 16(1) 4324; PC64LE-NEXT: stdu 1, -64(1) 4325; PC64LE-NEXT: li 3, 48 4326; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4327; PC64LE-NEXT: addis 3, 2, .LCPI73_0@toc@ha 4328; PC64LE-NEXT: lfd 1, .LCPI73_0@toc@l(3) 4329; PC64LE-NEXT: bl log2 4330; PC64LE-NEXT: nop 4331; PC64LE-NEXT: addis 3, 2, .LCPI73_1@toc@ha 4332; PC64LE-NEXT: xxlor 63, 1, 1 4333; PC64LE-NEXT: lfs 1, .LCPI73_1@toc@l(3) 4334; PC64LE-NEXT: bl log2 4335; PC64LE-NEXT: nop 4336; PC64LE-NEXT: addis 3, 2, .LCPI73_2@toc@ha 4337; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4338; PC64LE-NEXT: xxmrghd 63, 63, 1 4339; PC64LE-NEXT: lfd 1, .LCPI73_2@toc@l(3) 4340; PC64LE-NEXT: bl log2 4341; PC64LE-NEXT: nop 4342; PC64LE-NEXT: xxswapd 0, 63 4343; PC64LE-NEXT: li 3, 48 4344; PC64LE-NEXT: xxlor 2, 63, 63 4345; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4346; PC64LE-NEXT: fmr 3, 1 4347; PC64LE-NEXT: fmr 1, 0 4348; PC64LE-NEXT: addi 1, 1, 64 4349; PC64LE-NEXT: ld 0, 16(1) 4350; PC64LE-NEXT: mtlr 0 4351; PC64LE-NEXT: blr 4352; 4353; PC64LE9-LABEL: constrained_vector_log2_v3f64: 4354; PC64LE9: # %bb.0: # %entry 4355; PC64LE9-NEXT: mflr 0 4356; PC64LE9-NEXT: std 0, 16(1) 4357; PC64LE9-NEXT: stdu 1, -48(1) 4358; PC64LE9-NEXT: addis 3, 2, .LCPI73_0@toc@ha 4359; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 4360; PC64LE9-NEXT: lfd 1, .LCPI73_0@toc@l(3) 4361; PC64LE9-NEXT: bl log2 4362; PC64LE9-NEXT: nop 4363; PC64LE9-NEXT: addis 3, 2, .LCPI73_1@toc@ha 4364; PC64LE9-NEXT: xscpsgndp 63, 1, 1 4365; PC64LE9-NEXT: lfs 1, .LCPI73_1@toc@l(3) 4366; PC64LE9-NEXT: bl log2 4367; PC64LE9-NEXT: nop 4368; PC64LE9-NEXT: addis 3, 2, .LCPI73_2@toc@ha 4369; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4370; PC64LE9-NEXT: xxmrghd 63, 63, 1 4371; PC64LE9-NEXT: lfd 1, .LCPI73_2@toc@l(3) 4372; PC64LE9-NEXT: bl log2 4373; PC64LE9-NEXT: nop 4374; PC64LE9-NEXT: fmr 3, 1 4375; PC64LE9-NEXT: xxswapd 1, 63 4376; PC64LE9-NEXT: xscpsgndp 2, 63, 63 4377; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 4378; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4379; PC64LE9-NEXT: addi 1, 1, 48 4380; PC64LE9-NEXT: ld 0, 16(1) 4381; PC64LE9-NEXT: mtlr 0 4382; PC64LE9-NEXT: blr 4383entry: 4384 %log2 = call <3 x double> @llvm.experimental.constrained.log2.v3f64( 4385 <3 x double> <double 42.0, double 42.1, double 42.2>, 4386 metadata !"round.dynamic", 4387 metadata !"fpexcept.strict") #1 4388 ret <3 x double> %log2 4389} 4390 4391define <4 x double> @constrained_vector_log2_v4f64() #0 { 4392; PC64LE-LABEL: constrained_vector_log2_v4f64: 4393; PC64LE: # %bb.0: # %entry 4394; PC64LE-NEXT: mflr 0 4395; PC64LE-NEXT: std 0, 16(1) 4396; PC64LE-NEXT: stdu 1, -80(1) 4397; PC64LE-NEXT: li 3, 48 4398; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 4399; PC64LE-NEXT: li 3, 64 4400; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4401; PC64LE-NEXT: addis 3, 2, .LCPI74_0@toc@ha 4402; PC64LE-NEXT: lfd 1, .LCPI74_0@toc@l(3) 4403; PC64LE-NEXT: bl log2 4404; PC64LE-NEXT: nop 4405; PC64LE-NEXT: addis 3, 2, .LCPI74_1@toc@ha 4406; PC64LE-NEXT: xxlor 63, 1, 1 4407; PC64LE-NEXT: lfd 1, .LCPI74_1@toc@l(3) 4408; PC64LE-NEXT: bl log2 4409; PC64LE-NEXT: nop 4410; PC64LE-NEXT: addis 3, 2, .LCPI74_2@toc@ha 4411; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4412; PC64LE-NEXT: xxmrghd 63, 1, 63 4413; PC64LE-NEXT: lfd 1, .LCPI74_2@toc@l(3) 4414; PC64LE-NEXT: bl log2 4415; PC64LE-NEXT: nop 4416; PC64LE-NEXT: addis 3, 2, .LCPI74_3@toc@ha 4417; PC64LE-NEXT: xxlor 62, 1, 1 4418; PC64LE-NEXT: lfs 1, .LCPI74_3@toc@l(3) 4419; PC64LE-NEXT: bl log2 4420; PC64LE-NEXT: nop 4421; PC64LE-NEXT: li 3, 64 4422; PC64LE-NEXT: vmr 3, 31 4423; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4424; PC64LE-NEXT: xxmrghd 34, 62, 1 4425; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4426; PC64LE-NEXT: li 3, 48 4427; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 4428; PC64LE-NEXT: addi 1, 1, 80 4429; PC64LE-NEXT: ld 0, 16(1) 4430; PC64LE-NEXT: mtlr 0 4431; PC64LE-NEXT: blr 4432; 4433; PC64LE9-LABEL: constrained_vector_log2_v4f64: 4434; PC64LE9: # %bb.0: # %entry 4435; PC64LE9-NEXT: mflr 0 4436; PC64LE9-NEXT: std 0, 16(1) 4437; PC64LE9-NEXT: stdu 1, -64(1) 4438; PC64LE9-NEXT: addis 3, 2, .LCPI74_0@toc@ha 4439; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 4440; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 4441; PC64LE9-NEXT: lfd 1, .LCPI74_0@toc@l(3) 4442; PC64LE9-NEXT: bl log2 4443; PC64LE9-NEXT: nop 4444; PC64LE9-NEXT: addis 3, 2, .LCPI74_1@toc@ha 4445; PC64LE9-NEXT: xscpsgndp 63, 1, 1 4446; PC64LE9-NEXT: lfd 1, .LCPI74_1@toc@l(3) 4447; PC64LE9-NEXT: bl log2 4448; PC64LE9-NEXT: nop 4449; PC64LE9-NEXT: addis 3, 2, .LCPI74_2@toc@ha 4450; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4451; PC64LE9-NEXT: xxmrghd 63, 1, 63 4452; PC64LE9-NEXT: lfd 1, .LCPI74_2@toc@l(3) 4453; PC64LE9-NEXT: bl log2 4454; PC64LE9-NEXT: nop 4455; PC64LE9-NEXT: addis 3, 2, .LCPI74_3@toc@ha 4456; PC64LE9-NEXT: xscpsgndp 62, 1, 1 4457; PC64LE9-NEXT: lfs 1, .LCPI74_3@toc@l(3) 4458; PC64LE9-NEXT: bl log2 4459; PC64LE9-NEXT: nop 4460; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4461; PC64LE9-NEXT: xxmrghd 34, 62, 1 4462; PC64LE9-NEXT: vmr 3, 31 4463; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 4464; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 4465; PC64LE9-NEXT: addi 1, 1, 64 4466; PC64LE9-NEXT: ld 0, 16(1) 4467; PC64LE9-NEXT: mtlr 0 4468; PC64LE9-NEXT: blr 4469entry: 4470 %log2 = call <4 x double> @llvm.experimental.constrained.log2.v4f64( 4471 <4 x double> <double 42.0, double 42.1, 4472 double 42.2, double 42.3>, 4473 metadata !"round.dynamic", 4474 metadata !"fpexcept.strict") #1 4475 ret <4 x double> %log2 4476} 4477 4478define <1 x float> @constrained_vector_rint_v1f32() #0 { 4479; PC64LE-LABEL: constrained_vector_rint_v1f32: 4480; PC64LE: # %bb.0: # %entry 4481; PC64LE-NEXT: addis 3, 2, .LCPI75_0@toc@ha 4482; PC64LE-NEXT: lfs 0, .LCPI75_0@toc@l(3) 4483; PC64LE-NEXT: xsrdpic 1, 0 4484; PC64LE-NEXT: blr 4485; 4486; PC64LE9-LABEL: constrained_vector_rint_v1f32: 4487; PC64LE9: # %bb.0: # %entry 4488; PC64LE9-NEXT: addis 3, 2, .LCPI75_0@toc@ha 4489; PC64LE9-NEXT: lfs 0, .LCPI75_0@toc@l(3) 4490; PC64LE9-NEXT: xsrdpic 1, 0 4491; PC64LE9-NEXT: blr 4492entry: 4493 %rint = call <1 x float> @llvm.experimental.constrained.rint.v1f32( 4494 <1 x float> <float 42.0>, 4495 metadata !"round.dynamic", 4496 metadata !"fpexcept.strict") #1 4497 ret <1 x float> %rint 4498} 4499 4500define <2 x double> @constrained_vector_rint_v2f64() #0 { 4501; PC64LE-LABEL: constrained_vector_rint_v2f64: 4502; PC64LE: # %bb.0: # %entry 4503; PC64LE-NEXT: addis 3, 2, .LCPI76_0@toc@ha 4504; PC64LE-NEXT: addi 3, 3, .LCPI76_0@toc@l 4505; PC64LE-NEXT: lxvd2x 0, 0, 3 4506; PC64LE-NEXT: xxswapd 0, 0 4507; PC64LE-NEXT: xvrdpic 34, 0 4508; PC64LE-NEXT: blr 4509; 4510; PC64LE9-LABEL: constrained_vector_rint_v2f64: 4511; PC64LE9: # %bb.0: # %entry 4512; PC64LE9-NEXT: addis 3, 2, .LCPI76_0@toc@ha 4513; PC64LE9-NEXT: addi 3, 3, .LCPI76_0@toc@l 4514; PC64LE9-NEXT: lxvx 0, 0, 3 4515; PC64LE9-NEXT: xvrdpic 34, 0 4516; PC64LE9-NEXT: blr 4517entry: 4518 %rint = call <2 x double> @llvm.experimental.constrained.rint.v2f64( 4519 <2 x double> <double 42.1, double 42.0>, 4520 metadata !"round.dynamic", 4521 metadata !"fpexcept.strict") #1 4522 ret <2 x double> %rint 4523} 4524 4525define <3 x float> @constrained_vector_rint_v3f32() #0 { 4526; PC64LE-LABEL: constrained_vector_rint_v3f32: 4527; PC64LE: # %bb.0: # %entry 4528; PC64LE-NEXT: addis 3, 2, .LCPI77_2@toc@ha 4529; PC64LE-NEXT: addis 4, 2, .LCPI77_1@toc@ha 4530; PC64LE-NEXT: lfs 0, .LCPI77_2@toc@l(3) 4531; PC64LE-NEXT: lfs 1, .LCPI77_1@toc@l(4) 4532; PC64LE-NEXT: addis 3, 2, .LCPI77_0@toc@ha 4533; PC64LE-NEXT: xsrdpic 0, 0 4534; PC64LE-NEXT: lfs 2, .LCPI77_0@toc@l(3) 4535; PC64LE-NEXT: addis 3, 2, .LCPI77_3@toc@ha 4536; PC64LE-NEXT: xsrdpic 1, 1 4537; PC64LE-NEXT: addi 3, 3, .LCPI77_3@toc@l 4538; PC64LE-NEXT: lvx 4, 0, 3 4539; PC64LE-NEXT: xscvdpspn 34, 0 4540; PC64LE-NEXT: xscvdpspn 35, 1 4541; PC64LE-NEXT: xsrdpic 0, 2 4542; PC64LE-NEXT: vmrghw 2, 3, 2 4543; PC64LE-NEXT: xscvdpspn 35, 0 4544; PC64LE-NEXT: vperm 2, 3, 2, 4 4545; PC64LE-NEXT: blr 4546; 4547; PC64LE9-LABEL: constrained_vector_rint_v3f32: 4548; PC64LE9: # %bb.0: # %entry 4549; PC64LE9-NEXT: addis 3, 2, .LCPI77_0@toc@ha 4550; PC64LE9-NEXT: lfs 0, .LCPI77_0@toc@l(3) 4551; PC64LE9-NEXT: addis 3, 2, .LCPI77_1@toc@ha 4552; PC64LE9-NEXT: lfs 1, .LCPI77_1@toc@l(3) 4553; PC64LE9-NEXT: addis 3, 2, .LCPI77_2@toc@ha 4554; PC64LE9-NEXT: xsrdpic 0, 0 4555; PC64LE9-NEXT: lfs 2, .LCPI77_2@toc@l(3) 4556; PC64LE9-NEXT: addis 3, 2, .LCPI77_3@toc@ha 4557; PC64LE9-NEXT: addi 3, 3, .LCPI77_3@toc@l 4558; PC64LE9-NEXT: xsrdpic 1, 1 4559; PC64LE9-NEXT: xsrdpic 2, 2 4560; PC64LE9-NEXT: xscvdpspn 36, 0 4561; PC64LE9-NEXT: xscvdpspn 35, 1 4562; PC64LE9-NEXT: xscvdpspn 34, 2 4563; PC64LE9-NEXT: vmrghw 2, 3, 2 4564; PC64LE9-NEXT: lxvx 35, 0, 3 4565; PC64LE9-NEXT: vperm 2, 4, 2, 3 4566; PC64LE9-NEXT: blr 4567 entry: 4568 %rint = call <3 x float> @llvm.experimental.constrained.rint.v3f32( 4569 <3 x float> <float 42.0, float 43.0, float 44.0>, 4570 metadata !"round.dynamic", 4571 metadata !"fpexcept.strict") #1 4572 ret <3 x float> %rint 4573} 4574 4575define <3 x double> @constrained_vector_rint_v3f64() #0 { 4576; PC64LE-LABEL: constrained_vector_rint_v3f64: 4577; PC64LE: # %bb.0: # %entry 4578; PC64LE-NEXT: addis 3, 2, .LCPI78_1@toc@ha 4579; PC64LE-NEXT: addi 3, 3, .LCPI78_1@toc@l 4580; PC64LE-NEXT: lxvd2x 0, 0, 3 4581; PC64LE-NEXT: addis 3, 2, .LCPI78_0@toc@ha 4582; PC64LE-NEXT: lfd 1, .LCPI78_0@toc@l(3) 4583; PC64LE-NEXT: xxswapd 0, 0 4584; PC64LE-NEXT: xsrdpic 3, 1 4585; PC64LE-NEXT: xvrdpic 2, 0 4586; PC64LE-NEXT: xxswapd 1, 2 4587; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 4588; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4589; PC64LE-NEXT: blr 4590; 4591; PC64LE9-LABEL: constrained_vector_rint_v3f64: 4592; PC64LE9: # %bb.0: # %entry 4593; PC64LE9-NEXT: addis 3, 2, .LCPI78_0@toc@ha 4594; PC64LE9-NEXT: lfd 0, .LCPI78_0@toc@l(3) 4595; PC64LE9-NEXT: addis 3, 2, .LCPI78_1@toc@ha 4596; PC64LE9-NEXT: addi 3, 3, .LCPI78_1@toc@l 4597; PC64LE9-NEXT: xsrdpic 3, 0 4598; PC64LE9-NEXT: lxvx 0, 0, 3 4599; PC64LE9-NEXT: xvrdpic 2, 0 4600; PC64LE9-NEXT: xxswapd 1, 2 4601; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4602; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 4603; PC64LE9-NEXT: blr 4604entry: 4605 %rint = call <3 x double> @llvm.experimental.constrained.rint.v3f64( 4606 <3 x double> <double 42.0, double 42.1, double 42.2>, 4607 metadata !"round.dynamic", 4608 metadata !"fpexcept.strict") #1 4609 ret <3 x double> %rint 4610} 4611 4612define <4 x double> @constrained_vector_rint_v4f64() #0 { 4613; PC64LE-LABEL: constrained_vector_rint_v4f64: 4614; PC64LE: # %bb.0: # %entry 4615; PC64LE-NEXT: addis 3, 2, .LCPI79_0@toc@ha 4616; PC64LE-NEXT: addis 4, 2, .LCPI79_1@toc@ha 4617; PC64LE-NEXT: addi 3, 3, .LCPI79_0@toc@l 4618; PC64LE-NEXT: lxvd2x 0, 0, 3 4619; PC64LE-NEXT: addi 3, 4, .LCPI79_1@toc@l 4620; PC64LE-NEXT: lxvd2x 1, 0, 3 4621; PC64LE-NEXT: xxswapd 0, 0 4622; PC64LE-NEXT: xxswapd 1, 1 4623; PC64LE-NEXT: xvrdpic 34, 0 4624; PC64LE-NEXT: xvrdpic 35, 1 4625; PC64LE-NEXT: blr 4626; 4627; PC64LE9-LABEL: constrained_vector_rint_v4f64: 4628; PC64LE9: # %bb.0: # %entry 4629; PC64LE9-NEXT: addis 3, 2, .LCPI79_0@toc@ha 4630; PC64LE9-NEXT: addi 3, 3, .LCPI79_0@toc@l 4631; PC64LE9-NEXT: lxvx 0, 0, 3 4632; PC64LE9-NEXT: addis 3, 2, .LCPI79_1@toc@ha 4633; PC64LE9-NEXT: addi 3, 3, .LCPI79_1@toc@l 4634; PC64LE9-NEXT: xvrdpic 34, 0 4635; PC64LE9-NEXT: lxvx 0, 0, 3 4636; PC64LE9-NEXT: xvrdpic 35, 0 4637; PC64LE9-NEXT: blr 4638entry: 4639 %rint = call <4 x double> @llvm.experimental.constrained.rint.v4f64( 4640 <4 x double> <double 42.1, double 42.2, 4641 double 42.3, double 42.4>, 4642 metadata !"round.dynamic", 4643 metadata !"fpexcept.strict") #1 4644 ret <4 x double> %rint 4645} 4646 4647define <1 x float> @constrained_vector_nearbyint_v1f32() #0 { 4648; PC64LE-LABEL: constrained_vector_nearbyint_v1f32: 4649; PC64LE: # %bb.0: # %entry 4650; PC64LE-NEXT: mflr 0 4651; PC64LE-NEXT: std 0, 16(1) 4652; PC64LE-NEXT: stdu 1, -32(1) 4653; PC64LE-NEXT: addis 3, 2, .LCPI80_0@toc@ha 4654; PC64LE-NEXT: lfs 1, .LCPI80_0@toc@l(3) 4655; PC64LE-NEXT: bl nearbyintf 4656; PC64LE-NEXT: nop 4657; PC64LE-NEXT: addi 1, 1, 32 4658; PC64LE-NEXT: ld 0, 16(1) 4659; PC64LE-NEXT: mtlr 0 4660; PC64LE-NEXT: blr 4661; 4662; PC64LE9-LABEL: constrained_vector_nearbyint_v1f32: 4663; PC64LE9: # %bb.0: # %entry 4664; PC64LE9-NEXT: mflr 0 4665; PC64LE9-NEXT: std 0, 16(1) 4666; PC64LE9-NEXT: stdu 1, -32(1) 4667; PC64LE9-NEXT: addis 3, 2, .LCPI80_0@toc@ha 4668; PC64LE9-NEXT: lfs 1, .LCPI80_0@toc@l(3) 4669; PC64LE9-NEXT: bl nearbyintf 4670; PC64LE9-NEXT: nop 4671; PC64LE9-NEXT: addi 1, 1, 32 4672; PC64LE9-NEXT: ld 0, 16(1) 4673; PC64LE9-NEXT: mtlr 0 4674; PC64LE9-NEXT: blr 4675entry: 4676 %nearby = call <1 x float> @llvm.experimental.constrained.nearbyint.v1f32( 4677 <1 x float> <float 42.0>, 4678 metadata !"round.dynamic", 4679 metadata !"fpexcept.strict") #1 4680 ret <1 x float> %nearby 4681} 4682 4683define <2 x double> @constrained_vector_nearbyint_v2f64() #0 { 4684; PC64LE-LABEL: constrained_vector_nearbyint_v2f64: 4685; PC64LE: # %bb.0: # %entry 4686; PC64LE-NEXT: mflr 0 4687; PC64LE-NEXT: std 0, 16(1) 4688; PC64LE-NEXT: stdu 1, -64(1) 4689; PC64LE-NEXT: li 3, 48 4690; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4691; PC64LE-NEXT: addis 3, 2, .LCPI81_0@toc@ha 4692; PC64LE-NEXT: lfd 1, .LCPI81_0@toc@l(3) 4693; PC64LE-NEXT: bl nearbyint 4694; PC64LE-NEXT: nop 4695; PC64LE-NEXT: addis 3, 2, .LCPI81_1@toc@ha 4696; PC64LE-NEXT: xxlor 63, 1, 1 4697; PC64LE-NEXT: lfs 1, .LCPI81_1@toc@l(3) 4698; PC64LE-NEXT: bl nearbyint 4699; PC64LE-NEXT: nop 4700; PC64LE-NEXT: li 3, 48 4701; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4702; PC64LE-NEXT: xxmrghd 34, 1, 63 4703; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4704; PC64LE-NEXT: addi 1, 1, 64 4705; PC64LE-NEXT: ld 0, 16(1) 4706; PC64LE-NEXT: mtlr 0 4707; PC64LE-NEXT: blr 4708; 4709; PC64LE9-LABEL: constrained_vector_nearbyint_v2f64: 4710; PC64LE9: # %bb.0: # %entry 4711; PC64LE9-NEXT: mflr 0 4712; PC64LE9-NEXT: std 0, 16(1) 4713; PC64LE9-NEXT: stdu 1, -48(1) 4714; PC64LE9-NEXT: addis 3, 2, .LCPI81_0@toc@ha 4715; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 4716; PC64LE9-NEXT: lfd 1, .LCPI81_0@toc@l(3) 4717; PC64LE9-NEXT: bl nearbyint 4718; PC64LE9-NEXT: nop 4719; PC64LE9-NEXT: addis 3, 2, .LCPI81_1@toc@ha 4720; PC64LE9-NEXT: xscpsgndp 63, 1, 1 4721; PC64LE9-NEXT: lfs 1, .LCPI81_1@toc@l(3) 4722; PC64LE9-NEXT: bl nearbyint 4723; PC64LE9-NEXT: nop 4724; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4725; PC64LE9-NEXT: xxmrghd 34, 1, 63 4726; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 4727; PC64LE9-NEXT: addi 1, 1, 48 4728; PC64LE9-NEXT: ld 0, 16(1) 4729; PC64LE9-NEXT: mtlr 0 4730; PC64LE9-NEXT: blr 4731entry: 4732 %nearby = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64( 4733 <2 x double> <double 42.1, double 42.0>, 4734 metadata !"round.dynamic", 4735 metadata !"fpexcept.strict") #1 4736 ret <2 x double> %nearby 4737} 4738 4739define <3 x float> @constrained_vector_nearbyint_v3f32() #0 { 4740; PC64LE-LABEL: constrained_vector_nearbyint_v3f32: 4741; PC64LE: # %bb.0: # %entry 4742; PC64LE-NEXT: mflr 0 4743; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 4744; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 4745; PC64LE-NEXT: std 0, 16(1) 4746; PC64LE-NEXT: stdu 1, -48(1) 4747; PC64LE-NEXT: addis 3, 2, .LCPI82_0@toc@ha 4748; PC64LE-NEXT: lfs 1, .LCPI82_0@toc@l(3) 4749; PC64LE-NEXT: bl nearbyintf 4750; PC64LE-NEXT: nop 4751; PC64LE-NEXT: addis 3, 2, .LCPI82_1@toc@ha 4752; PC64LE-NEXT: fmr 31, 1 4753; PC64LE-NEXT: lfs 1, .LCPI82_1@toc@l(3) 4754; PC64LE-NEXT: bl nearbyintf 4755; PC64LE-NEXT: nop 4756; PC64LE-NEXT: addis 3, 2, .LCPI82_2@toc@ha 4757; PC64LE-NEXT: fmr 30, 1 4758; PC64LE-NEXT: lfs 1, .LCPI82_2@toc@l(3) 4759; PC64LE-NEXT: bl nearbyintf 4760; PC64LE-NEXT: nop 4761; PC64LE-NEXT: xscvdpspn 34, 30 4762; PC64LE-NEXT: addis 3, 2, .LCPI82_3@toc@ha 4763; PC64LE-NEXT: xscvdpspn 35, 1 4764; PC64LE-NEXT: addi 3, 3, .LCPI82_3@toc@l 4765; PC64LE-NEXT: lvx 4, 0, 3 4766; PC64LE-NEXT: vmrghw 2, 2, 3 4767; PC64LE-NEXT: xscvdpspn 35, 31 4768; PC64LE-NEXT: vperm 2, 3, 2, 4 4769; PC64LE-NEXT: addi 1, 1, 48 4770; PC64LE-NEXT: ld 0, 16(1) 4771; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 4772; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 4773; PC64LE-NEXT: mtlr 0 4774; PC64LE-NEXT: blr 4775; 4776; PC64LE9-LABEL: constrained_vector_nearbyint_v3f32: 4777; PC64LE9: # %bb.0: # %entry 4778; PC64LE9-NEXT: mflr 0 4779; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 4780; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 4781; PC64LE9-NEXT: std 0, 16(1) 4782; PC64LE9-NEXT: stdu 1, -48(1) 4783; PC64LE9-NEXT: addis 3, 2, .LCPI82_0@toc@ha 4784; PC64LE9-NEXT: lfs 1, .LCPI82_0@toc@l(3) 4785; PC64LE9-NEXT: bl nearbyintf 4786; PC64LE9-NEXT: nop 4787; PC64LE9-NEXT: addis 3, 2, .LCPI82_1@toc@ha 4788; PC64LE9-NEXT: fmr 31, 1 4789; PC64LE9-NEXT: lfs 1, .LCPI82_1@toc@l(3) 4790; PC64LE9-NEXT: bl nearbyintf 4791; PC64LE9-NEXT: nop 4792; PC64LE9-NEXT: addis 3, 2, .LCPI82_2@toc@ha 4793; PC64LE9-NEXT: fmr 30, 1 4794; PC64LE9-NEXT: lfs 1, .LCPI82_2@toc@l(3) 4795; PC64LE9-NEXT: bl nearbyintf 4796; PC64LE9-NEXT: nop 4797; PC64LE9-NEXT: xscvdpspn 34, 1 4798; PC64LE9-NEXT: xscvdpspn 35, 30 4799; PC64LE9-NEXT: addis 3, 2, .LCPI82_3@toc@ha 4800; PC64LE9-NEXT: xscvdpspn 36, 31 4801; PC64LE9-NEXT: addi 3, 3, .LCPI82_3@toc@l 4802; PC64LE9-NEXT: vmrghw 2, 3, 2 4803; PC64LE9-NEXT: lxvx 35, 0, 3 4804; PC64LE9-NEXT: vperm 2, 4, 2, 3 4805; PC64LE9-NEXT: addi 1, 1, 48 4806; PC64LE9-NEXT: ld 0, 16(1) 4807; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 4808; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 4809; PC64LE9-NEXT: mtlr 0 4810; PC64LE9-NEXT: blr 4811entry: 4812 %nearby = call <3 x float> @llvm.experimental.constrained.nearbyint.v3f32( 4813 <3 x float> <float 42.0, float 43.0, float 44.0>, 4814 metadata !"round.dynamic", 4815 metadata !"fpexcept.strict") #1 4816 ret <3 x float> %nearby 4817} 4818 4819define <3 x double> @constrained_vector_nearby_v3f64() #0 { 4820; PC64LE-LABEL: constrained_vector_nearby_v3f64: 4821; PC64LE: # %bb.0: # %entry 4822; PC64LE-NEXT: mflr 0 4823; PC64LE-NEXT: std 0, 16(1) 4824; PC64LE-NEXT: stdu 1, -64(1) 4825; PC64LE-NEXT: li 3, 48 4826; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4827; PC64LE-NEXT: addis 3, 2, .LCPI83_0@toc@ha 4828; PC64LE-NEXT: lfd 1, .LCPI83_0@toc@l(3) 4829; PC64LE-NEXT: bl nearbyint 4830; PC64LE-NEXT: nop 4831; PC64LE-NEXT: addis 3, 2, .LCPI83_1@toc@ha 4832; PC64LE-NEXT: xxlor 63, 1, 1 4833; PC64LE-NEXT: lfs 1, .LCPI83_1@toc@l(3) 4834; PC64LE-NEXT: bl nearbyint 4835; PC64LE-NEXT: nop 4836; PC64LE-NEXT: addis 3, 2, .LCPI83_2@toc@ha 4837; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4838; PC64LE-NEXT: xxmrghd 63, 63, 1 4839; PC64LE-NEXT: lfd 1, .LCPI83_2@toc@l(3) 4840; PC64LE-NEXT: bl nearbyint 4841; PC64LE-NEXT: nop 4842; PC64LE-NEXT: xxswapd 0, 63 4843; PC64LE-NEXT: li 3, 48 4844; PC64LE-NEXT: xxlor 2, 63, 63 4845; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4846; PC64LE-NEXT: fmr 3, 1 4847; PC64LE-NEXT: fmr 1, 0 4848; PC64LE-NEXT: addi 1, 1, 64 4849; PC64LE-NEXT: ld 0, 16(1) 4850; PC64LE-NEXT: mtlr 0 4851; PC64LE-NEXT: blr 4852; 4853; PC64LE9-LABEL: constrained_vector_nearby_v3f64: 4854; PC64LE9: # %bb.0: # %entry 4855; PC64LE9-NEXT: mflr 0 4856; PC64LE9-NEXT: std 0, 16(1) 4857; PC64LE9-NEXT: stdu 1, -48(1) 4858; PC64LE9-NEXT: addis 3, 2, .LCPI83_0@toc@ha 4859; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 4860; PC64LE9-NEXT: lfd 1, .LCPI83_0@toc@l(3) 4861; PC64LE9-NEXT: bl nearbyint 4862; PC64LE9-NEXT: nop 4863; PC64LE9-NEXT: addis 3, 2, .LCPI83_1@toc@ha 4864; PC64LE9-NEXT: xscpsgndp 63, 1, 1 4865; PC64LE9-NEXT: lfs 1, .LCPI83_1@toc@l(3) 4866; PC64LE9-NEXT: bl nearbyint 4867; PC64LE9-NEXT: nop 4868; PC64LE9-NEXT: addis 3, 2, .LCPI83_2@toc@ha 4869; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4870; PC64LE9-NEXT: xxmrghd 63, 63, 1 4871; PC64LE9-NEXT: lfd 1, .LCPI83_2@toc@l(3) 4872; PC64LE9-NEXT: bl nearbyint 4873; PC64LE9-NEXT: nop 4874; PC64LE9-NEXT: fmr 3, 1 4875; PC64LE9-NEXT: xxswapd 1, 63 4876; PC64LE9-NEXT: xscpsgndp 2, 63, 63 4877; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 4878; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4879; PC64LE9-NEXT: addi 1, 1, 48 4880; PC64LE9-NEXT: ld 0, 16(1) 4881; PC64LE9-NEXT: mtlr 0 4882; PC64LE9-NEXT: blr 4883entry: 4884 %nearby = call <3 x double> @llvm.experimental.constrained.nearbyint.v3f64( 4885 <3 x double> <double 42.0, double 42.1, double 42.2>, 4886 metadata !"round.dynamic", 4887 metadata !"fpexcept.strict") #1 4888 ret <3 x double> %nearby 4889} 4890 4891define <4 x double> @constrained_vector_nearbyint_v4f64() #0 { 4892; PC64LE-LABEL: constrained_vector_nearbyint_v4f64: 4893; PC64LE: # %bb.0: # %entry 4894; PC64LE-NEXT: mflr 0 4895; PC64LE-NEXT: std 0, 16(1) 4896; PC64LE-NEXT: stdu 1, -80(1) 4897; PC64LE-NEXT: li 3, 48 4898; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 4899; PC64LE-NEXT: li 3, 64 4900; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4901; PC64LE-NEXT: addis 3, 2, .LCPI84_0@toc@ha 4902; PC64LE-NEXT: lfd 1, .LCPI84_0@toc@l(3) 4903; PC64LE-NEXT: bl nearbyint 4904; PC64LE-NEXT: nop 4905; PC64LE-NEXT: addis 3, 2, .LCPI84_1@toc@ha 4906; PC64LE-NEXT: xxlor 63, 1, 1 4907; PC64LE-NEXT: lfd 1, .LCPI84_1@toc@l(3) 4908; PC64LE-NEXT: bl nearbyint 4909; PC64LE-NEXT: nop 4910; PC64LE-NEXT: addis 3, 2, .LCPI84_2@toc@ha 4911; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4912; PC64LE-NEXT: xxmrghd 63, 1, 63 4913; PC64LE-NEXT: lfd 1, .LCPI84_2@toc@l(3) 4914; PC64LE-NEXT: bl nearbyint 4915; PC64LE-NEXT: nop 4916; PC64LE-NEXT: addis 3, 2, .LCPI84_3@toc@ha 4917; PC64LE-NEXT: xxlor 62, 1, 1 4918; PC64LE-NEXT: lfd 1, .LCPI84_3@toc@l(3) 4919; PC64LE-NEXT: bl nearbyint 4920; PC64LE-NEXT: nop 4921; PC64LE-NEXT: li 3, 64 4922; PC64LE-NEXT: vmr 2, 31 4923; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4924; PC64LE-NEXT: xxmrghd 35, 1, 62 4925; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4926; PC64LE-NEXT: li 3, 48 4927; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 4928; PC64LE-NEXT: addi 1, 1, 80 4929; PC64LE-NEXT: ld 0, 16(1) 4930; PC64LE-NEXT: mtlr 0 4931; PC64LE-NEXT: blr 4932; 4933; PC64LE9-LABEL: constrained_vector_nearbyint_v4f64: 4934; PC64LE9: # %bb.0: # %entry 4935; PC64LE9-NEXT: mflr 0 4936; PC64LE9-NEXT: std 0, 16(1) 4937; PC64LE9-NEXT: stdu 1, -64(1) 4938; PC64LE9-NEXT: addis 3, 2, .LCPI84_0@toc@ha 4939; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 4940; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 4941; PC64LE9-NEXT: lfd 1, .LCPI84_0@toc@l(3) 4942; PC64LE9-NEXT: bl nearbyint 4943; PC64LE9-NEXT: nop 4944; PC64LE9-NEXT: addis 3, 2, .LCPI84_1@toc@ha 4945; PC64LE9-NEXT: xscpsgndp 63, 1, 1 4946; PC64LE9-NEXT: lfd 1, .LCPI84_1@toc@l(3) 4947; PC64LE9-NEXT: bl nearbyint 4948; PC64LE9-NEXT: nop 4949; PC64LE9-NEXT: addis 3, 2, .LCPI84_2@toc@ha 4950; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4951; PC64LE9-NEXT: xxmrghd 63, 1, 63 4952; PC64LE9-NEXT: lfd 1, .LCPI84_2@toc@l(3) 4953; PC64LE9-NEXT: bl nearbyint 4954; PC64LE9-NEXT: nop 4955; PC64LE9-NEXT: addis 3, 2, .LCPI84_3@toc@ha 4956; PC64LE9-NEXT: xscpsgndp 62, 1, 1 4957; PC64LE9-NEXT: lfd 1, .LCPI84_3@toc@l(3) 4958; PC64LE9-NEXT: bl nearbyint 4959; PC64LE9-NEXT: nop 4960; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4961; PC64LE9-NEXT: xxmrghd 35, 1, 62 4962; PC64LE9-NEXT: vmr 2, 31 4963; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 4964; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 4965; PC64LE9-NEXT: addi 1, 1, 64 4966; PC64LE9-NEXT: ld 0, 16(1) 4967; PC64LE9-NEXT: mtlr 0 4968; PC64LE9-NEXT: blr 4969entry: 4970 %nearby = call <4 x double> @llvm.experimental.constrained.nearbyint.v4f64( 4971 <4 x double> <double 42.1, double 42.2, 4972 double 42.3, double 42.4>, 4973 metadata !"round.dynamic", 4974 metadata !"fpexcept.strict") #1 4975 ret <4 x double> %nearby 4976} 4977 4978define <1 x float> @constrained_vector_maxnum_v1f32() #0 { 4979; PC64LE-LABEL: constrained_vector_maxnum_v1f32: 4980; PC64LE: # %bb.0: # %entry 4981; PC64LE-NEXT: mflr 0 4982; PC64LE-NEXT: std 0, 16(1) 4983; PC64LE-NEXT: stdu 1, -32(1) 4984; PC64LE-NEXT: addis 3, 2, .LCPI85_0@toc@ha 4985; PC64LE-NEXT: addis 4, 2, .LCPI85_1@toc@ha 4986; PC64LE-NEXT: lfs 1, .LCPI85_0@toc@l(3) 4987; PC64LE-NEXT: lfs 2, .LCPI85_1@toc@l(4) 4988; PC64LE-NEXT: bl fmaxf 4989; PC64LE-NEXT: nop 4990; PC64LE-NEXT: addi 1, 1, 32 4991; PC64LE-NEXT: ld 0, 16(1) 4992; PC64LE-NEXT: mtlr 0 4993; PC64LE-NEXT: blr 4994; 4995; PC64LE9-LABEL: constrained_vector_maxnum_v1f32: 4996; PC64LE9: # %bb.0: # %entry 4997; PC64LE9-NEXT: mflr 0 4998; PC64LE9-NEXT: std 0, 16(1) 4999; PC64LE9-NEXT: stdu 1, -32(1) 5000; PC64LE9-NEXT: addis 3, 2, .LCPI85_0@toc@ha 5001; PC64LE9-NEXT: lfs 1, .LCPI85_0@toc@l(3) 5002; PC64LE9-NEXT: addis 3, 2, .LCPI85_1@toc@ha 5003; PC64LE9-NEXT: lfs 2, .LCPI85_1@toc@l(3) 5004; PC64LE9-NEXT: bl fmaxf 5005; PC64LE9-NEXT: nop 5006; PC64LE9-NEXT: addi 1, 1, 32 5007; PC64LE9-NEXT: ld 0, 16(1) 5008; PC64LE9-NEXT: mtlr 0 5009; PC64LE9-NEXT: blr 5010entry: 5011 %max = call <1 x float> @llvm.experimental.constrained.maxnum.v1f32( 5012 <1 x float> <float 42.0>, <1 x float> <float 41.0>, 5013 metadata !"fpexcept.strict") #1 5014 ret <1 x float> %max 5015} 5016 5017define <2 x double> @constrained_vector_maxnum_v2f64() #0 { 5018; PC64LE-LABEL: constrained_vector_maxnum_v2f64: 5019; PC64LE: # %bb.0: # %entry 5020; PC64LE-NEXT: addis 3, 2, .LCPI86_0@toc@ha 5021; PC64LE-NEXT: addis 4, 2, .LCPI86_1@toc@ha 5022; PC64LE-NEXT: addi 3, 3, .LCPI86_0@toc@l 5023; PC64LE-NEXT: addi 4, 4, .LCPI86_1@toc@l 5024; PC64LE-NEXT: lxvd2x 0, 0, 3 5025; PC64LE-NEXT: lxvd2x 1, 0, 4 5026; PC64LE-NEXT: xxswapd 0, 0 5027; PC64LE-NEXT: xxswapd 1, 1 5028; PC64LE-NEXT: xvmaxdp 34, 1, 0 5029; PC64LE-NEXT: blr 5030; 5031; PC64LE9-LABEL: constrained_vector_maxnum_v2f64: 5032; PC64LE9: # %bb.0: # %entry 5033; PC64LE9-NEXT: addis 3, 2, .LCPI86_0@toc@ha 5034; PC64LE9-NEXT: addi 3, 3, .LCPI86_0@toc@l 5035; PC64LE9-NEXT: lxvx 0, 0, 3 5036; PC64LE9-NEXT: addis 3, 2, .LCPI86_1@toc@ha 5037; PC64LE9-NEXT: addi 3, 3, .LCPI86_1@toc@l 5038; PC64LE9-NEXT: lxvx 1, 0, 3 5039; PC64LE9-NEXT: xvmaxdp 34, 1, 0 5040; PC64LE9-NEXT: blr 5041entry: 5042 %max = call <2 x double> @llvm.experimental.constrained.maxnum.v2f64( 5043 <2 x double> <double 43.0, double 42.0>, 5044 <2 x double> <double 41.0, double 40.0>, 5045 metadata !"fpexcept.strict") #1 5046 ret <2 x double> %max 5047} 5048 5049define <3 x float> @constrained_vector_maxnum_v3f32() #0 { 5050; PC64LE-LABEL: constrained_vector_maxnum_v3f32: 5051; PC64LE: # %bb.0: # %entry 5052; PC64LE-NEXT: mflr 0 5053; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 5054; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 5055; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 5056; PC64LE-NEXT: std 0, 16(1) 5057; PC64LE-NEXT: stdu 1, -64(1) 5058; PC64LE-NEXT: addis 4, 2, .LCPI87_1@toc@ha 5059; PC64LE-NEXT: addis 3, 2, .LCPI87_0@toc@ha 5060; PC64LE-NEXT: lfs 31, .LCPI87_1@toc@l(4) 5061; PC64LE-NEXT: lfs 1, .LCPI87_0@toc@l(3) 5062; PC64LE-NEXT: fmr 2, 31 5063; PC64LE-NEXT: bl fmaxf 5064; PC64LE-NEXT: nop 5065; PC64LE-NEXT: addis 3, 2, .LCPI87_2@toc@ha 5066; PC64LE-NEXT: addis 4, 2, .LCPI87_3@toc@ha 5067; PC64LE-NEXT: fmr 30, 1 5068; PC64LE-NEXT: lfs 1, .LCPI87_2@toc@l(3) 5069; PC64LE-NEXT: lfs 2, .LCPI87_3@toc@l(4) 5070; PC64LE-NEXT: bl fmaxf 5071; PC64LE-NEXT: nop 5072; PC64LE-NEXT: fmr 29, 1 5073; PC64LE-NEXT: addis 3, 2, .LCPI87_4@toc@ha 5074; PC64LE-NEXT: fmr 1, 31 5075; PC64LE-NEXT: lfs 2, .LCPI87_4@toc@l(3) 5076; PC64LE-NEXT: bl fmaxf 5077; PC64LE-NEXT: nop 5078; PC64LE-NEXT: xscvdpspn 34, 29 5079; PC64LE-NEXT: addis 3, 2, .LCPI87_5@toc@ha 5080; PC64LE-NEXT: xscvdpspn 35, 1 5081; PC64LE-NEXT: addi 3, 3, .LCPI87_5@toc@l 5082; PC64LE-NEXT: lvx 4, 0, 3 5083; PC64LE-NEXT: vmrghw 2, 2, 3 5084; PC64LE-NEXT: xscvdpspn 35, 30 5085; PC64LE-NEXT: vperm 2, 3, 2, 4 5086; PC64LE-NEXT: addi 1, 1, 64 5087; PC64LE-NEXT: ld 0, 16(1) 5088; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 5089; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 5090; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 5091; PC64LE-NEXT: mtlr 0 5092; PC64LE-NEXT: blr 5093; 5094; PC64LE9-LABEL: constrained_vector_maxnum_v3f32: 5095; PC64LE9: # %bb.0: # %entry 5096; PC64LE9-NEXT: mflr 0 5097; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 5098; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 5099; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 5100; PC64LE9-NEXT: std 0, 16(1) 5101; PC64LE9-NEXT: stdu 1, -64(1) 5102; PC64LE9-NEXT: addis 3, 2, .LCPI87_0@toc@ha 5103; PC64LE9-NEXT: lfs 1, .LCPI87_0@toc@l(3) 5104; PC64LE9-NEXT: addis 3, 2, .LCPI87_1@toc@ha 5105; PC64LE9-NEXT: lfs 31, .LCPI87_1@toc@l(3) 5106; PC64LE9-NEXT: fmr 2, 31 5107; PC64LE9-NEXT: bl fmaxf 5108; PC64LE9-NEXT: nop 5109; PC64LE9-NEXT: addis 3, 2, .LCPI87_2@toc@ha 5110; PC64LE9-NEXT: fmr 30, 1 5111; PC64LE9-NEXT: lfs 1, .LCPI87_2@toc@l(3) 5112; PC64LE9-NEXT: addis 3, 2, .LCPI87_3@toc@ha 5113; PC64LE9-NEXT: lfs 2, .LCPI87_3@toc@l(3) 5114; PC64LE9-NEXT: bl fmaxf 5115; PC64LE9-NEXT: nop 5116; PC64LE9-NEXT: addis 3, 2, .LCPI87_4@toc@ha 5117; PC64LE9-NEXT: fmr 29, 1 5118; PC64LE9-NEXT: fmr 1, 31 5119; PC64LE9-NEXT: lfs 2, .LCPI87_4@toc@l(3) 5120; PC64LE9-NEXT: bl fmaxf 5121; PC64LE9-NEXT: nop 5122; PC64LE9-NEXT: xscvdpspn 34, 1 5123; PC64LE9-NEXT: xscvdpspn 35, 29 5124; PC64LE9-NEXT: addis 3, 2, .LCPI87_5@toc@ha 5125; PC64LE9-NEXT: addi 3, 3, .LCPI87_5@toc@l 5126; PC64LE9-NEXT: lxvx 36, 0, 3 5127; PC64LE9-NEXT: vmrghw 2, 3, 2 5128; PC64LE9-NEXT: xscvdpspn 35, 30 5129; PC64LE9-NEXT: vperm 2, 3, 2, 4 5130; PC64LE9-NEXT: addi 1, 1, 64 5131; PC64LE9-NEXT: ld 0, 16(1) 5132; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 5133; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 5134; PC64LE9-NEXT: mtlr 0 5135; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 5136; PC64LE9-NEXT: blr 5137entry: 5138 %max = call <3 x float> @llvm.experimental.constrained.maxnum.v3f32( 5139 <3 x float> <float 43.0, float 44.0, float 45.0>, 5140 <3 x float> <float 41.0, float 42.0, float 43.0>, 5141 metadata !"fpexcept.strict") #1 5142 ret <3 x float> %max 5143} 5144 5145define <3 x double> @constrained_vector_max_v3f64() #0 { 5146; PC64LE-LABEL: constrained_vector_max_v3f64: 5147; PC64LE: # %bb.0: # %entry 5148; PC64LE-NEXT: mflr 0 5149; PC64LE-NEXT: std 0, 16(1) 5150; PC64LE-NEXT: stdu 1, -32(1) 5151; PC64LE-NEXT: addis 3, 2, .LCPI88_0@toc@ha 5152; PC64LE-NEXT: addis 4, 2, .LCPI88_1@toc@ha 5153; PC64LE-NEXT: lfs 1, .LCPI88_0@toc@l(3) 5154; PC64LE-NEXT: lfs 2, .LCPI88_1@toc@l(4) 5155; PC64LE-NEXT: bl fmax 5156; PC64LE-NEXT: nop 5157; PC64LE-NEXT: addis 3, 2, .LCPI88_2@toc@ha 5158; PC64LE-NEXT: addis 4, 2, .LCPI88_3@toc@ha 5159; PC64LE-NEXT: fmr 3, 1 5160; PC64LE-NEXT: addi 3, 3, .LCPI88_2@toc@l 5161; PC64LE-NEXT: addi 4, 4, .LCPI88_3@toc@l 5162; PC64LE-NEXT: lxvd2x 0, 0, 3 5163; PC64LE-NEXT: lxvd2x 2, 0, 4 5164; PC64LE-NEXT: xxswapd 0, 0 5165; PC64LE-NEXT: xxswapd 2, 2 5166; PC64LE-NEXT: xvmaxdp 2, 2, 0 5167; PC64LE-NEXT: xxswapd 0, 2 5168; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 5169; PC64LE-NEXT: fmr 1, 0 5170; PC64LE-NEXT: addi 1, 1, 32 5171; PC64LE-NEXT: ld 0, 16(1) 5172; PC64LE-NEXT: mtlr 0 5173; PC64LE-NEXT: blr 5174; 5175; PC64LE9-LABEL: constrained_vector_max_v3f64: 5176; PC64LE9: # %bb.0: # %entry 5177; PC64LE9-NEXT: mflr 0 5178; PC64LE9-NEXT: std 0, 16(1) 5179; PC64LE9-NEXT: stdu 1, -32(1) 5180; PC64LE9-NEXT: addis 3, 2, .LCPI88_0@toc@ha 5181; PC64LE9-NEXT: lfs 1, .LCPI88_0@toc@l(3) 5182; PC64LE9-NEXT: addis 3, 2, .LCPI88_1@toc@ha 5183; PC64LE9-NEXT: lfs 2, .LCPI88_1@toc@l(3) 5184; PC64LE9-NEXT: bl fmax 5185; PC64LE9-NEXT: nop 5186; PC64LE9-NEXT: addis 3, 2, .LCPI88_2@toc@ha 5187; PC64LE9-NEXT: fmr 3, 1 5188; PC64LE9-NEXT: addi 3, 3, .LCPI88_2@toc@l 5189; PC64LE9-NEXT: lxvx 0, 0, 3 5190; PC64LE9-NEXT: addis 3, 2, .LCPI88_3@toc@ha 5191; PC64LE9-NEXT: addi 3, 3, .LCPI88_3@toc@l 5192; PC64LE9-NEXT: lxvx 1, 0, 3 5193; PC64LE9-NEXT: xvmaxdp 2, 1, 0 5194; PC64LE9-NEXT: xxswapd 1, 2 5195; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 5196; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 5197; PC64LE9-NEXT: addi 1, 1, 32 5198; PC64LE9-NEXT: ld 0, 16(1) 5199; PC64LE9-NEXT: mtlr 0 5200; PC64LE9-NEXT: blr 5201entry: 5202 %max = call <3 x double> @llvm.experimental.constrained.maxnum.v3f64( 5203 <3 x double> <double 43.0, double 44.0, double 45.0>, 5204 <3 x double> <double 40.0, double 41.0, double 42.0>, 5205 metadata !"fpexcept.strict") #1 5206 ret <3 x double> %max 5207} 5208 5209define <4 x double> @constrained_vector_maxnum_v4f64() #0 { 5210; PC64LE-LABEL: constrained_vector_maxnum_v4f64: 5211; PC64LE: # %bb.0: # %entry 5212; PC64LE-NEXT: addis 3, 2, .LCPI89_0@toc@ha 5213; PC64LE-NEXT: addis 4, 2, .LCPI89_1@toc@ha 5214; PC64LE-NEXT: addis 5, 2, .LCPI89_2@toc@ha 5215; PC64LE-NEXT: addis 6, 2, .LCPI89_3@toc@ha 5216; PC64LE-NEXT: addi 3, 3, .LCPI89_0@toc@l 5217; PC64LE-NEXT: addi 4, 4, .LCPI89_1@toc@l 5218; PC64LE-NEXT: lxvd2x 0, 0, 3 5219; PC64LE-NEXT: lxvd2x 1, 0, 4 5220; PC64LE-NEXT: addi 3, 5, .LCPI89_2@toc@l 5221; PC64LE-NEXT: addi 4, 6, .LCPI89_3@toc@l 5222; PC64LE-NEXT: lxvd2x 2, 0, 3 5223; PC64LE-NEXT: lxvd2x 3, 0, 4 5224; PC64LE-NEXT: xxswapd 0, 0 5225; PC64LE-NEXT: xxswapd 1, 1 5226; PC64LE-NEXT: xxswapd 2, 2 5227; PC64LE-NEXT: xxswapd 3, 3 5228; PC64LE-NEXT: xvmaxdp 34, 1, 0 5229; PC64LE-NEXT: xvmaxdp 35, 3, 2 5230; PC64LE-NEXT: blr 5231; 5232; PC64LE9-LABEL: constrained_vector_maxnum_v4f64: 5233; PC64LE9: # %bb.0: # %entry 5234; PC64LE9-NEXT: addis 3, 2, .LCPI89_0@toc@ha 5235; PC64LE9-NEXT: addi 3, 3, .LCPI89_0@toc@l 5236; PC64LE9-NEXT: lxvx 0, 0, 3 5237; PC64LE9-NEXT: addis 3, 2, .LCPI89_1@toc@ha 5238; PC64LE9-NEXT: addi 3, 3, .LCPI89_1@toc@l 5239; PC64LE9-NEXT: lxvx 1, 0, 3 5240; PC64LE9-NEXT: addis 3, 2, .LCPI89_2@toc@ha 5241; PC64LE9-NEXT: addi 3, 3, .LCPI89_2@toc@l 5242; PC64LE9-NEXT: xvmaxdp 34, 1, 0 5243; PC64LE9-NEXT: lxvx 0, 0, 3 5244; PC64LE9-NEXT: addis 3, 2, .LCPI89_3@toc@ha 5245; PC64LE9-NEXT: addi 3, 3, .LCPI89_3@toc@l 5246; PC64LE9-NEXT: lxvx 1, 0, 3 5247; PC64LE9-NEXT: xvmaxdp 35, 1, 0 5248; PC64LE9-NEXT: blr 5249entry: 5250 %max = call <4 x double> @llvm.experimental.constrained.maxnum.v4f64( 5251 <4 x double> <double 44.0, double 45.0, 5252 double 46.0, double 47.0>, 5253 <4 x double> <double 40.0, double 41.0, 5254 double 42.0, double 43.0>, 5255 metadata !"fpexcept.strict") #1 5256 ret <4 x double> %max 5257} 5258 5259define <1 x float> @constrained_vector_minnum_v1f32() #0 { 5260; PC64LE-LABEL: constrained_vector_minnum_v1f32: 5261; PC64LE: # %bb.0: # %entry 5262; PC64LE-NEXT: mflr 0 5263; PC64LE-NEXT: std 0, 16(1) 5264; PC64LE-NEXT: stdu 1, -32(1) 5265; PC64LE-NEXT: addis 3, 2, .LCPI90_0@toc@ha 5266; PC64LE-NEXT: addis 4, 2, .LCPI90_1@toc@ha 5267; PC64LE-NEXT: lfs 1, .LCPI90_0@toc@l(3) 5268; PC64LE-NEXT: lfs 2, .LCPI90_1@toc@l(4) 5269; PC64LE-NEXT: bl fminf 5270; PC64LE-NEXT: nop 5271; PC64LE-NEXT: addi 1, 1, 32 5272; PC64LE-NEXT: ld 0, 16(1) 5273; PC64LE-NEXT: mtlr 0 5274; PC64LE-NEXT: blr 5275; 5276; PC64LE9-LABEL: constrained_vector_minnum_v1f32: 5277; PC64LE9: # %bb.0: # %entry 5278; PC64LE9-NEXT: mflr 0 5279; PC64LE9-NEXT: std 0, 16(1) 5280; PC64LE9-NEXT: stdu 1, -32(1) 5281; PC64LE9-NEXT: addis 3, 2, .LCPI90_0@toc@ha 5282; PC64LE9-NEXT: lfs 1, .LCPI90_0@toc@l(3) 5283; PC64LE9-NEXT: addis 3, 2, .LCPI90_1@toc@ha 5284; PC64LE9-NEXT: lfs 2, .LCPI90_1@toc@l(3) 5285; PC64LE9-NEXT: bl fminf 5286; PC64LE9-NEXT: nop 5287; PC64LE9-NEXT: addi 1, 1, 32 5288; PC64LE9-NEXT: ld 0, 16(1) 5289; PC64LE9-NEXT: mtlr 0 5290; PC64LE9-NEXT: blr 5291 entry: 5292 %min = call <1 x float> @llvm.experimental.constrained.minnum.v1f32( 5293 <1 x float> <float 42.0>, <1 x float> <float 41.0>, 5294 metadata !"fpexcept.strict") #1 5295 ret <1 x float> %min 5296} 5297 5298define <2 x double> @constrained_vector_minnum_v2f64() #0 { 5299; PC64LE-LABEL: constrained_vector_minnum_v2f64: 5300; PC64LE: # %bb.0: # %entry 5301; PC64LE-NEXT: addis 3, 2, .LCPI91_0@toc@ha 5302; PC64LE-NEXT: addis 4, 2, .LCPI91_1@toc@ha 5303; PC64LE-NEXT: addi 3, 3, .LCPI91_0@toc@l 5304; PC64LE-NEXT: addi 4, 4, .LCPI91_1@toc@l 5305; PC64LE-NEXT: lxvd2x 0, 0, 3 5306; PC64LE-NEXT: lxvd2x 1, 0, 4 5307; PC64LE-NEXT: xxswapd 0, 0 5308; PC64LE-NEXT: xxswapd 1, 1 5309; PC64LE-NEXT: xvmindp 34, 1, 0 5310; PC64LE-NEXT: blr 5311; 5312; PC64LE9-LABEL: constrained_vector_minnum_v2f64: 5313; PC64LE9: # %bb.0: # %entry 5314; PC64LE9-NEXT: addis 3, 2, .LCPI91_0@toc@ha 5315; PC64LE9-NEXT: addi 3, 3, .LCPI91_0@toc@l 5316; PC64LE9-NEXT: lxvx 0, 0, 3 5317; PC64LE9-NEXT: addis 3, 2, .LCPI91_1@toc@ha 5318; PC64LE9-NEXT: addi 3, 3, .LCPI91_1@toc@l 5319; PC64LE9-NEXT: lxvx 1, 0, 3 5320; PC64LE9-NEXT: xvmindp 34, 1, 0 5321; PC64LE9-NEXT: blr 5322entry: 5323 %min = call <2 x double> @llvm.experimental.constrained.minnum.v2f64( 5324 <2 x double> <double 43.0, double 42.0>, 5325 <2 x double> <double 41.0, double 40.0>, 5326 metadata !"fpexcept.strict") #1 5327 ret <2 x double> %min 5328} 5329 5330define <3 x float> @constrained_vector_minnum_v3f32() #0 { 5331; PC64LE-LABEL: constrained_vector_minnum_v3f32: 5332; PC64LE: # %bb.0: # %entry 5333; PC64LE-NEXT: mflr 0 5334; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 5335; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 5336; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 5337; PC64LE-NEXT: std 0, 16(1) 5338; PC64LE-NEXT: stdu 1, -64(1) 5339; PC64LE-NEXT: addis 4, 2, .LCPI92_1@toc@ha 5340; PC64LE-NEXT: addis 3, 2, .LCPI92_0@toc@ha 5341; PC64LE-NEXT: lfs 31, .LCPI92_1@toc@l(4) 5342; PC64LE-NEXT: lfs 1, .LCPI92_0@toc@l(3) 5343; PC64LE-NEXT: fmr 2, 31 5344; PC64LE-NEXT: bl fminf 5345; PC64LE-NEXT: nop 5346; PC64LE-NEXT: addis 3, 2, .LCPI92_2@toc@ha 5347; PC64LE-NEXT: addis 4, 2, .LCPI92_3@toc@ha 5348; PC64LE-NEXT: fmr 30, 1 5349; PC64LE-NEXT: lfs 1, .LCPI92_2@toc@l(3) 5350; PC64LE-NEXT: lfs 2, .LCPI92_3@toc@l(4) 5351; PC64LE-NEXT: bl fminf 5352; PC64LE-NEXT: nop 5353; PC64LE-NEXT: fmr 29, 1 5354; PC64LE-NEXT: addis 3, 2, .LCPI92_4@toc@ha 5355; PC64LE-NEXT: fmr 1, 31 5356; PC64LE-NEXT: lfs 2, .LCPI92_4@toc@l(3) 5357; PC64LE-NEXT: bl fminf 5358; PC64LE-NEXT: nop 5359; PC64LE-NEXT: xscvdpspn 34, 29 5360; PC64LE-NEXT: addis 3, 2, .LCPI92_5@toc@ha 5361; PC64LE-NEXT: xscvdpspn 35, 1 5362; PC64LE-NEXT: addi 3, 3, .LCPI92_5@toc@l 5363; PC64LE-NEXT: lvx 4, 0, 3 5364; PC64LE-NEXT: vmrghw 2, 2, 3 5365; PC64LE-NEXT: xscvdpspn 35, 30 5366; PC64LE-NEXT: vperm 2, 3, 2, 4 5367; PC64LE-NEXT: addi 1, 1, 64 5368; PC64LE-NEXT: ld 0, 16(1) 5369; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 5370; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 5371; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 5372; PC64LE-NEXT: mtlr 0 5373; PC64LE-NEXT: blr 5374; 5375; PC64LE9-LABEL: constrained_vector_minnum_v3f32: 5376; PC64LE9: # %bb.0: # %entry 5377; PC64LE9-NEXT: mflr 0 5378; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 5379; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 5380; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 5381; PC64LE9-NEXT: std 0, 16(1) 5382; PC64LE9-NEXT: stdu 1, -64(1) 5383; PC64LE9-NEXT: addis 3, 2, .LCPI92_0@toc@ha 5384; PC64LE9-NEXT: lfs 1, .LCPI92_0@toc@l(3) 5385; PC64LE9-NEXT: addis 3, 2, .LCPI92_1@toc@ha 5386; PC64LE9-NEXT: lfs 31, .LCPI92_1@toc@l(3) 5387; PC64LE9-NEXT: fmr 2, 31 5388; PC64LE9-NEXT: bl fminf 5389; PC64LE9-NEXT: nop 5390; PC64LE9-NEXT: addis 3, 2, .LCPI92_2@toc@ha 5391; PC64LE9-NEXT: fmr 30, 1 5392; PC64LE9-NEXT: lfs 1, .LCPI92_2@toc@l(3) 5393; PC64LE9-NEXT: addis 3, 2, .LCPI92_3@toc@ha 5394; PC64LE9-NEXT: lfs 2, .LCPI92_3@toc@l(3) 5395; PC64LE9-NEXT: bl fminf 5396; PC64LE9-NEXT: nop 5397; PC64LE9-NEXT: addis 3, 2, .LCPI92_4@toc@ha 5398; PC64LE9-NEXT: fmr 29, 1 5399; PC64LE9-NEXT: fmr 1, 31 5400; PC64LE9-NEXT: lfs 2, .LCPI92_4@toc@l(3) 5401; PC64LE9-NEXT: bl fminf 5402; PC64LE9-NEXT: nop 5403; PC64LE9-NEXT: xscvdpspn 34, 1 5404; PC64LE9-NEXT: xscvdpspn 35, 29 5405; PC64LE9-NEXT: addis 3, 2, .LCPI92_5@toc@ha 5406; PC64LE9-NEXT: addi 3, 3, .LCPI92_5@toc@l 5407; PC64LE9-NEXT: lxvx 36, 0, 3 5408; PC64LE9-NEXT: vmrghw 2, 3, 2 5409; PC64LE9-NEXT: xscvdpspn 35, 30 5410; PC64LE9-NEXT: vperm 2, 3, 2, 4 5411; PC64LE9-NEXT: addi 1, 1, 64 5412; PC64LE9-NEXT: ld 0, 16(1) 5413; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 5414; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 5415; PC64LE9-NEXT: mtlr 0 5416; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 5417; PC64LE9-NEXT: blr 5418entry: 5419 %min = call <3 x float> @llvm.experimental.constrained.minnum.v3f32( 5420 <3 x float> <float 43.0, float 44.0, float 45.0>, 5421 <3 x float> <float 41.0, float 42.0, float 43.0>, 5422 metadata !"fpexcept.strict") #1 5423 ret <3 x float> %min 5424} 5425 5426define <3 x double> @constrained_vector_min_v3f64() #0 { 5427; PC64LE-LABEL: constrained_vector_min_v3f64: 5428; PC64LE: # %bb.0: # %entry 5429; PC64LE-NEXT: mflr 0 5430; PC64LE-NEXT: std 0, 16(1) 5431; PC64LE-NEXT: stdu 1, -32(1) 5432; PC64LE-NEXT: addis 3, 2, .LCPI93_0@toc@ha 5433; PC64LE-NEXT: addis 4, 2, .LCPI93_1@toc@ha 5434; PC64LE-NEXT: lfs 1, .LCPI93_0@toc@l(3) 5435; PC64LE-NEXT: lfs 2, .LCPI93_1@toc@l(4) 5436; PC64LE-NEXT: bl fmin 5437; PC64LE-NEXT: nop 5438; PC64LE-NEXT: addis 3, 2, .LCPI93_2@toc@ha 5439; PC64LE-NEXT: addis 4, 2, .LCPI93_3@toc@ha 5440; PC64LE-NEXT: fmr 3, 1 5441; PC64LE-NEXT: addi 3, 3, .LCPI93_2@toc@l 5442; PC64LE-NEXT: addi 4, 4, .LCPI93_3@toc@l 5443; PC64LE-NEXT: lxvd2x 0, 0, 3 5444; PC64LE-NEXT: lxvd2x 2, 0, 4 5445; PC64LE-NEXT: xxswapd 0, 0 5446; PC64LE-NEXT: xxswapd 2, 2 5447; PC64LE-NEXT: xvmindp 2, 2, 0 5448; PC64LE-NEXT: xxswapd 0, 2 5449; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 5450; PC64LE-NEXT: fmr 1, 0 5451; PC64LE-NEXT: addi 1, 1, 32 5452; PC64LE-NEXT: ld 0, 16(1) 5453; PC64LE-NEXT: mtlr 0 5454; PC64LE-NEXT: blr 5455; 5456; PC64LE9-LABEL: constrained_vector_min_v3f64: 5457; PC64LE9: # %bb.0: # %entry 5458; PC64LE9-NEXT: mflr 0 5459; PC64LE9-NEXT: std 0, 16(1) 5460; PC64LE9-NEXT: stdu 1, -32(1) 5461; PC64LE9-NEXT: addis 3, 2, .LCPI93_0@toc@ha 5462; PC64LE9-NEXT: lfs 1, .LCPI93_0@toc@l(3) 5463; PC64LE9-NEXT: addis 3, 2, .LCPI93_1@toc@ha 5464; PC64LE9-NEXT: lfs 2, .LCPI93_1@toc@l(3) 5465; PC64LE9-NEXT: bl fmin 5466; PC64LE9-NEXT: nop 5467; PC64LE9-NEXT: addis 3, 2, .LCPI93_2@toc@ha 5468; PC64LE9-NEXT: fmr 3, 1 5469; PC64LE9-NEXT: addi 3, 3, .LCPI93_2@toc@l 5470; PC64LE9-NEXT: lxvx 0, 0, 3 5471; PC64LE9-NEXT: addis 3, 2, .LCPI93_3@toc@ha 5472; PC64LE9-NEXT: addi 3, 3, .LCPI93_3@toc@l 5473; PC64LE9-NEXT: lxvx 1, 0, 3 5474; PC64LE9-NEXT: xvmindp 2, 1, 0 5475; PC64LE9-NEXT: xxswapd 1, 2 5476; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 5477; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 5478; PC64LE9-NEXT: addi 1, 1, 32 5479; PC64LE9-NEXT: ld 0, 16(1) 5480; PC64LE9-NEXT: mtlr 0 5481; PC64LE9-NEXT: blr 5482entry: 5483 %min = call <3 x double> @llvm.experimental.constrained.minnum.v3f64( 5484 <3 x double> <double 43.0, double 44.0, double 45.0>, 5485 <3 x double> <double 40.0, double 41.0, double 42.0>, 5486 metadata !"fpexcept.strict") #1 5487 ret <3 x double> %min 5488} 5489 5490define <4 x double> @constrained_vector_minnum_v4f64() #0 { 5491; PC64LE-LABEL: constrained_vector_minnum_v4f64: 5492; PC64LE: # %bb.0: # %entry 5493; PC64LE-NEXT: addis 3, 2, .LCPI94_0@toc@ha 5494; PC64LE-NEXT: addis 4, 2, .LCPI94_1@toc@ha 5495; PC64LE-NEXT: addis 5, 2, .LCPI94_2@toc@ha 5496; PC64LE-NEXT: addis 6, 2, .LCPI94_3@toc@ha 5497; PC64LE-NEXT: addi 3, 3, .LCPI94_0@toc@l 5498; PC64LE-NEXT: addi 4, 4, .LCPI94_1@toc@l 5499; PC64LE-NEXT: lxvd2x 0, 0, 3 5500; PC64LE-NEXT: lxvd2x 1, 0, 4 5501; PC64LE-NEXT: addi 3, 5, .LCPI94_2@toc@l 5502; PC64LE-NEXT: addi 4, 6, .LCPI94_3@toc@l 5503; PC64LE-NEXT: lxvd2x 2, 0, 3 5504; PC64LE-NEXT: lxvd2x 3, 0, 4 5505; PC64LE-NEXT: xxswapd 0, 0 5506; PC64LE-NEXT: xxswapd 1, 1 5507; PC64LE-NEXT: xxswapd 2, 2 5508; PC64LE-NEXT: xxswapd 3, 3 5509; PC64LE-NEXT: xvmindp 34, 1, 0 5510; PC64LE-NEXT: xvmindp 35, 3, 2 5511; PC64LE-NEXT: blr 5512; 5513; PC64LE9-LABEL: constrained_vector_minnum_v4f64: 5514; PC64LE9: # %bb.0: # %entry 5515; PC64LE9-NEXT: addis 3, 2, .LCPI94_0@toc@ha 5516; PC64LE9-NEXT: addi 3, 3, .LCPI94_0@toc@l 5517; PC64LE9-NEXT: lxvx 0, 0, 3 5518; PC64LE9-NEXT: addis 3, 2, .LCPI94_1@toc@ha 5519; PC64LE9-NEXT: addi 3, 3, .LCPI94_1@toc@l 5520; PC64LE9-NEXT: lxvx 1, 0, 3 5521; PC64LE9-NEXT: addis 3, 2, .LCPI94_2@toc@ha 5522; PC64LE9-NEXT: addi 3, 3, .LCPI94_2@toc@l 5523; PC64LE9-NEXT: xvmindp 34, 1, 0 5524; PC64LE9-NEXT: lxvx 0, 0, 3 5525; PC64LE9-NEXT: addis 3, 2, .LCPI94_3@toc@ha 5526; PC64LE9-NEXT: addi 3, 3, .LCPI94_3@toc@l 5527; PC64LE9-NEXT: lxvx 1, 0, 3 5528; PC64LE9-NEXT: xvmindp 35, 1, 0 5529; PC64LE9-NEXT: blr 5530entry: 5531 %min = call <4 x double> @llvm.experimental.constrained.minnum.v4f64( 5532 <4 x double> <double 44.0, double 45.0, 5533 double 46.0, double 47.0>, 5534 <4 x double> <double 40.0, double 41.0, 5535 double 42.0, double 43.0>, 5536 metadata !"fpexcept.strict") #1 5537 ret <4 x double> %min 5538} 5539 5540define <1 x i32> @constrained_vector_fptosi_v1i32_v1f32() #0 { 5541; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f32: 5542; PC64LE: # %bb.0: # %entry 5543; PC64LE-NEXT: addis 3, 2, .LCPI95_0@toc@ha 5544; PC64LE-NEXT: lfs 0, .LCPI95_0@toc@l(3) 5545; PC64LE-NEXT: xscvdpsxws 0, 0 5546; PC64LE-NEXT: mffprwz 3, 0 5547; PC64LE-NEXT: blr 5548; 5549; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f32: 5550; PC64LE9: # %bb.0: # %entry 5551; PC64LE9-NEXT: addis 3, 2, .LCPI95_0@toc@ha 5552; PC64LE9-NEXT: lfs 0, .LCPI95_0@toc@l(3) 5553; PC64LE9-NEXT: xscvdpsxws 0, 0 5554; PC64LE9-NEXT: mffprwz 3, 0 5555; PC64LE9-NEXT: blr 5556entry: 5557 %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32( 5558 <1 x float><float 42.0>, 5559 metadata !"fpexcept.strict") #0 5560 ret <1 x i32> %result 5561} 5562 5563define <2 x i32> @constrained_vector_fptosi_v2i32_v2f32() #0 { 5564; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f32: 5565; PC64LE: # %bb.0: # %entry 5566; PC64LE-NEXT: addis 3, 2, .LCPI96_0@toc@ha 5567; PC64LE-NEXT: addis 4, 2, .LCPI96_1@toc@ha 5568; PC64LE-NEXT: lfs 0, .LCPI96_0@toc@l(3) 5569; PC64LE-NEXT: lfs 1, .LCPI96_1@toc@l(4) 5570; PC64LE-NEXT: xscvdpsxws 0, 0 5571; PC64LE-NEXT: xscvdpsxws 1, 1 5572; PC64LE-NEXT: mffprwz 3, 0 5573; PC64LE-NEXT: mffprwz 4, 1 5574; PC64LE-NEXT: mtvsrwz 34, 3 5575; PC64LE-NEXT: mtvsrwz 35, 4 5576; PC64LE-NEXT: vmrghw 2, 3, 2 5577; PC64LE-NEXT: blr 5578; 5579; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f32: 5580; PC64LE9: # %bb.0: # %entry 5581; PC64LE9-NEXT: addis 3, 2, .LCPI96_0@toc@ha 5582; PC64LE9-NEXT: lfs 0, .LCPI96_0@toc@l(3) 5583; PC64LE9-NEXT: xscvdpsxws 0, 0 5584; PC64LE9-NEXT: mffprwz 3, 0 5585; PC64LE9-NEXT: mtvsrwz 34, 3 5586; PC64LE9-NEXT: addis 3, 2, .LCPI96_1@toc@ha 5587; PC64LE9-NEXT: lfs 0, .LCPI96_1@toc@l(3) 5588; PC64LE9-NEXT: xscvdpsxws 0, 0 5589; PC64LE9-NEXT: mffprwz 3, 0 5590; PC64LE9-NEXT: mtvsrwz 35, 3 5591; PC64LE9-NEXT: vmrghw 2, 3, 2 5592; PC64LE9-NEXT: blr 5593entry: 5594 %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32( 5595 <2 x float><float 42.0, float 43.0>, 5596 metadata !"fpexcept.strict") #0 5597 ret <2 x i32> %result 5598} 5599 5600define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32() #0 { 5601; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f32: 5602; PC64LE: # %bb.0: # %entry 5603; PC64LE-NEXT: addis 3, 2, .LCPI97_0@toc@ha 5604; PC64LE-NEXT: addis 4, 2, .LCPI97_1@toc@ha 5605; PC64LE-NEXT: lfs 0, .LCPI97_0@toc@l(3) 5606; PC64LE-NEXT: lfs 1, .LCPI97_1@toc@l(4) 5607; PC64LE-NEXT: addis 3, 2, .LCPI97_3@toc@ha 5608; PC64LE-NEXT: lfs 2, .LCPI97_3@toc@l(3) 5609; PC64LE-NEXT: xscvdpsxws 0, 0 5610; PC64LE-NEXT: xscvdpsxws 1, 1 5611; PC64LE-NEXT: xscvdpsxws 2, 2 5612; PC64LE-NEXT: mffprwz 3, 0 5613; PC64LE-NEXT: mffprwz 4, 1 5614; PC64LE-NEXT: mtvsrwz 34, 3 5615; PC64LE-NEXT: addis 3, 2, .LCPI97_2@toc@ha 5616; PC64LE-NEXT: mtvsrwz 35, 4 5617; PC64LE-NEXT: addi 3, 3, .LCPI97_2@toc@l 5618; PC64LE-NEXT: mffprwz 4, 2 5619; PC64LE-NEXT: vmrghw 2, 3, 2 5620; PC64LE-NEXT: lvx 3, 0, 3 5621; PC64LE-NEXT: mtvsrwz 36, 4 5622; PC64LE-NEXT: vperm 2, 4, 2, 3 5623; PC64LE-NEXT: blr 5624; 5625; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f32: 5626; PC64LE9: # %bb.0: # %entry 5627; PC64LE9-NEXT: addis 3, 2, .LCPI97_0@toc@ha 5628; PC64LE9-NEXT: lfs 0, .LCPI97_0@toc@l(3) 5629; PC64LE9-NEXT: addis 3, 2, .LCPI97_1@toc@ha 5630; PC64LE9-NEXT: lfs 1, .LCPI97_1@toc@l(3) 5631; PC64LE9-NEXT: xscvdpsxws 0, 0 5632; PC64LE9-NEXT: mffprwz 3, 0 5633; PC64LE9-NEXT: xscvdpsxws 0, 1 5634; PC64LE9-NEXT: mtvsrwz 34, 3 5635; PC64LE9-NEXT: mffprwz 3, 0 5636; PC64LE9-NEXT: mtvsrwz 35, 3 5637; PC64LE9-NEXT: addis 3, 2, .LCPI97_2@toc@ha 5638; PC64LE9-NEXT: addi 3, 3, .LCPI97_2@toc@l 5639; PC64LE9-NEXT: vmrghw 2, 3, 2 5640; PC64LE9-NEXT: lxvx 35, 0, 3 5641; PC64LE9-NEXT: addis 3, 2, .LCPI97_3@toc@ha 5642; PC64LE9-NEXT: lfs 0, .LCPI97_3@toc@l(3) 5643; PC64LE9-NEXT: xscvdpsxws 0, 0 5644; PC64LE9-NEXT: mffprwz 3, 0 5645; PC64LE9-NEXT: mtvsrwz 36, 3 5646; PC64LE9-NEXT: vperm 2, 4, 2, 3 5647; PC64LE9-NEXT: blr 5648entry: 5649 %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32( 5650 <3 x float><float 42.0, float 43.0, 5651 float 44.0>, 5652 metadata !"fpexcept.strict") #0 5653 ret <3 x i32> %result 5654} 5655 5656define <4 x i32> @constrained_vector_fptosi_v4i32_v4f32() #0 { 5657; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f32: 5658; PC64LE: # %bb.0: # %entry 5659; PC64LE-NEXT: addis 3, 2, .LCPI98_0@toc@ha 5660; PC64LE-NEXT: addi 3, 3, .LCPI98_0@toc@l 5661; PC64LE-NEXT: lvx 2, 0, 3 5662; PC64LE-NEXT: xvcvspsxws 34, 34 5663; PC64LE-NEXT: blr 5664; 5665; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f32: 5666; PC64LE9: # %bb.0: # %entry 5667; PC64LE9-NEXT: addis 3, 2, .LCPI98_0@toc@ha 5668; PC64LE9-NEXT: addi 3, 3, .LCPI98_0@toc@l 5669; PC64LE9-NEXT: lxvx 0, 0, 3 5670; PC64LE9-NEXT: xvcvspsxws 34, 0 5671; PC64LE9-NEXT: blr 5672entry: 5673 %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32( 5674 <4 x float><float 42.0, float 43.0, 5675 float 44.0, float 45.0>, 5676 metadata !"fpexcept.strict") #0 5677 ret <4 x i32> %result 5678} 5679 5680define <1 x i64> @constrained_vector_fptosi_v1i64_v1f32() #0 { 5681; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f32: 5682; PC64LE: # %bb.0: # %entry 5683; PC64LE-NEXT: addis 3, 2, .LCPI99_0@toc@ha 5684; PC64LE-NEXT: lfs 0, .LCPI99_0@toc@l(3) 5685; PC64LE-NEXT: xscvdpsxds 0, 0 5686; PC64LE-NEXT: mffprd 3, 0 5687; PC64LE-NEXT: blr 5688; 5689; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f32: 5690; PC64LE9: # %bb.0: # %entry 5691; PC64LE9-NEXT: addis 3, 2, .LCPI99_0@toc@ha 5692; PC64LE9-NEXT: lfs 0, .LCPI99_0@toc@l(3) 5693; PC64LE9-NEXT: xscvdpsxds 0, 0 5694; PC64LE9-NEXT: mffprd 3, 0 5695; PC64LE9-NEXT: blr 5696entry: 5697 %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32( 5698 <1 x float><float 42.0>, 5699 metadata !"fpexcept.strict") #0 5700 ret <1 x i64> %result 5701} 5702 5703define <2 x i64> @constrained_vector_fptosi_v2i64_v2f32() #0 { 5704; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f32: 5705; PC64LE: # %bb.0: # %entry 5706; PC64LE-NEXT: addis 3, 2, .LCPI100_0@toc@ha 5707; PC64LE-NEXT: addis 4, 2, .LCPI100_1@toc@ha 5708; PC64LE-NEXT: lfs 0, .LCPI100_0@toc@l(3) 5709; PC64LE-NEXT: lfs 1, .LCPI100_1@toc@l(4) 5710; PC64LE-NEXT: xscvdpsxds 0, 0 5711; PC64LE-NEXT: xscvdpsxds 1, 1 5712; PC64LE-NEXT: mffprd 3, 0 5713; PC64LE-NEXT: mffprd 4, 1 5714; PC64LE-NEXT: mtfprd 0, 3 5715; PC64LE-NEXT: mtfprd 1, 4 5716; PC64LE-NEXT: xxmrghd 34, 1, 0 5717; PC64LE-NEXT: blr 5718; 5719; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f32: 5720; PC64LE9: # %bb.0: # %entry 5721; PC64LE9-NEXT: addis 3, 2, .LCPI100_0@toc@ha 5722; PC64LE9-NEXT: addis 4, 2, .LCPI100_1@toc@ha 5723; PC64LE9-NEXT: lfs 0, .LCPI100_0@toc@l(3) 5724; PC64LE9-NEXT: xscvdpsxds 0, 0 5725; PC64LE9-NEXT: mffprd 3, 0 5726; PC64LE9-NEXT: lfs 0, .LCPI100_1@toc@l(4) 5727; PC64LE9-NEXT: xscvdpsxds 0, 0 5728; PC64LE9-NEXT: mffprd 4, 0 5729; PC64LE9-NEXT: mtvsrdd 34, 4, 3 5730; PC64LE9-NEXT: blr 5731entry: 5732 %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32( 5733 <2 x float><float 42.0, float 43.0>, 5734 metadata !"fpexcept.strict") #0 5735 ret <2 x i64> %result 5736} 5737 5738define <3 x i64> @constrained_vector_fptosi_v3i64_v3f32() #0 { 5739; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f32: 5740; PC64LE: # %bb.0: # %entry 5741; PC64LE-NEXT: addis 3, 2, .LCPI101_0@toc@ha 5742; PC64LE-NEXT: addis 4, 2, .LCPI101_1@toc@ha 5743; PC64LE-NEXT: addis 5, 2, .LCPI101_2@toc@ha 5744; PC64LE-NEXT: lfs 0, .LCPI101_0@toc@l(3) 5745; PC64LE-NEXT: lfs 1, .LCPI101_1@toc@l(4) 5746; PC64LE-NEXT: lfs 2, .LCPI101_2@toc@l(5) 5747; PC64LE-NEXT: xscvdpsxds 0, 0 5748; PC64LE-NEXT: xscvdpsxds 1, 1 5749; PC64LE-NEXT: xscvdpsxds 2, 2 5750; PC64LE-NEXT: mffprd 3, 0 5751; PC64LE-NEXT: mffprd 4, 1 5752; PC64LE-NEXT: mffprd 5, 2 5753; PC64LE-NEXT: blr 5754; 5755; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f32: 5756; PC64LE9: # %bb.0: # %entry 5757; PC64LE9-NEXT: addis 3, 2, .LCPI101_0@toc@ha 5758; PC64LE9-NEXT: addis 4, 2, .LCPI101_1@toc@ha 5759; PC64LE9-NEXT: addis 5, 2, .LCPI101_2@toc@ha 5760; PC64LE9-NEXT: lfs 0, .LCPI101_0@toc@l(3) 5761; PC64LE9-NEXT: xscvdpsxds 0, 0 5762; PC64LE9-NEXT: mffprd 3, 0 5763; PC64LE9-NEXT: lfs 0, .LCPI101_1@toc@l(4) 5764; PC64LE9-NEXT: xscvdpsxds 0, 0 5765; PC64LE9-NEXT: mffprd 4, 0 5766; PC64LE9-NEXT: lfs 0, .LCPI101_2@toc@l(5) 5767; PC64LE9-NEXT: xscvdpsxds 0, 0 5768; PC64LE9-NEXT: mffprd 5, 0 5769; PC64LE9-NEXT: blr 5770entry: 5771 %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32( 5772 <3 x float><float 42.0, float 43.0, 5773 float 44.0>, 5774 metadata !"fpexcept.strict") #0 5775 ret <3 x i64> %result 5776} 5777 5778define <4 x i64> @constrained_vector_fptosi_v4i64_v4f32() #0 { 5779; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f32: 5780; PC64LE: # %bb.0: # %entry 5781; PC64LE-NEXT: addis 3, 2, .LCPI102_0@toc@ha 5782; PC64LE-NEXT: addis 4, 2, .LCPI102_1@toc@ha 5783; PC64LE-NEXT: lfs 0, .LCPI102_0@toc@l(3) 5784; PC64LE-NEXT: addis 3, 2, .LCPI102_2@toc@ha 5785; PC64LE-NEXT: lfs 1, .LCPI102_1@toc@l(4) 5786; PC64LE-NEXT: addis 4, 2, .LCPI102_3@toc@ha 5787; PC64LE-NEXT: lfs 2, .LCPI102_2@toc@l(3) 5788; PC64LE-NEXT: lfs 3, .LCPI102_3@toc@l(4) 5789; PC64LE-NEXT: xscvdpsxds 0, 0 5790; PC64LE-NEXT: xscvdpsxds 1, 1 5791; PC64LE-NEXT: xscvdpsxds 2, 2 5792; PC64LE-NEXT: xscvdpsxds 3, 3 5793; PC64LE-NEXT: mffprd 3, 0 5794; PC64LE-NEXT: mffprd 4, 1 5795; PC64LE-NEXT: mtfprd 0, 3 5796; PC64LE-NEXT: mffprd 3, 2 5797; PC64LE-NEXT: mtfprd 1, 4 5798; PC64LE-NEXT: mffprd 4, 3 5799; PC64LE-NEXT: mtfprd 2, 3 5800; PC64LE-NEXT: xxmrghd 34, 1, 0 5801; PC64LE-NEXT: mtfprd 3, 4 5802; PC64LE-NEXT: xxmrghd 35, 3, 2 5803; PC64LE-NEXT: blr 5804; 5805; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f32: 5806; PC64LE9: # %bb.0: # %entry 5807; PC64LE9-NEXT: addis 3, 2, .LCPI102_0@toc@ha 5808; PC64LE9-NEXT: addis 4, 2, .LCPI102_1@toc@ha 5809; PC64LE9-NEXT: lfs 0, .LCPI102_0@toc@l(3) 5810; PC64LE9-NEXT: xscvdpsxds 0, 0 5811; PC64LE9-NEXT: mffprd 3, 0 5812; PC64LE9-NEXT: lfs 0, .LCPI102_1@toc@l(4) 5813; PC64LE9-NEXT: xscvdpsxds 0, 0 5814; PC64LE9-NEXT: mffprd 4, 0 5815; PC64LE9-NEXT: mtvsrdd 34, 4, 3 5816; PC64LE9-NEXT: addis 3, 2, .LCPI102_2@toc@ha 5817; PC64LE9-NEXT: addis 4, 2, .LCPI102_3@toc@ha 5818; PC64LE9-NEXT: lfs 0, .LCPI102_2@toc@l(3) 5819; PC64LE9-NEXT: xscvdpsxds 0, 0 5820; PC64LE9-NEXT: mffprd 3, 0 5821; PC64LE9-NEXT: lfs 0, .LCPI102_3@toc@l(4) 5822; PC64LE9-NEXT: xscvdpsxds 0, 0 5823; PC64LE9-NEXT: mffprd 4, 0 5824; PC64LE9-NEXT: mtvsrdd 35, 4, 3 5825; PC64LE9-NEXT: blr 5826entry: 5827 %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32( 5828 <4 x float><float 42.0, float 43.0, 5829 float 44.0, float 45.0>, 5830 metadata !"fpexcept.strict") #0 5831 ret <4 x i64> %result 5832} 5833 5834define <1 x i32> @constrained_vector_fptosi_v1i32_v1f64() #0 { 5835; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f64: 5836; PC64LE: # %bb.0: # %entry 5837; PC64LE-NEXT: addis 3, 2, .LCPI103_0@toc@ha 5838; PC64LE-NEXT: lfd 0, .LCPI103_0@toc@l(3) 5839; PC64LE-NEXT: xscvdpsxws 0, 0 5840; PC64LE-NEXT: mffprwz 3, 0 5841; PC64LE-NEXT: blr 5842; 5843; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f64: 5844; PC64LE9: # %bb.0: # %entry 5845; PC64LE9-NEXT: addis 3, 2, .LCPI103_0@toc@ha 5846; PC64LE9-NEXT: lfd 0, .LCPI103_0@toc@l(3) 5847; PC64LE9-NEXT: xscvdpsxws 0, 0 5848; PC64LE9-NEXT: mffprwz 3, 0 5849; PC64LE9-NEXT: blr 5850entry: 5851 %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64( 5852 <1 x double><double 42.1>, 5853 metadata !"fpexcept.strict") #0 5854 ret <1 x i32> %result 5855} 5856 5857 5858define <2 x i32> @constrained_vector_fptosi_v2i32_v2f64() #0 { 5859; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f64: 5860; PC64LE: # %bb.0: # %entry 5861; PC64LE-NEXT: addis 3, 2, .LCPI104_0@toc@ha 5862; PC64LE-NEXT: addis 4, 2, .LCPI104_1@toc@ha 5863; PC64LE-NEXT: lfd 0, .LCPI104_0@toc@l(3) 5864; PC64LE-NEXT: lfd 1, .LCPI104_1@toc@l(4) 5865; PC64LE-NEXT: xscvdpsxws 0, 0 5866; PC64LE-NEXT: xscvdpsxws 1, 1 5867; PC64LE-NEXT: mffprwz 3, 0 5868; PC64LE-NEXT: mffprwz 4, 1 5869; PC64LE-NEXT: mtvsrwz 34, 3 5870; PC64LE-NEXT: mtvsrwz 35, 4 5871; PC64LE-NEXT: vmrghw 2, 3, 2 5872; PC64LE-NEXT: blr 5873; 5874; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f64: 5875; PC64LE9: # %bb.0: # %entry 5876; PC64LE9-NEXT: addis 3, 2, .LCPI104_0@toc@ha 5877; PC64LE9-NEXT: lfd 0, .LCPI104_0@toc@l(3) 5878; PC64LE9-NEXT: xscvdpsxws 0, 0 5879; PC64LE9-NEXT: mffprwz 3, 0 5880; PC64LE9-NEXT: mtvsrwz 34, 3 5881; PC64LE9-NEXT: addis 3, 2, .LCPI104_1@toc@ha 5882; PC64LE9-NEXT: lfd 0, .LCPI104_1@toc@l(3) 5883; PC64LE9-NEXT: xscvdpsxws 0, 0 5884; PC64LE9-NEXT: mffprwz 3, 0 5885; PC64LE9-NEXT: mtvsrwz 35, 3 5886; PC64LE9-NEXT: vmrghw 2, 3, 2 5887; PC64LE9-NEXT: blr 5888entry: 5889 %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64( 5890 <2 x double><double 42.1, double 42.2>, 5891 metadata !"fpexcept.strict") #0 5892 ret <2 x i32> %result 5893} 5894 5895define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64() #0 { 5896; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f64: 5897; PC64LE: # %bb.0: # %entry 5898; PC64LE-NEXT: addis 3, 2, .LCPI105_0@toc@ha 5899; PC64LE-NEXT: addis 4, 2, .LCPI105_1@toc@ha 5900; PC64LE-NEXT: lfd 0, .LCPI105_0@toc@l(3) 5901; PC64LE-NEXT: lfd 1, .LCPI105_1@toc@l(4) 5902; PC64LE-NEXT: addis 3, 2, .LCPI105_3@toc@ha 5903; PC64LE-NEXT: lfd 2, .LCPI105_3@toc@l(3) 5904; PC64LE-NEXT: xscvdpsxws 0, 0 5905; PC64LE-NEXT: xscvdpsxws 1, 1 5906; PC64LE-NEXT: xscvdpsxws 2, 2 5907; PC64LE-NEXT: mffprwz 3, 0 5908; PC64LE-NEXT: mffprwz 4, 1 5909; PC64LE-NEXT: mtvsrwz 34, 3 5910; PC64LE-NEXT: addis 3, 2, .LCPI105_2@toc@ha 5911; PC64LE-NEXT: mtvsrwz 35, 4 5912; PC64LE-NEXT: addi 3, 3, .LCPI105_2@toc@l 5913; PC64LE-NEXT: mffprwz 4, 2 5914; PC64LE-NEXT: vmrghw 2, 3, 2 5915; PC64LE-NEXT: lvx 3, 0, 3 5916; PC64LE-NEXT: mtvsrwz 36, 4 5917; PC64LE-NEXT: vperm 2, 4, 2, 3 5918; PC64LE-NEXT: blr 5919; 5920; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f64: 5921; PC64LE9: # %bb.0: # %entry 5922; PC64LE9-NEXT: addis 3, 2, .LCPI105_0@toc@ha 5923; PC64LE9-NEXT: lfd 0, .LCPI105_0@toc@l(3) 5924; PC64LE9-NEXT: xscvdpsxws 0, 0 5925; PC64LE9-NEXT: mffprwz 3, 0 5926; PC64LE9-NEXT: mtvsrwz 34, 3 5927; PC64LE9-NEXT: addis 3, 2, .LCPI105_1@toc@ha 5928; PC64LE9-NEXT: lfd 0, .LCPI105_1@toc@l(3) 5929; PC64LE9-NEXT: xscvdpsxws 0, 0 5930; PC64LE9-NEXT: mffprwz 3, 0 5931; PC64LE9-NEXT: mtvsrwz 35, 3 5932; PC64LE9-NEXT: addis 3, 2, .LCPI105_2@toc@ha 5933; PC64LE9-NEXT: addi 3, 3, .LCPI105_2@toc@l 5934; PC64LE9-NEXT: vmrghw 2, 3, 2 5935; PC64LE9-NEXT: lxvx 35, 0, 3 5936; PC64LE9-NEXT: addis 3, 2, .LCPI105_3@toc@ha 5937; PC64LE9-NEXT: lfd 0, .LCPI105_3@toc@l(3) 5938; PC64LE9-NEXT: xscvdpsxws 0, 0 5939; PC64LE9-NEXT: mffprwz 3, 0 5940; PC64LE9-NEXT: mtvsrwz 36, 3 5941; PC64LE9-NEXT: vperm 2, 4, 2, 3 5942; PC64LE9-NEXT: blr 5943entry: 5944 %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64( 5945 <3 x double><double 42.1, double 42.2, 5946 double 42.3>, 5947 metadata !"fpexcept.strict") #0 5948 ret <3 x i32> %result 5949} 5950 5951define <4 x i32> @constrained_vector_fptosi_v4i32_v4f64() #0 { 5952; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f64: 5953; PC64LE: # %bb.0: # %entry 5954; PC64LE-NEXT: addis 3, 2, .LCPI106_0@toc@ha 5955; PC64LE-NEXT: addis 4, 2, .LCPI106_1@toc@ha 5956; PC64LE-NEXT: addis 5, 2, .LCPI106_2@toc@ha 5957; PC64LE-NEXT: lfd 0, .LCPI106_0@toc@l(3) 5958; PC64LE-NEXT: addis 3, 2, .LCPI106_3@toc@ha 5959; PC64LE-NEXT: lfd 1, .LCPI106_1@toc@l(4) 5960; PC64LE-NEXT: lfd 2, .LCPI106_2@toc@l(5) 5961; PC64LE-NEXT: lfd 3, .LCPI106_3@toc@l(3) 5962; PC64LE-NEXT: xscvdpsxws 0, 0 5963; PC64LE-NEXT: xscvdpsxws 1, 1 5964; PC64LE-NEXT: xscvdpsxws 2, 2 5965; PC64LE-NEXT: xscvdpsxws 3, 3 5966; PC64LE-NEXT: mffprwz 3, 0 5967; PC64LE-NEXT: mffprwz 4, 1 5968; PC64LE-NEXT: mffprwz 5, 2 5969; PC64LE-NEXT: mffprwz 6, 3 5970; PC64LE-NEXT: rldimi 4, 3, 32, 0 5971; PC64LE-NEXT: mtfprd 0, 4 5972; PC64LE-NEXT: rldimi 6, 5, 32, 0 5973; PC64LE-NEXT: mtfprd 1, 6 5974; PC64LE-NEXT: xxmrghd 34, 1, 0 5975; PC64LE-NEXT: blr 5976; 5977; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f64: 5978; PC64LE9: # %bb.0: # %entry 5979; PC64LE9-NEXT: addis 3, 2, .LCPI106_0@toc@ha 5980; PC64LE9-NEXT: addis 4, 2, .LCPI106_1@toc@ha 5981; PC64LE9-NEXT: addis 5, 2, .LCPI106_3@toc@ha 5982; PC64LE9-NEXT: lfd 0, .LCPI106_0@toc@l(3) 5983; PC64LE9-NEXT: xscvdpsxws 0, 0 5984; PC64LE9-NEXT: mffprwz 3, 0 5985; PC64LE9-NEXT: lfd 0, .LCPI106_1@toc@l(4) 5986; PC64LE9-NEXT: xscvdpsxws 0, 0 5987; PC64LE9-NEXT: mffprwz 4, 0 5988; PC64LE9-NEXT: rldimi 4, 3, 32, 0 5989; PC64LE9-NEXT: addis 3, 2, .LCPI106_2@toc@ha 5990; PC64LE9-NEXT: lfd 0, .LCPI106_2@toc@l(3) 5991; PC64LE9-NEXT: xscvdpsxws 0, 0 5992; PC64LE9-NEXT: mffprwz 3, 0 5993; PC64LE9-NEXT: lfd 0, .LCPI106_3@toc@l(5) 5994; PC64LE9-NEXT: xscvdpsxws 0, 0 5995; PC64LE9-NEXT: mffprwz 5, 0 5996; PC64LE9-NEXT: rldimi 5, 3, 32, 0 5997; PC64LE9-NEXT: mtvsrdd 34, 5, 4 5998; PC64LE9-NEXT: blr 5999entry: 6000 %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64( 6001 <4 x double><double 42.1, double 42.2, 6002 double 42.3, double 42.4>, 6003 metadata !"fpexcept.strict") #0 6004 ret <4 x i32> %result 6005} 6006 6007define <1 x i64> @constrained_vector_fptosi_v1i64_v1f64() #0 { 6008; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f64: 6009; PC64LE: # %bb.0: # %entry 6010; PC64LE-NEXT: addis 3, 2, .LCPI107_0@toc@ha 6011; PC64LE-NEXT: lfd 0, .LCPI107_0@toc@l(3) 6012; PC64LE-NEXT: xscvdpsxds 0, 0 6013; PC64LE-NEXT: mffprd 3, 0 6014; PC64LE-NEXT: blr 6015; 6016; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f64: 6017; PC64LE9: # %bb.0: # %entry 6018; PC64LE9-NEXT: addis 3, 2, .LCPI107_0@toc@ha 6019; PC64LE9-NEXT: lfd 0, .LCPI107_0@toc@l(3) 6020; PC64LE9-NEXT: xscvdpsxds 0, 0 6021; PC64LE9-NEXT: mffprd 3, 0 6022; PC64LE9-NEXT: blr 6023entry: 6024 %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64( 6025 <1 x double><double 42.1>, 6026 metadata !"fpexcept.strict") #0 6027 ret <1 x i64> %result 6028} 6029 6030define <2 x i64> @constrained_vector_fptosi_v2i64_v2f64() #0 { 6031; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f64: 6032; PC64LE: # %bb.0: # %entry 6033; PC64LE-NEXT: addis 3, 2, .LCPI108_0@toc@ha 6034; PC64LE-NEXT: addi 3, 3, .LCPI108_0@toc@l 6035; PC64LE-NEXT: lxvd2x 0, 0, 3 6036; PC64LE-NEXT: xxswapd 0, 0 6037; PC64LE-NEXT: xvcvdpsxds 34, 0 6038; PC64LE-NEXT: blr 6039; 6040; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f64: 6041; PC64LE9: # %bb.0: # %entry 6042; PC64LE9-NEXT: addis 3, 2, .LCPI108_0@toc@ha 6043; PC64LE9-NEXT: addi 3, 3, .LCPI108_0@toc@l 6044; PC64LE9-NEXT: lxvx 0, 0, 3 6045; PC64LE9-NEXT: xvcvdpsxds 34, 0 6046; PC64LE9-NEXT: blr 6047entry: 6048 %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64( 6049 <2 x double><double 42.1, double 42.2>, 6050 metadata !"fpexcept.strict") #0 6051 ret <2 x i64> %result 6052} 6053 6054define <3 x i64> @constrained_vector_fptosi_v3i64_v3f64() #0 { 6055; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f64: 6056; PC64LE: # %bb.0: # %entry 6057; PC64LE-NEXT: addis 3, 2, .LCPI109_0@toc@ha 6058; PC64LE-NEXT: addis 4, 2, .LCPI109_1@toc@ha 6059; PC64LE-NEXT: addis 5, 2, .LCPI109_2@toc@ha 6060; PC64LE-NEXT: lfd 0, .LCPI109_0@toc@l(3) 6061; PC64LE-NEXT: lfd 1, .LCPI109_1@toc@l(4) 6062; PC64LE-NEXT: lfd 2, .LCPI109_2@toc@l(5) 6063; PC64LE-NEXT: xscvdpsxds 0, 0 6064; PC64LE-NEXT: xscvdpsxds 1, 1 6065; PC64LE-NEXT: xscvdpsxds 2, 2 6066; PC64LE-NEXT: mffprd 3, 0 6067; PC64LE-NEXT: mffprd 4, 1 6068; PC64LE-NEXT: mffprd 5, 2 6069; PC64LE-NEXT: blr 6070; 6071; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f64: 6072; PC64LE9: # %bb.0: # %entry 6073; PC64LE9-NEXT: addis 3, 2, .LCPI109_0@toc@ha 6074; PC64LE9-NEXT: addis 4, 2, .LCPI109_1@toc@ha 6075; PC64LE9-NEXT: addis 5, 2, .LCPI109_2@toc@ha 6076; PC64LE9-NEXT: lfd 0, .LCPI109_0@toc@l(3) 6077; PC64LE9-NEXT: xscvdpsxds 0, 0 6078; PC64LE9-NEXT: mffprd 3, 0 6079; PC64LE9-NEXT: lfd 0, .LCPI109_1@toc@l(4) 6080; PC64LE9-NEXT: xscvdpsxds 0, 0 6081; PC64LE9-NEXT: mffprd 4, 0 6082; PC64LE9-NEXT: lfd 0, .LCPI109_2@toc@l(5) 6083; PC64LE9-NEXT: xscvdpsxds 0, 0 6084; PC64LE9-NEXT: mffprd 5, 0 6085; PC64LE9-NEXT: blr 6086entry: 6087 %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64( 6088 <3 x double><double 42.1, double 42.2, 6089 double 42.3>, 6090 metadata !"fpexcept.strict") #0 6091 ret <3 x i64> %result 6092} 6093 6094define <4 x i64> @constrained_vector_fptosi_v4i64_v4f64() #0 { 6095; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f64: 6096; PC64LE: # %bb.0: # %entry 6097; PC64LE-NEXT: addis 3, 2, .LCPI110_0@toc@ha 6098; PC64LE-NEXT: addis 4, 2, .LCPI110_1@toc@ha 6099; PC64LE-NEXT: addi 3, 3, .LCPI110_0@toc@l 6100; PC64LE-NEXT: lxvd2x 0, 0, 3 6101; PC64LE-NEXT: addi 3, 4, .LCPI110_1@toc@l 6102; PC64LE-NEXT: lxvd2x 1, 0, 3 6103; PC64LE-NEXT: xxswapd 0, 0 6104; PC64LE-NEXT: xxswapd 1, 1 6105; PC64LE-NEXT: xvcvdpsxds 35, 0 6106; PC64LE-NEXT: xvcvdpsxds 34, 1 6107; PC64LE-NEXT: blr 6108; 6109; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f64: 6110; PC64LE9: # %bb.0: # %entry 6111; PC64LE9-NEXT: addis 3, 2, .LCPI110_0@toc@ha 6112; PC64LE9-NEXT: addi 3, 3, .LCPI110_0@toc@l 6113; PC64LE9-NEXT: lxvx 0, 0, 3 6114; PC64LE9-NEXT: addis 3, 2, .LCPI110_1@toc@ha 6115; PC64LE9-NEXT: addi 3, 3, .LCPI110_1@toc@l 6116; PC64LE9-NEXT: xvcvdpsxds 35, 0 6117; PC64LE9-NEXT: lxvx 0, 0, 3 6118; PC64LE9-NEXT: xvcvdpsxds 34, 0 6119; PC64LE9-NEXT: blr 6120entry: 6121 %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64( 6122 <4 x double><double 42.1, double 42.2, 6123 double 42.3, double 42.4>, 6124 metadata !"fpexcept.strict") #0 6125 ret <4 x i64> %result 6126} 6127 6128define <1 x i32> @constrained_vector_fptoui_v1i32_v1f32() #0 { 6129; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f32: 6130; PC64LE: # %bb.0: # %entry 6131; PC64LE-NEXT: addis 3, 2, .LCPI111_0@toc@ha 6132; PC64LE-NEXT: lfs 0, .LCPI111_0@toc@l(3) 6133; PC64LE-NEXT: xscvdpuxws 0, 0 6134; PC64LE-NEXT: mffprwz 3, 0 6135; PC64LE-NEXT: blr 6136; 6137; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f32: 6138; PC64LE9: # %bb.0: # %entry 6139; PC64LE9-NEXT: addis 3, 2, .LCPI111_0@toc@ha 6140; PC64LE9-NEXT: lfs 0, .LCPI111_0@toc@l(3) 6141; PC64LE9-NEXT: xscvdpuxws 0, 0 6142; PC64LE9-NEXT: mffprwz 3, 0 6143; PC64LE9-NEXT: blr 6144entry: 6145 %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32( 6146 <1 x float><float 42.0>, 6147 metadata !"fpexcept.strict") #0 6148 ret <1 x i32> %result 6149} 6150 6151define <2 x i32> @constrained_vector_fptoui_v2i32_v2f32() #0 { 6152; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f32: 6153; PC64LE: # %bb.0: # %entry 6154; PC64LE-NEXT: addis 3, 2, .LCPI112_0@toc@ha 6155; PC64LE-NEXT: addis 4, 2, .LCPI112_1@toc@ha 6156; PC64LE-NEXT: lfs 0, .LCPI112_0@toc@l(3) 6157; PC64LE-NEXT: lfs 1, .LCPI112_1@toc@l(4) 6158; PC64LE-NEXT: xscvdpuxws 0, 0 6159; PC64LE-NEXT: xscvdpuxws 1, 1 6160; PC64LE-NEXT: mffprwz 3, 0 6161; PC64LE-NEXT: mffprwz 4, 1 6162; PC64LE-NEXT: mtvsrwz 34, 3 6163; PC64LE-NEXT: mtvsrwz 35, 4 6164; PC64LE-NEXT: vmrghw 2, 3, 2 6165; PC64LE-NEXT: blr 6166; 6167; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f32: 6168; PC64LE9: # %bb.0: # %entry 6169; PC64LE9-NEXT: addis 3, 2, .LCPI112_0@toc@ha 6170; PC64LE9-NEXT: lfs 0, .LCPI112_0@toc@l(3) 6171; PC64LE9-NEXT: xscvdpuxws 0, 0 6172; PC64LE9-NEXT: mffprwz 3, 0 6173; PC64LE9-NEXT: mtvsrwz 34, 3 6174; PC64LE9-NEXT: addis 3, 2, .LCPI112_1@toc@ha 6175; PC64LE9-NEXT: lfs 0, .LCPI112_1@toc@l(3) 6176; PC64LE9-NEXT: xscvdpuxws 0, 0 6177; PC64LE9-NEXT: mffprwz 3, 0 6178; PC64LE9-NEXT: mtvsrwz 35, 3 6179; PC64LE9-NEXT: vmrghw 2, 3, 2 6180; PC64LE9-NEXT: blr 6181entry: 6182 %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32( 6183 <2 x float><float 42.0, float 43.0>, 6184 metadata !"fpexcept.strict") #0 6185 ret <2 x i32> %result 6186} 6187 6188define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32() #0 { 6189; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f32: 6190; PC64LE: # %bb.0: # %entry 6191; PC64LE-NEXT: addis 3, 2, .LCPI113_0@toc@ha 6192; PC64LE-NEXT: addis 4, 2, .LCPI113_1@toc@ha 6193; PC64LE-NEXT: lfs 0, .LCPI113_0@toc@l(3) 6194; PC64LE-NEXT: lfs 1, .LCPI113_1@toc@l(4) 6195; PC64LE-NEXT: addis 3, 2, .LCPI113_3@toc@ha 6196; PC64LE-NEXT: lfs 2, .LCPI113_3@toc@l(3) 6197; PC64LE-NEXT: xscvdpuxws 0, 0 6198; PC64LE-NEXT: xscvdpuxws 1, 1 6199; PC64LE-NEXT: xscvdpuxws 2, 2 6200; PC64LE-NEXT: mffprwz 3, 0 6201; PC64LE-NEXT: mffprwz 4, 1 6202; PC64LE-NEXT: mtvsrwz 34, 3 6203; PC64LE-NEXT: addis 3, 2, .LCPI113_2@toc@ha 6204; PC64LE-NEXT: mtvsrwz 35, 4 6205; PC64LE-NEXT: addi 3, 3, .LCPI113_2@toc@l 6206; PC64LE-NEXT: mffprwz 4, 2 6207; PC64LE-NEXT: vmrghw 2, 3, 2 6208; PC64LE-NEXT: lvx 3, 0, 3 6209; PC64LE-NEXT: mtvsrwz 36, 4 6210; PC64LE-NEXT: vperm 2, 4, 2, 3 6211; PC64LE-NEXT: blr 6212; 6213; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f32: 6214; PC64LE9: # %bb.0: # %entry 6215; PC64LE9-NEXT: addis 3, 2, .LCPI113_0@toc@ha 6216; PC64LE9-NEXT: lfs 0, .LCPI113_0@toc@l(3) 6217; PC64LE9-NEXT: addis 3, 2, .LCPI113_1@toc@ha 6218; PC64LE9-NEXT: lfs 1, .LCPI113_1@toc@l(3) 6219; PC64LE9-NEXT: xscvdpuxws 0, 0 6220; PC64LE9-NEXT: mffprwz 3, 0 6221; PC64LE9-NEXT: xscvdpuxws 0, 1 6222; PC64LE9-NEXT: mtvsrwz 34, 3 6223; PC64LE9-NEXT: mffprwz 3, 0 6224; PC64LE9-NEXT: mtvsrwz 35, 3 6225; PC64LE9-NEXT: addis 3, 2, .LCPI113_2@toc@ha 6226; PC64LE9-NEXT: addi 3, 3, .LCPI113_2@toc@l 6227; PC64LE9-NEXT: vmrghw 2, 3, 2 6228; PC64LE9-NEXT: lxvx 35, 0, 3 6229; PC64LE9-NEXT: addis 3, 2, .LCPI113_3@toc@ha 6230; PC64LE9-NEXT: lfs 0, .LCPI113_3@toc@l(3) 6231; PC64LE9-NEXT: xscvdpuxws 0, 0 6232; PC64LE9-NEXT: mffprwz 3, 0 6233; PC64LE9-NEXT: mtvsrwz 36, 3 6234; PC64LE9-NEXT: vperm 2, 4, 2, 3 6235; PC64LE9-NEXT: blr 6236entry: 6237 %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32( 6238 <3 x float><float 42.0, float 43.0, 6239 float 44.0>, 6240 metadata !"fpexcept.strict") #0 6241 ret <3 x i32> %result 6242} 6243 6244define <4 x i32> @constrained_vector_fptoui_v4i32_v4f32() #0 { 6245; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f32: 6246; PC64LE: # %bb.0: # %entry 6247; PC64LE-NEXT: addis 3, 2, .LCPI114_0@toc@ha 6248; PC64LE-NEXT: addi 3, 3, .LCPI114_0@toc@l 6249; PC64LE-NEXT: lvx 2, 0, 3 6250; PC64LE-NEXT: xvcvspuxws 34, 34 6251; PC64LE-NEXT: blr 6252; 6253; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f32: 6254; PC64LE9: # %bb.0: # %entry 6255; PC64LE9-NEXT: addis 3, 2, .LCPI114_0@toc@ha 6256; PC64LE9-NEXT: addi 3, 3, .LCPI114_0@toc@l 6257; PC64LE9-NEXT: lxvx 0, 0, 3 6258; PC64LE9-NEXT: xvcvspuxws 34, 0 6259; PC64LE9-NEXT: blr 6260entry: 6261 %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32( 6262 <4 x float><float 42.0, float 43.0, 6263 float 44.0, float 45.0>, 6264 metadata !"fpexcept.strict") #0 6265 ret <4 x i32> %result 6266} 6267 6268define <1 x i64> @constrained_vector_fptoui_v1i64_v1f32() #0 { 6269; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f32: 6270; PC64LE: # %bb.0: # %entry 6271; PC64LE-NEXT: addis 3, 2, .LCPI115_0@toc@ha 6272; PC64LE-NEXT: lfs 0, .LCPI115_0@toc@l(3) 6273; PC64LE-NEXT: xscvdpuxds 0, 0 6274; PC64LE-NEXT: mffprd 3, 0 6275; PC64LE-NEXT: blr 6276; 6277; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f32: 6278; PC64LE9: # %bb.0: # %entry 6279; PC64LE9-NEXT: addis 3, 2, .LCPI115_0@toc@ha 6280; PC64LE9-NEXT: lfs 0, .LCPI115_0@toc@l(3) 6281; PC64LE9-NEXT: xscvdpuxds 0, 0 6282; PC64LE9-NEXT: mffprd 3, 0 6283; PC64LE9-NEXT: blr 6284entry: 6285 %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32( 6286 <1 x float><float 42.0>, 6287 metadata !"fpexcept.strict") #0 6288 ret <1 x i64> %result 6289} 6290 6291define <2 x i64> @constrained_vector_fptoui_v2i64_v2f32() #0 { 6292; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f32: 6293; PC64LE: # %bb.0: # %entry 6294; PC64LE-NEXT: addis 3, 2, .LCPI116_0@toc@ha 6295; PC64LE-NEXT: addis 4, 2, .LCPI116_1@toc@ha 6296; PC64LE-NEXT: lfs 0, .LCPI116_0@toc@l(3) 6297; PC64LE-NEXT: lfs 1, .LCPI116_1@toc@l(4) 6298; PC64LE-NEXT: xscvdpuxds 0, 0 6299; PC64LE-NEXT: xscvdpuxds 1, 1 6300; PC64LE-NEXT: mffprd 3, 0 6301; PC64LE-NEXT: mffprd 4, 1 6302; PC64LE-NEXT: mtfprd 0, 3 6303; PC64LE-NEXT: mtfprd 1, 4 6304; PC64LE-NEXT: xxmrghd 34, 1, 0 6305; PC64LE-NEXT: blr 6306; 6307; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f32: 6308; PC64LE9: # %bb.0: # %entry 6309; PC64LE9-NEXT: addis 3, 2, .LCPI116_0@toc@ha 6310; PC64LE9-NEXT: addis 4, 2, .LCPI116_1@toc@ha 6311; PC64LE9-NEXT: lfs 0, .LCPI116_0@toc@l(3) 6312; PC64LE9-NEXT: xscvdpuxds 0, 0 6313; PC64LE9-NEXT: mffprd 3, 0 6314; PC64LE9-NEXT: lfs 0, .LCPI116_1@toc@l(4) 6315; PC64LE9-NEXT: xscvdpuxds 0, 0 6316; PC64LE9-NEXT: mffprd 4, 0 6317; PC64LE9-NEXT: mtvsrdd 34, 4, 3 6318; PC64LE9-NEXT: blr 6319entry: 6320 %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32( 6321 <2 x float><float 42.0, float 43.0>, 6322 metadata !"fpexcept.strict") #0 6323 ret <2 x i64> %result 6324} 6325 6326define <3 x i64> @constrained_vector_fptoui_v3i64_v3f32() #0 { 6327; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f32: 6328; PC64LE: # %bb.0: # %entry 6329; PC64LE-NEXT: addis 3, 2, .LCPI117_0@toc@ha 6330; PC64LE-NEXT: addis 4, 2, .LCPI117_1@toc@ha 6331; PC64LE-NEXT: addis 5, 2, .LCPI117_2@toc@ha 6332; PC64LE-NEXT: lfs 0, .LCPI117_0@toc@l(3) 6333; PC64LE-NEXT: lfs 1, .LCPI117_1@toc@l(4) 6334; PC64LE-NEXT: lfs 2, .LCPI117_2@toc@l(5) 6335; PC64LE-NEXT: xscvdpuxds 0, 0 6336; PC64LE-NEXT: xscvdpuxds 1, 1 6337; PC64LE-NEXT: xscvdpuxds 2, 2 6338; PC64LE-NEXT: mffprd 3, 0 6339; PC64LE-NEXT: mffprd 4, 1 6340; PC64LE-NEXT: mffprd 5, 2 6341; PC64LE-NEXT: blr 6342; 6343; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f32: 6344; PC64LE9: # %bb.0: # %entry 6345; PC64LE9-NEXT: addis 3, 2, .LCPI117_0@toc@ha 6346; PC64LE9-NEXT: addis 4, 2, .LCPI117_1@toc@ha 6347; PC64LE9-NEXT: addis 5, 2, .LCPI117_2@toc@ha 6348; PC64LE9-NEXT: lfs 0, .LCPI117_0@toc@l(3) 6349; PC64LE9-NEXT: xscvdpuxds 0, 0 6350; PC64LE9-NEXT: mffprd 3, 0 6351; PC64LE9-NEXT: lfs 0, .LCPI117_1@toc@l(4) 6352; PC64LE9-NEXT: xscvdpuxds 0, 0 6353; PC64LE9-NEXT: mffprd 4, 0 6354; PC64LE9-NEXT: lfs 0, .LCPI117_2@toc@l(5) 6355; PC64LE9-NEXT: xscvdpuxds 0, 0 6356; PC64LE9-NEXT: mffprd 5, 0 6357; PC64LE9-NEXT: blr 6358entry: 6359 %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32( 6360 <3 x float><float 42.0, float 43.0, 6361 float 44.0>, 6362 metadata !"fpexcept.strict") #0 6363 ret <3 x i64> %result 6364} 6365 6366define <4 x i64> @constrained_vector_fptoui_v4i64_v4f32() #0 { 6367; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f32: 6368; PC64LE: # %bb.0: # %entry 6369; PC64LE-NEXT: addis 3, 2, .LCPI118_0@toc@ha 6370; PC64LE-NEXT: addis 4, 2, .LCPI118_1@toc@ha 6371; PC64LE-NEXT: lfs 0, .LCPI118_0@toc@l(3) 6372; PC64LE-NEXT: addis 3, 2, .LCPI118_2@toc@ha 6373; PC64LE-NEXT: lfs 1, .LCPI118_1@toc@l(4) 6374; PC64LE-NEXT: addis 4, 2, .LCPI118_3@toc@ha 6375; PC64LE-NEXT: lfs 2, .LCPI118_2@toc@l(3) 6376; PC64LE-NEXT: lfs 3, .LCPI118_3@toc@l(4) 6377; PC64LE-NEXT: xscvdpuxds 0, 0 6378; PC64LE-NEXT: xscvdpuxds 1, 1 6379; PC64LE-NEXT: xscvdpuxds 2, 2 6380; PC64LE-NEXT: xscvdpuxds 3, 3 6381; PC64LE-NEXT: mffprd 3, 0 6382; PC64LE-NEXT: mffprd 4, 1 6383; PC64LE-NEXT: mtfprd 0, 3 6384; PC64LE-NEXT: mffprd 3, 2 6385; PC64LE-NEXT: mtfprd 1, 4 6386; PC64LE-NEXT: mffprd 4, 3 6387; PC64LE-NEXT: mtfprd 2, 3 6388; PC64LE-NEXT: xxmrghd 34, 1, 0 6389; PC64LE-NEXT: mtfprd 3, 4 6390; PC64LE-NEXT: xxmrghd 35, 3, 2 6391; PC64LE-NEXT: blr 6392; 6393; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f32: 6394; PC64LE9: # %bb.0: # %entry 6395; PC64LE9-NEXT: addis 3, 2, .LCPI118_0@toc@ha 6396; PC64LE9-NEXT: addis 4, 2, .LCPI118_1@toc@ha 6397; PC64LE9-NEXT: lfs 0, .LCPI118_0@toc@l(3) 6398; PC64LE9-NEXT: xscvdpuxds 0, 0 6399; PC64LE9-NEXT: mffprd 3, 0 6400; PC64LE9-NEXT: lfs 0, .LCPI118_1@toc@l(4) 6401; PC64LE9-NEXT: xscvdpuxds 0, 0 6402; PC64LE9-NEXT: mffprd 4, 0 6403; PC64LE9-NEXT: mtvsrdd 34, 4, 3 6404; PC64LE9-NEXT: addis 3, 2, .LCPI118_2@toc@ha 6405; PC64LE9-NEXT: addis 4, 2, .LCPI118_3@toc@ha 6406; PC64LE9-NEXT: lfs 0, .LCPI118_2@toc@l(3) 6407; PC64LE9-NEXT: xscvdpuxds 0, 0 6408; PC64LE9-NEXT: mffprd 3, 0 6409; PC64LE9-NEXT: lfs 0, .LCPI118_3@toc@l(4) 6410; PC64LE9-NEXT: xscvdpuxds 0, 0 6411; PC64LE9-NEXT: mffprd 4, 0 6412; PC64LE9-NEXT: mtvsrdd 35, 4, 3 6413; PC64LE9-NEXT: blr 6414entry: 6415 %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32( 6416 <4 x float><float 42.0, float 43.0, 6417 float 44.0, float 45.0>, 6418 metadata !"fpexcept.strict") #0 6419 ret <4 x i64> %result 6420} 6421 6422define <1 x i32> @constrained_vector_fptoui_v1i32_v1f64() #0 { 6423; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f64: 6424; PC64LE: # %bb.0: # %entry 6425; PC64LE-NEXT: addis 3, 2, .LCPI119_0@toc@ha 6426; PC64LE-NEXT: lfd 0, .LCPI119_0@toc@l(3) 6427; PC64LE-NEXT: xscvdpuxws 0, 0 6428; PC64LE-NEXT: mffprwz 3, 0 6429; PC64LE-NEXT: blr 6430; 6431; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f64: 6432; PC64LE9: # %bb.0: # %entry 6433; PC64LE9-NEXT: addis 3, 2, .LCPI119_0@toc@ha 6434; PC64LE9-NEXT: lfd 0, .LCPI119_0@toc@l(3) 6435; PC64LE9-NEXT: xscvdpuxws 0, 0 6436; PC64LE9-NEXT: mffprwz 3, 0 6437; PC64LE9-NEXT: blr 6438entry: 6439 %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64( 6440 <1 x double><double 42.1>, 6441 metadata !"fpexcept.strict") #0 6442 ret <1 x i32> %result 6443} 6444 6445define <2 x i32> @constrained_vector_fptoui_v2i32_v2f64() #0 { 6446; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f64: 6447; PC64LE: # %bb.0: # %entry 6448; PC64LE-NEXT: addis 3, 2, .LCPI120_0@toc@ha 6449; PC64LE-NEXT: addis 4, 2, .LCPI120_1@toc@ha 6450; PC64LE-NEXT: lfd 0, .LCPI120_0@toc@l(3) 6451; PC64LE-NEXT: lfd 1, .LCPI120_1@toc@l(4) 6452; PC64LE-NEXT: xscvdpuxws 0, 0 6453; PC64LE-NEXT: xscvdpuxws 1, 1 6454; PC64LE-NEXT: mffprwz 3, 0 6455; PC64LE-NEXT: mffprwz 4, 1 6456; PC64LE-NEXT: mtvsrwz 34, 3 6457; PC64LE-NEXT: mtvsrwz 35, 4 6458; PC64LE-NEXT: vmrghw 2, 3, 2 6459; PC64LE-NEXT: blr 6460; 6461; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f64: 6462; PC64LE9: # %bb.0: # %entry 6463; PC64LE9-NEXT: addis 3, 2, .LCPI120_0@toc@ha 6464; PC64LE9-NEXT: lfd 0, .LCPI120_0@toc@l(3) 6465; PC64LE9-NEXT: xscvdpuxws 0, 0 6466; PC64LE9-NEXT: mffprwz 3, 0 6467; PC64LE9-NEXT: mtvsrwz 34, 3 6468; PC64LE9-NEXT: addis 3, 2, .LCPI120_1@toc@ha 6469; PC64LE9-NEXT: lfd 0, .LCPI120_1@toc@l(3) 6470; PC64LE9-NEXT: xscvdpuxws 0, 0 6471; PC64LE9-NEXT: mffprwz 3, 0 6472; PC64LE9-NEXT: mtvsrwz 35, 3 6473; PC64LE9-NEXT: vmrghw 2, 3, 2 6474; PC64LE9-NEXT: blr 6475entry: 6476 %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64( 6477 <2 x double><double 42.1, double 42.2>, 6478 metadata !"fpexcept.strict") #0 6479 ret <2 x i32> %result 6480} 6481 6482define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64() #0 { 6483; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f64: 6484; PC64LE: # %bb.0: # %entry 6485; PC64LE-NEXT: addis 3, 2, .LCPI121_0@toc@ha 6486; PC64LE-NEXT: addis 4, 2, .LCPI121_1@toc@ha 6487; PC64LE-NEXT: lfd 0, .LCPI121_0@toc@l(3) 6488; PC64LE-NEXT: lfd 1, .LCPI121_1@toc@l(4) 6489; PC64LE-NEXT: addis 3, 2, .LCPI121_3@toc@ha 6490; PC64LE-NEXT: lfd 2, .LCPI121_3@toc@l(3) 6491; PC64LE-NEXT: xscvdpuxws 0, 0 6492; PC64LE-NEXT: xscvdpuxws 1, 1 6493; PC64LE-NEXT: xscvdpuxws 2, 2 6494; PC64LE-NEXT: mffprwz 3, 0 6495; PC64LE-NEXT: mffprwz 4, 1 6496; PC64LE-NEXT: mtvsrwz 34, 3 6497; PC64LE-NEXT: addis 3, 2, .LCPI121_2@toc@ha 6498; PC64LE-NEXT: mtvsrwz 35, 4 6499; PC64LE-NEXT: addi 3, 3, .LCPI121_2@toc@l 6500; PC64LE-NEXT: mffprwz 4, 2 6501; PC64LE-NEXT: vmrghw 2, 3, 2 6502; PC64LE-NEXT: lvx 3, 0, 3 6503; PC64LE-NEXT: mtvsrwz 36, 4 6504; PC64LE-NEXT: vperm 2, 4, 2, 3 6505; PC64LE-NEXT: blr 6506; 6507; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f64: 6508; PC64LE9: # %bb.0: # %entry 6509; PC64LE9-NEXT: addis 3, 2, .LCPI121_0@toc@ha 6510; PC64LE9-NEXT: lfd 0, .LCPI121_0@toc@l(3) 6511; PC64LE9-NEXT: xscvdpuxws 0, 0 6512; PC64LE9-NEXT: mffprwz 3, 0 6513; PC64LE9-NEXT: mtvsrwz 34, 3 6514; PC64LE9-NEXT: addis 3, 2, .LCPI121_1@toc@ha 6515; PC64LE9-NEXT: lfd 0, .LCPI121_1@toc@l(3) 6516; PC64LE9-NEXT: xscvdpuxws 0, 0 6517; PC64LE9-NEXT: mffprwz 3, 0 6518; PC64LE9-NEXT: mtvsrwz 35, 3 6519; PC64LE9-NEXT: addis 3, 2, .LCPI121_2@toc@ha 6520; PC64LE9-NEXT: addi 3, 3, .LCPI121_2@toc@l 6521; PC64LE9-NEXT: vmrghw 2, 3, 2 6522; PC64LE9-NEXT: lxvx 35, 0, 3 6523; PC64LE9-NEXT: addis 3, 2, .LCPI121_3@toc@ha 6524; PC64LE9-NEXT: lfd 0, .LCPI121_3@toc@l(3) 6525; PC64LE9-NEXT: xscvdpuxws 0, 0 6526; PC64LE9-NEXT: mffprwz 3, 0 6527; PC64LE9-NEXT: mtvsrwz 36, 3 6528; PC64LE9-NEXT: vperm 2, 4, 2, 3 6529; PC64LE9-NEXT: blr 6530entry: 6531 %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64( 6532 <3 x double><double 42.1, double 42.2, 6533 double 42.3>, 6534 metadata !"fpexcept.strict") #0 6535 ret <3 x i32> %result 6536} 6537 6538define <4 x i32> @constrained_vector_fptoui_v4i32_v4f64() #0 { 6539; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f64: 6540; PC64LE: # %bb.0: # %entry 6541; PC64LE-NEXT: addis 3, 2, .LCPI122_0@toc@ha 6542; PC64LE-NEXT: addis 4, 2, .LCPI122_1@toc@ha 6543; PC64LE-NEXT: addis 5, 2, .LCPI122_2@toc@ha 6544; PC64LE-NEXT: lfd 0, .LCPI122_0@toc@l(3) 6545; PC64LE-NEXT: addis 3, 2, .LCPI122_3@toc@ha 6546; PC64LE-NEXT: lfd 1, .LCPI122_1@toc@l(4) 6547; PC64LE-NEXT: lfd 2, .LCPI122_2@toc@l(5) 6548; PC64LE-NEXT: lfd 3, .LCPI122_3@toc@l(3) 6549; PC64LE-NEXT: xscvdpuxws 0, 0 6550; PC64LE-NEXT: xscvdpuxws 1, 1 6551; PC64LE-NEXT: xscvdpuxws 2, 2 6552; PC64LE-NEXT: xscvdpuxws 3, 3 6553; PC64LE-NEXT: mffprwz 3, 0 6554; PC64LE-NEXT: mffprwz 4, 1 6555; PC64LE-NEXT: mffprwz 5, 2 6556; PC64LE-NEXT: mffprwz 6, 3 6557; PC64LE-NEXT: rldimi 4, 3, 32, 0 6558; PC64LE-NEXT: mtfprd 0, 4 6559; PC64LE-NEXT: rldimi 6, 5, 32, 0 6560; PC64LE-NEXT: mtfprd 1, 6 6561; PC64LE-NEXT: xxmrghd 34, 1, 0 6562; PC64LE-NEXT: blr 6563; 6564; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f64: 6565; PC64LE9: # %bb.0: # %entry 6566; PC64LE9-NEXT: addis 3, 2, .LCPI122_0@toc@ha 6567; PC64LE9-NEXT: addis 4, 2, .LCPI122_1@toc@ha 6568; PC64LE9-NEXT: addis 5, 2, .LCPI122_3@toc@ha 6569; PC64LE9-NEXT: lfd 0, .LCPI122_0@toc@l(3) 6570; PC64LE9-NEXT: xscvdpuxws 0, 0 6571; PC64LE9-NEXT: mffprwz 3, 0 6572; PC64LE9-NEXT: lfd 0, .LCPI122_1@toc@l(4) 6573; PC64LE9-NEXT: xscvdpuxws 0, 0 6574; PC64LE9-NEXT: mffprwz 4, 0 6575; PC64LE9-NEXT: rldimi 4, 3, 32, 0 6576; PC64LE9-NEXT: addis 3, 2, .LCPI122_2@toc@ha 6577; PC64LE9-NEXT: lfd 0, .LCPI122_2@toc@l(3) 6578; PC64LE9-NEXT: xscvdpuxws 0, 0 6579; PC64LE9-NEXT: mffprwz 3, 0 6580; PC64LE9-NEXT: lfd 0, .LCPI122_3@toc@l(5) 6581; PC64LE9-NEXT: xscvdpuxws 0, 0 6582; PC64LE9-NEXT: mffprwz 5, 0 6583; PC64LE9-NEXT: rldimi 5, 3, 32, 0 6584; PC64LE9-NEXT: mtvsrdd 34, 5, 4 6585; PC64LE9-NEXT: blr 6586entry: 6587 %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64( 6588 <4 x double><double 42.1, double 42.2, 6589 double 42.3, double 42.4>, 6590 metadata !"fpexcept.strict") #0 6591 ret <4 x i32> %result 6592} 6593 6594define <1 x i64> @constrained_vector_fptoui_v1i64_v1f64() #0 { 6595; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f64: 6596; PC64LE: # %bb.0: # %entry 6597; PC64LE-NEXT: addis 3, 2, .LCPI123_0@toc@ha 6598; PC64LE-NEXT: lfd 0, .LCPI123_0@toc@l(3) 6599; PC64LE-NEXT: xscvdpuxds 0, 0 6600; PC64LE-NEXT: mffprd 3, 0 6601; PC64LE-NEXT: blr 6602; 6603; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f64: 6604; PC64LE9: # %bb.0: # %entry 6605; PC64LE9-NEXT: addis 3, 2, .LCPI123_0@toc@ha 6606; PC64LE9-NEXT: lfd 0, .LCPI123_0@toc@l(3) 6607; PC64LE9-NEXT: xscvdpuxds 0, 0 6608; PC64LE9-NEXT: mffprd 3, 0 6609; PC64LE9-NEXT: blr 6610entry: 6611 %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64( 6612 <1 x double><double 42.1>, 6613 metadata !"fpexcept.strict") #0 6614 ret <1 x i64> %result 6615} 6616 6617define <2 x i64> @constrained_vector_fptoui_v2i64_v2f64() #0 { 6618; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f64: 6619; PC64LE: # %bb.0: # %entry 6620; PC64LE-NEXT: addis 3, 2, .LCPI124_0@toc@ha 6621; PC64LE-NEXT: addi 3, 3, .LCPI124_0@toc@l 6622; PC64LE-NEXT: lxvd2x 0, 0, 3 6623; PC64LE-NEXT: xxswapd 0, 0 6624; PC64LE-NEXT: xvcvdpuxds 34, 0 6625; PC64LE-NEXT: blr 6626; 6627; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f64: 6628; PC64LE9: # %bb.0: # %entry 6629; PC64LE9-NEXT: addis 3, 2, .LCPI124_0@toc@ha 6630; PC64LE9-NEXT: addi 3, 3, .LCPI124_0@toc@l 6631; PC64LE9-NEXT: lxvx 0, 0, 3 6632; PC64LE9-NEXT: xvcvdpuxds 34, 0 6633; PC64LE9-NEXT: blr 6634entry: 6635 %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64( 6636 <2 x double><double 42.1, double 42.2>, 6637 metadata !"fpexcept.strict") #0 6638 ret <2 x i64> %result 6639} 6640 6641define <3 x i64> @constrained_vector_fptoui_v3i64_v3f64() #0 { 6642; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f64: 6643; PC64LE: # %bb.0: # %entry 6644; PC64LE-NEXT: addis 3, 2, .LCPI125_0@toc@ha 6645; PC64LE-NEXT: addis 4, 2, .LCPI125_1@toc@ha 6646; PC64LE-NEXT: addis 5, 2, .LCPI125_2@toc@ha 6647; PC64LE-NEXT: lfd 0, .LCPI125_0@toc@l(3) 6648; PC64LE-NEXT: lfd 1, .LCPI125_1@toc@l(4) 6649; PC64LE-NEXT: lfd 2, .LCPI125_2@toc@l(5) 6650; PC64LE-NEXT: xscvdpuxds 0, 0 6651; PC64LE-NEXT: xscvdpuxds 1, 1 6652; PC64LE-NEXT: xscvdpuxds 2, 2 6653; PC64LE-NEXT: mffprd 3, 0 6654; PC64LE-NEXT: mffprd 4, 1 6655; PC64LE-NEXT: mffprd 5, 2 6656; PC64LE-NEXT: blr 6657; 6658; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f64: 6659; PC64LE9: # %bb.0: # %entry 6660; PC64LE9-NEXT: addis 3, 2, .LCPI125_0@toc@ha 6661; PC64LE9-NEXT: addis 4, 2, .LCPI125_1@toc@ha 6662; PC64LE9-NEXT: addis 5, 2, .LCPI125_2@toc@ha 6663; PC64LE9-NEXT: lfd 0, .LCPI125_0@toc@l(3) 6664; PC64LE9-NEXT: xscvdpuxds 0, 0 6665; PC64LE9-NEXT: mffprd 3, 0 6666; PC64LE9-NEXT: lfd 0, .LCPI125_1@toc@l(4) 6667; PC64LE9-NEXT: xscvdpuxds 0, 0 6668; PC64LE9-NEXT: mffprd 4, 0 6669; PC64LE9-NEXT: lfd 0, .LCPI125_2@toc@l(5) 6670; PC64LE9-NEXT: xscvdpuxds 0, 0 6671; PC64LE9-NEXT: mffprd 5, 0 6672; PC64LE9-NEXT: blr 6673entry: 6674 %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64( 6675 <3 x double><double 42.1, double 42.2, 6676 double 42.3>, 6677 metadata !"fpexcept.strict") #0 6678 ret <3 x i64> %result 6679} 6680 6681define <4 x i64> @constrained_vector_fptoui_v4i64_v4f64() #0 { 6682; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f64: 6683; PC64LE: # %bb.0: # %entry 6684; PC64LE-NEXT: addis 3, 2, .LCPI126_0@toc@ha 6685; PC64LE-NEXT: addis 4, 2, .LCPI126_1@toc@ha 6686; PC64LE-NEXT: addi 3, 3, .LCPI126_0@toc@l 6687; PC64LE-NEXT: lxvd2x 0, 0, 3 6688; PC64LE-NEXT: addi 3, 4, .LCPI126_1@toc@l 6689; PC64LE-NEXT: lxvd2x 1, 0, 3 6690; PC64LE-NEXT: xxswapd 0, 0 6691; PC64LE-NEXT: xxswapd 1, 1 6692; PC64LE-NEXT: xvcvdpuxds 35, 0 6693; PC64LE-NEXT: xvcvdpuxds 34, 1 6694; PC64LE-NEXT: blr 6695; 6696; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f64: 6697; PC64LE9: # %bb.0: # %entry 6698; PC64LE9-NEXT: addis 3, 2, .LCPI126_0@toc@ha 6699; PC64LE9-NEXT: addi 3, 3, .LCPI126_0@toc@l 6700; PC64LE9-NEXT: lxvx 0, 0, 3 6701; PC64LE9-NEXT: addis 3, 2, .LCPI126_1@toc@ha 6702; PC64LE9-NEXT: addi 3, 3, .LCPI126_1@toc@l 6703; PC64LE9-NEXT: xvcvdpuxds 35, 0 6704; PC64LE9-NEXT: lxvx 0, 0, 3 6705; PC64LE9-NEXT: xvcvdpuxds 34, 0 6706; PC64LE9-NEXT: blr 6707entry: 6708 %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64( 6709 <4 x double><double 42.1, double 42.2, 6710 double 42.3, double 42.4>, 6711 metadata !"fpexcept.strict") #0 6712 ret <4 x i64> %result 6713} 6714 6715define <1 x float> @constrained_vector_fptrunc_v1f64() #0 { 6716; PC64LE-LABEL: constrained_vector_fptrunc_v1f64: 6717; PC64LE: # %bb.0: # %entry 6718; PC64LE-NEXT: addis 3, 2, .LCPI127_0@toc@ha 6719; PC64LE-NEXT: lfd 0, .LCPI127_0@toc@l(3) 6720; PC64LE-NEXT: xsrsp 1, 0 6721; PC64LE-NEXT: blr 6722; 6723; PC64LE9-LABEL: constrained_vector_fptrunc_v1f64: 6724; PC64LE9: # %bb.0: # %entry 6725; PC64LE9-NEXT: addis 3, 2, .LCPI127_0@toc@ha 6726; PC64LE9-NEXT: lfd 0, .LCPI127_0@toc@l(3) 6727; PC64LE9-NEXT: xsrsp 1, 0 6728; PC64LE9-NEXT: blr 6729entry: 6730 %result = call <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64( 6731 <1 x double><double 42.1>, 6732 metadata !"round.dynamic", 6733 metadata !"fpexcept.strict") #1 6734 ret <1 x float> %result 6735} 6736 6737define <2 x float> @constrained_vector_fptrunc_v2f64() #0 { 6738; PC64LE-LABEL: constrained_vector_fptrunc_v2f64: 6739; PC64LE: # %bb.0: # %entry 6740; PC64LE-NEXT: addis 3, 2, .LCPI128_0@toc@ha 6741; PC64LE-NEXT: addis 4, 2, .LCPI128_1@toc@ha 6742; PC64LE-NEXT: lfd 0, .LCPI128_0@toc@l(3) 6743; PC64LE-NEXT: lfd 1, .LCPI128_1@toc@l(4) 6744; PC64LE-NEXT: xsrsp 0, 0 6745; PC64LE-NEXT: xsrsp 1, 1 6746; PC64LE-NEXT: xscvdpspn 34, 0 6747; PC64LE-NEXT: xscvdpspn 35, 1 6748; PC64LE-NEXT: vmrghw 2, 3, 2 6749; PC64LE-NEXT: blr 6750; 6751; PC64LE9-LABEL: constrained_vector_fptrunc_v2f64: 6752; PC64LE9: # %bb.0: # %entry 6753; PC64LE9-NEXT: addis 3, 2, .LCPI128_0@toc@ha 6754; PC64LE9-NEXT: lfd 0, .LCPI128_0@toc@l(3) 6755; PC64LE9-NEXT: addis 3, 2, .LCPI128_1@toc@ha 6756; PC64LE9-NEXT: xsrsp 0, 0 6757; PC64LE9-NEXT: xscvdpspn 34, 0 6758; PC64LE9-NEXT: lfd 0, .LCPI128_1@toc@l(3) 6759; PC64LE9-NEXT: xsrsp 0, 0 6760; PC64LE9-NEXT: xscvdpspn 35, 0 6761; PC64LE9-NEXT: vmrghw 2, 3, 2 6762; PC64LE9-NEXT: blr 6763entry: 6764 %result = call <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64( 6765 <2 x double><double 42.1, double 42.2>, 6766 metadata !"round.dynamic", 6767 metadata !"fpexcept.strict") #1 6768 ret <2 x float> %result 6769} 6770 6771define <3 x float> @constrained_vector_fptrunc_v3f64() #0 { 6772; PC64LE-LABEL: constrained_vector_fptrunc_v3f64: 6773; PC64LE: # %bb.0: # %entry 6774; PC64LE-NEXT: addis 3, 2, .LCPI129_0@toc@ha 6775; PC64LE-NEXT: addis 4, 2, .LCPI129_1@toc@ha 6776; PC64LE-NEXT: lfd 0, .LCPI129_0@toc@l(3) 6777; PC64LE-NEXT: lfd 1, .LCPI129_1@toc@l(4) 6778; PC64LE-NEXT: addis 3, 2, .LCPI129_3@toc@ha 6779; PC64LE-NEXT: xsrsp 0, 0 6780; PC64LE-NEXT: lfd 2, .LCPI129_3@toc@l(3) 6781; PC64LE-NEXT: addis 3, 2, .LCPI129_2@toc@ha 6782; PC64LE-NEXT: xsrsp 1, 1 6783; PC64LE-NEXT: addi 3, 3, .LCPI129_2@toc@l 6784; PC64LE-NEXT: lvx 4, 0, 3 6785; PC64LE-NEXT: xscvdpspn 34, 0 6786; PC64LE-NEXT: xscvdpspn 35, 1 6787; PC64LE-NEXT: xsrsp 0, 2 6788; PC64LE-NEXT: vmrghw 2, 3, 2 6789; PC64LE-NEXT: xscvdpspn 35, 0 6790; PC64LE-NEXT: vperm 2, 3, 2, 4 6791; PC64LE-NEXT: blr 6792; 6793; PC64LE9-LABEL: constrained_vector_fptrunc_v3f64: 6794; PC64LE9: # %bb.0: # %entry 6795; PC64LE9-NEXT: addis 3, 2, .LCPI129_0@toc@ha 6796; PC64LE9-NEXT: lfd 0, .LCPI129_0@toc@l(3) 6797; PC64LE9-NEXT: addis 3, 2, .LCPI129_1@toc@ha 6798; PC64LE9-NEXT: xsrsp 0, 0 6799; PC64LE9-NEXT: xscvdpspn 34, 0 6800; PC64LE9-NEXT: lfd 0, .LCPI129_1@toc@l(3) 6801; PC64LE9-NEXT: addis 3, 2, .LCPI129_2@toc@ha 6802; PC64LE9-NEXT: addi 3, 3, .LCPI129_2@toc@l 6803; PC64LE9-NEXT: xsrsp 0, 0 6804; PC64LE9-NEXT: xscvdpspn 35, 0 6805; PC64LE9-NEXT: vmrghw 2, 3, 2 6806; PC64LE9-NEXT: lxvx 35, 0, 3 6807; PC64LE9-NEXT: addis 3, 2, .LCPI129_3@toc@ha 6808; PC64LE9-NEXT: lfd 0, .LCPI129_3@toc@l(3) 6809; PC64LE9-NEXT: xsrsp 0, 0 6810; PC64LE9-NEXT: xscvdpspn 36, 0 6811; PC64LE9-NEXT: vperm 2, 4, 2, 3 6812; PC64LE9-NEXT: blr 6813entry: 6814 %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64( 6815 <3 x double><double 42.1, double 42.2, 6816 double 42.3>, 6817 metadata !"round.dynamic", 6818 metadata !"fpexcept.strict") #1 6819 ret <3 x float> %result 6820} 6821 6822define <4 x float> @constrained_vector_fptrunc_v4f64() #0 { 6823; PC64LE-LABEL: constrained_vector_fptrunc_v4f64: 6824; PC64LE: # %bb.0: # %entry 6825; PC64LE-NEXT: addis 3, 2, .LCPI130_0@toc@ha 6826; PC64LE-NEXT: addis 4, 2, .LCPI130_1@toc@ha 6827; PC64LE-NEXT: addis 5, 2, .LCPI130_2@toc@ha 6828; PC64LE-NEXT: addis 6, 2, .LCPI130_3@toc@ha 6829; PC64LE-NEXT: lfd 0, .LCPI130_0@toc@l(3) 6830; PC64LE-NEXT: lfd 1, .LCPI130_1@toc@l(4) 6831; PC64LE-NEXT: lfd 2, .LCPI130_2@toc@l(5) 6832; PC64LE-NEXT: lfd 3, .LCPI130_3@toc@l(6) 6833; PC64LE-NEXT: xxmrghd 0, 1, 0 6834; PC64LE-NEXT: xxmrghd 1, 3, 2 6835; PC64LE-NEXT: xvcvdpsp 34, 0 6836; PC64LE-NEXT: xvcvdpsp 35, 1 6837; PC64LE-NEXT: vmrgew 2, 3, 2 6838; PC64LE-NEXT: blr 6839; 6840; PC64LE9-LABEL: constrained_vector_fptrunc_v4f64: 6841; PC64LE9: # %bb.0: # %entry 6842; PC64LE9-NEXT: addis 3, 2, .LCPI130_0@toc@ha 6843; PC64LE9-NEXT: lfd 0, .LCPI130_0@toc@l(3) 6844; PC64LE9-NEXT: addis 3, 2, .LCPI130_1@toc@ha 6845; PC64LE9-NEXT: lfd 1, .LCPI130_1@toc@l(3) 6846; PC64LE9-NEXT: addis 3, 2, .LCPI130_2@toc@ha 6847; PC64LE9-NEXT: xxmrghd 0, 1, 0 6848; PC64LE9-NEXT: xvcvdpsp 34, 0 6849; PC64LE9-NEXT: lfd 0, .LCPI130_2@toc@l(3) 6850; PC64LE9-NEXT: addis 3, 2, .LCPI130_3@toc@ha 6851; PC64LE9-NEXT: lfd 1, .LCPI130_3@toc@l(3) 6852; PC64LE9-NEXT: xxmrghd 0, 1, 0 6853; PC64LE9-NEXT: xvcvdpsp 35, 0 6854; PC64LE9-NEXT: vmrgew 2, 3, 2 6855; PC64LE9-NEXT: blr 6856entry: 6857 %result = call <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64( 6858 <4 x double><double 42.1, double 42.2, 6859 double 42.3, double 42.4>, 6860 metadata !"round.dynamic", 6861 metadata !"fpexcept.strict") #1 6862 ret <4 x float> %result 6863} 6864 6865define <1 x double> @constrained_vector_fpext_v1f32() #0 { 6866; PC64LE-LABEL: constrained_vector_fpext_v1f32: 6867; PC64LE: # %bb.0: # %entry 6868; PC64LE-NEXT: addis 3, 2, .LCPI131_0@toc@ha 6869; PC64LE-NEXT: lfs 1, .LCPI131_0@toc@l(3) 6870; PC64LE-NEXT: blr 6871; 6872; PC64LE9-LABEL: constrained_vector_fpext_v1f32: 6873; PC64LE9: # %bb.0: # %entry 6874; PC64LE9-NEXT: addis 3, 2, .LCPI131_0@toc@ha 6875; PC64LE9-NEXT: lfs 1, .LCPI131_0@toc@l(3) 6876; PC64LE9-NEXT: blr 6877entry: 6878 %result = call <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32( 6879 <1 x float><float 42.0>, 6880 metadata !"fpexcept.strict") #1 6881 ret <1 x double> %result 6882} 6883 6884define <2 x double> @constrained_vector_fpext_v2f32() #0 { 6885; PC64LE-LABEL: constrained_vector_fpext_v2f32: 6886; PC64LE: # %bb.0: # %entry 6887; PC64LE-NEXT: addis 3, 2, .LCPI132_0@toc@ha 6888; PC64LE-NEXT: addis 4, 2, .LCPI132_1@toc@ha 6889; PC64LE-NEXT: lfs 0, .LCPI132_0@toc@l(3) 6890; PC64LE-NEXT: lfs 1, .LCPI132_1@toc@l(4) 6891; PC64LE-NEXT: xxmrghd 34, 1, 0 6892; PC64LE-NEXT: blr 6893; 6894; PC64LE9-LABEL: constrained_vector_fpext_v2f32: 6895; PC64LE9: # %bb.0: # %entry 6896; PC64LE9-NEXT: addis 3, 2, .LCPI132_0@toc@ha 6897; PC64LE9-NEXT: lfs 0, .LCPI132_0@toc@l(3) 6898; PC64LE9-NEXT: addis 3, 2, .LCPI132_1@toc@ha 6899; PC64LE9-NEXT: lfs 1, .LCPI132_1@toc@l(3) 6900; PC64LE9-NEXT: xxmrghd 34, 1, 0 6901; PC64LE9-NEXT: blr 6902entry: 6903 %result = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32( 6904 <2 x float><float 42.0, float 43.0>, 6905 metadata !"fpexcept.strict") #1 6906 ret <2 x double> %result 6907} 6908 6909define <3 x double> @constrained_vector_fpext_v3f32() #0 { 6910; PC64LE-LABEL: constrained_vector_fpext_v3f32: 6911; PC64LE: # %bb.0: # %entry 6912; PC64LE-NEXT: addis 3, 2, .LCPI133_0@toc@ha 6913; PC64LE-NEXT: addis 4, 2, .LCPI133_1@toc@ha 6914; PC64LE-NEXT: addis 5, 2, .LCPI133_2@toc@ha 6915; PC64LE-NEXT: lfs 3, .LCPI133_0@toc@l(3) 6916; PC64LE-NEXT: lfs 2, .LCPI133_1@toc@l(4) 6917; PC64LE-NEXT: lfs 1, .LCPI133_2@toc@l(5) 6918; PC64LE-NEXT: blr 6919; 6920; PC64LE9-LABEL: constrained_vector_fpext_v3f32: 6921; PC64LE9: # %bb.0: # %entry 6922; PC64LE9-NEXT: addis 3, 2, .LCPI133_0@toc@ha 6923; PC64LE9-NEXT: lfs 3, .LCPI133_0@toc@l(3) 6924; PC64LE9-NEXT: addis 3, 2, .LCPI133_1@toc@ha 6925; PC64LE9-NEXT: lfs 2, .LCPI133_1@toc@l(3) 6926; PC64LE9-NEXT: addis 3, 2, .LCPI133_2@toc@ha 6927; PC64LE9-NEXT: lfs 1, .LCPI133_2@toc@l(3) 6928; PC64LE9-NEXT: blr 6929entry: 6930 %result = call <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32( 6931 <3 x float><float 42.0, float 43.0, 6932 float 44.0>, 6933 metadata !"fpexcept.strict") #1 6934 ret <3 x double> %result 6935} 6936 6937define <4 x double> @constrained_vector_fpext_v4f32() #0 { 6938; PC64LE-LABEL: constrained_vector_fpext_v4f32: 6939; PC64LE: # %bb.0: # %entry 6940; PC64LE-NEXT: addis 3, 2, .LCPI134_0@toc@ha 6941; PC64LE-NEXT: addis 4, 2, .LCPI134_1@toc@ha 6942; PC64LE-NEXT: addis 5, 2, .LCPI134_2@toc@ha 6943; PC64LE-NEXT: addis 6, 2, .LCPI134_3@toc@ha 6944; PC64LE-NEXT: lfs 0, .LCPI134_0@toc@l(3) 6945; PC64LE-NEXT: lfs 1, .LCPI134_1@toc@l(4) 6946; PC64LE-NEXT: lfs 2, .LCPI134_2@toc@l(5) 6947; PC64LE-NEXT: lfs 3, .LCPI134_3@toc@l(6) 6948; PC64LE-NEXT: xxmrghd 34, 1, 0 6949; PC64LE-NEXT: xxmrghd 35, 3, 2 6950; PC64LE-NEXT: blr 6951; 6952; PC64LE9-LABEL: constrained_vector_fpext_v4f32: 6953; PC64LE9: # %bb.0: # %entry 6954; PC64LE9-NEXT: addis 3, 2, .LCPI134_0@toc@ha 6955; PC64LE9-NEXT: lfs 0, .LCPI134_0@toc@l(3) 6956; PC64LE9-NEXT: addis 3, 2, .LCPI134_1@toc@ha 6957; PC64LE9-NEXT: lfs 1, .LCPI134_1@toc@l(3) 6958; PC64LE9-NEXT: addis 3, 2, .LCPI134_2@toc@ha 6959; PC64LE9-NEXT: xxmrghd 34, 1, 0 6960; PC64LE9-NEXT: lfs 0, .LCPI134_2@toc@l(3) 6961; PC64LE9-NEXT: addis 3, 2, .LCPI134_3@toc@ha 6962; PC64LE9-NEXT: lfs 1, .LCPI134_3@toc@l(3) 6963; PC64LE9-NEXT: xxmrghd 35, 1, 0 6964; PC64LE9-NEXT: blr 6965entry: 6966 %result = call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32( 6967 <4 x float><float 42.0, float 43.0, 6968 float 44.0, float 45.0>, 6969 metadata !"fpexcept.strict") #1 6970 ret <4 x double> %result 6971} 6972 6973define <1 x float> @constrained_vector_ceil_v1f32() #0 { 6974; PC64LE-LABEL: constrained_vector_ceil_v1f32: 6975; PC64LE: # %bb.0: # %entry 6976; PC64LE-NEXT: addis 3, 2, .LCPI135_0@toc@ha 6977; PC64LE-NEXT: lfs 0, .LCPI135_0@toc@l(3) 6978; PC64LE-NEXT: addis 3, 2, .LCPI135_1@toc@ha 6979; PC64LE-NEXT: lfs 1, .LCPI135_1@toc@l(3) 6980; PC64LE-NEXT: xsrdpip 0, 0 6981; PC64LE-NEXT: blr 6982; 6983; PC64LE9-LABEL: constrained_vector_ceil_v1f32: 6984; PC64LE9: # %bb.0: # %entry 6985; PC64LE9-NEXT: addis 3, 2, .LCPI135_0@toc@ha 6986; PC64LE9-NEXT: lfs 0, .LCPI135_0@toc@l(3) 6987; PC64LE9-NEXT: addis 3, 2, .LCPI135_1@toc@ha 6988; PC64LE9-NEXT: lfs 1, .LCPI135_1@toc@l(3) 6989; PC64LE9-NEXT: xsrdpip 0, 0 6990; PC64LE9-NEXT: blr 6991entry: 6992 %ceil = call <1 x float> @llvm.experimental.constrained.ceil.v1f32( 6993 <1 x float> <float 1.5>, 6994 metadata !"fpexcept.strict") #1 6995 ret <1 x float> %ceil 6996} 6997 6998define <2 x double> @constrained_vector_ceil_v2f64() #0 { 6999; PC64LE-LABEL: constrained_vector_ceil_v2f64: 7000; PC64LE: # %bb.0: # %entry 7001; PC64LE-NEXT: addis 3, 2, .LCPI136_0@toc@ha 7002; PC64LE-NEXT: addis 4, 2, .LCPI136_1@toc@ha 7003; PC64LE-NEXT: addi 3, 3, .LCPI136_0@toc@l 7004; PC64LE-NEXT: lxvd2x 0, 0, 3 7005; PC64LE-NEXT: addi 3, 4, .LCPI136_1@toc@l 7006; PC64LE-NEXT: lxvd2x 1, 0, 3 7007; PC64LE-NEXT: xvrdpip 0, 0 7008; PC64LE-NEXT: xxswapd 34, 1 7009; PC64LE-NEXT: blr 7010; 7011; PC64LE9-LABEL: constrained_vector_ceil_v2f64: 7012; PC64LE9: # %bb.0: # %entry 7013; PC64LE9-NEXT: addis 3, 2, .LCPI136_0@toc@ha 7014; PC64LE9-NEXT: addi 3, 3, .LCPI136_0@toc@l 7015; PC64LE9-NEXT: lxvx 0, 0, 3 7016; PC64LE9-NEXT: addis 3, 2, .LCPI136_1@toc@ha 7017; PC64LE9-NEXT: addi 3, 3, .LCPI136_1@toc@l 7018; PC64LE9-NEXT: lxvx 34, 0, 3 7019; PC64LE9-NEXT: xvrdpip 0, 0 7020; PC64LE9-NEXT: blr 7021entry: 7022 %ceil = call <2 x double> @llvm.experimental.constrained.ceil.v2f64( 7023 <2 x double> <double 1.1, double 1.9>, 7024 metadata !"fpexcept.strict") #1 7025 ret <2 x double> %ceil 7026} 7027 7028define <3 x float> @constrained_vector_ceil_v3f32() #0 { 7029; PC64LE-LABEL: constrained_vector_ceil_v3f32: 7030; PC64LE: # %bb.0: # %entry 7031; PC64LE-NEXT: addis 3, 2, .LCPI137_0@toc@ha 7032; PC64LE-NEXT: addis 4, 2, .LCPI137_1@toc@ha 7033; PC64LE-NEXT: lfs 0, .LCPI137_0@toc@l(3) 7034; PC64LE-NEXT: addis 3, 2, .LCPI137_2@toc@ha 7035; PC64LE-NEXT: lfs 1, .LCPI137_1@toc@l(4) 7036; PC64LE-NEXT: lfs 2, .LCPI137_2@toc@l(3) 7037; PC64LE-NEXT: addis 3, 2, .LCPI137_3@toc@ha 7038; PC64LE-NEXT: addi 3, 3, .LCPI137_3@toc@l 7039; PC64LE-NEXT: xsrdpip 0, 0 7040; PC64LE-NEXT: lvx 2, 0, 3 7041; PC64LE-NEXT: xsrdpip 0, 1 7042; PC64LE-NEXT: xsrdpip 0, 2 7043; PC64LE-NEXT: blr 7044; 7045; PC64LE9-LABEL: constrained_vector_ceil_v3f32: 7046; PC64LE9: # %bb.0: # %entry 7047; PC64LE9-NEXT: addis 3, 2, .LCPI137_0@toc@ha 7048; PC64LE9-NEXT: lfs 0, .LCPI137_0@toc@l(3) 7049; PC64LE9-NEXT: addis 3, 2, .LCPI137_1@toc@ha 7050; PC64LE9-NEXT: xsrdpip 0, 0 7051; PC64LE9-NEXT: lfs 0, .LCPI137_1@toc@l(3) 7052; PC64LE9-NEXT: addis 3, 2, .LCPI137_2@toc@ha 7053; PC64LE9-NEXT: xsrdpip 0, 0 7054; PC64LE9-NEXT: lfs 0, .LCPI137_2@toc@l(3) 7055; PC64LE9-NEXT: addis 3, 2, .LCPI137_3@toc@ha 7056; PC64LE9-NEXT: addi 3, 3, .LCPI137_3@toc@l 7057; PC64LE9-NEXT: lxvx 34, 0, 3 7058; PC64LE9-NEXT: xsrdpip 0, 0 7059; PC64LE9-NEXT: blr 7060entry: 7061 %ceil = call <3 x float> @llvm.experimental.constrained.ceil.v3f32( 7062 <3 x float> <float 1.5, float 2.5, float 3.5>, 7063 metadata !"fpexcept.strict") #1 7064 ret <3 x float> %ceil 7065} 7066 7067define <3 x double> @constrained_vector_ceil_v3f64() #0 { 7068; PC64LE-LABEL: constrained_vector_ceil_v3f64: 7069; PC64LE: # %bb.0: # %entry 7070; PC64LE-NEXT: addis 3, 2, .LCPI138_0@toc@ha 7071; PC64LE-NEXT: addis 4, 2, .LCPI138_1@toc@ha 7072; PC64LE-NEXT: lfs 0, .LCPI138_0@toc@l(3) 7073; PC64LE-NEXT: addi 3, 4, .LCPI138_1@toc@l 7074; PC64LE-NEXT: lxvd2x 1, 0, 3 7075; PC64LE-NEXT: addis 3, 2, .LCPI138_2@toc@ha 7076; PC64LE-NEXT: xsrdpip 0, 0 7077; PC64LE-NEXT: xvrdpip 0, 1 7078; PC64LE-NEXT: lfs 1, .LCPI138_2@toc@l(3) 7079; PC64LE-NEXT: fmr 2, 1 7080; PC64LE-NEXT: fmr 3, 1 7081; PC64LE-NEXT: blr 7082; 7083; PC64LE9-LABEL: constrained_vector_ceil_v3f64: 7084; PC64LE9: # %bb.0: # %entry 7085; PC64LE9-NEXT: addis 3, 2, .LCPI138_0@toc@ha 7086; PC64LE9-NEXT: lfs 0, .LCPI138_0@toc@l(3) 7087; PC64LE9-NEXT: addis 3, 2, .LCPI138_1@toc@ha 7088; PC64LE9-NEXT: addi 3, 3, .LCPI138_1@toc@l 7089; PC64LE9-NEXT: xsrdpip 0, 0 7090; PC64LE9-NEXT: lxvx 0, 0, 3 7091; PC64LE9-NEXT: addis 3, 2, .LCPI138_2@toc@ha 7092; PC64LE9-NEXT: lfs 1, .LCPI138_2@toc@l(3) 7093; PC64LE9-NEXT: xvrdpip 0, 0 7094; PC64LE9-NEXT: fmr 2, 1 7095; PC64LE9-NEXT: fmr 3, 1 7096; PC64LE9-NEXT: blr 7097entry: 7098 %ceil = call <3 x double> @llvm.experimental.constrained.ceil.v3f64( 7099 <3 x double> <double 1.1, double 1.9, double 1.5>, 7100 metadata !"fpexcept.strict") #1 7101 ret <3 x double> %ceil 7102} 7103 7104define <1 x float> @constrained_vector_floor_v1f32() #0 { 7105; PC64LE-LABEL: constrained_vector_floor_v1f32: 7106; PC64LE: # %bb.0: # %entry 7107; PC64LE-NEXT: addis 3, 2, .LCPI139_0@toc@ha 7108; PC64LE-NEXT: lfs 0, .LCPI139_0@toc@l(3) 7109; PC64LE-NEXT: addis 3, 2, .LCPI139_1@toc@ha 7110; PC64LE-NEXT: lfs 1, .LCPI139_1@toc@l(3) 7111; PC64LE-NEXT: xsrdpim 0, 0 7112; PC64LE-NEXT: blr 7113; 7114; PC64LE9-LABEL: constrained_vector_floor_v1f32: 7115; PC64LE9: # %bb.0: # %entry 7116; PC64LE9-NEXT: addis 3, 2, .LCPI139_0@toc@ha 7117; PC64LE9-NEXT: lfs 0, .LCPI139_0@toc@l(3) 7118; PC64LE9-NEXT: addis 3, 2, .LCPI139_1@toc@ha 7119; PC64LE9-NEXT: lfs 1, .LCPI139_1@toc@l(3) 7120; PC64LE9-NEXT: xsrdpim 0, 0 7121; PC64LE9-NEXT: blr 7122entry: 7123 %floor = call <1 x float> @llvm.experimental.constrained.floor.v1f32( 7124 <1 x float> <float 1.5>, 7125 metadata !"fpexcept.strict") #1 7126 ret <1 x float> %floor 7127} 7128 7129 7130define <2 x double> @constrained_vector_floor_v2f64() #0 { 7131; PC64LE-LABEL: constrained_vector_floor_v2f64: 7132; PC64LE: # %bb.0: # %entry 7133; PC64LE-NEXT: addis 3, 2, .LCPI140_0@toc@ha 7134; PC64LE-NEXT: addis 4, 2, .LCPI140_1@toc@ha 7135; PC64LE-NEXT: addi 3, 3, .LCPI140_0@toc@l 7136; PC64LE-NEXT: lxvd2x 0, 0, 3 7137; PC64LE-NEXT: addi 3, 4, .LCPI140_1@toc@l 7138; PC64LE-NEXT: lxvd2x 1, 0, 3 7139; PC64LE-NEXT: xvrdpim 0, 0 7140; PC64LE-NEXT: xxswapd 34, 1 7141; PC64LE-NEXT: blr 7142; 7143; PC64LE9-LABEL: constrained_vector_floor_v2f64: 7144; PC64LE9: # %bb.0: # %entry 7145; PC64LE9-NEXT: addis 3, 2, .LCPI140_0@toc@ha 7146; PC64LE9-NEXT: addi 3, 3, .LCPI140_0@toc@l 7147; PC64LE9-NEXT: lxvx 0, 0, 3 7148; PC64LE9-NEXT: addis 3, 2, .LCPI140_1@toc@ha 7149; PC64LE9-NEXT: addi 3, 3, .LCPI140_1@toc@l 7150; PC64LE9-NEXT: lxvx 34, 0, 3 7151; PC64LE9-NEXT: xvrdpim 0, 0 7152; PC64LE9-NEXT: blr 7153entry: 7154 %floor = call <2 x double> @llvm.experimental.constrained.floor.v2f64( 7155 <2 x double> <double 1.1, double 1.9>, 7156 metadata !"fpexcept.strict") #1 7157 ret <2 x double> %floor 7158} 7159 7160define <3 x float> @constrained_vector_floor_v3f32() #0 { 7161; PC64LE-LABEL: constrained_vector_floor_v3f32: 7162; PC64LE: # %bb.0: # %entry 7163; PC64LE-NEXT: addis 3, 2, .LCPI141_0@toc@ha 7164; PC64LE-NEXT: addis 4, 2, .LCPI141_1@toc@ha 7165; PC64LE-NEXT: lfs 0, .LCPI141_0@toc@l(3) 7166; PC64LE-NEXT: addis 3, 2, .LCPI141_2@toc@ha 7167; PC64LE-NEXT: lfs 1, .LCPI141_1@toc@l(4) 7168; PC64LE-NEXT: lfs 2, .LCPI141_2@toc@l(3) 7169; PC64LE-NEXT: addis 3, 2, .LCPI141_3@toc@ha 7170; PC64LE-NEXT: addi 3, 3, .LCPI141_3@toc@l 7171; PC64LE-NEXT: xsrdpim 0, 0 7172; PC64LE-NEXT: lvx 2, 0, 3 7173; PC64LE-NEXT: xsrdpim 0, 1 7174; PC64LE-NEXT: xsrdpim 0, 2 7175; PC64LE-NEXT: blr 7176; 7177; PC64LE9-LABEL: constrained_vector_floor_v3f32: 7178; PC64LE9: # %bb.0: # %entry 7179; PC64LE9-NEXT: addis 3, 2, .LCPI141_0@toc@ha 7180; PC64LE9-NEXT: lfs 0, .LCPI141_0@toc@l(3) 7181; PC64LE9-NEXT: addis 3, 2, .LCPI141_1@toc@ha 7182; PC64LE9-NEXT: xsrdpim 0, 0 7183; PC64LE9-NEXT: lfs 0, .LCPI141_1@toc@l(3) 7184; PC64LE9-NEXT: addis 3, 2, .LCPI141_2@toc@ha 7185; PC64LE9-NEXT: xsrdpim 0, 0 7186; PC64LE9-NEXT: lfs 0, .LCPI141_2@toc@l(3) 7187; PC64LE9-NEXT: addis 3, 2, .LCPI141_3@toc@ha 7188; PC64LE9-NEXT: addi 3, 3, .LCPI141_3@toc@l 7189; PC64LE9-NEXT: lxvx 34, 0, 3 7190; PC64LE9-NEXT: xsrdpim 0, 0 7191; PC64LE9-NEXT: blr 7192entry: 7193 %floor = call <3 x float> @llvm.experimental.constrained.floor.v3f32( 7194 <3 x float> <float 1.5, float 2.5, float 3.5>, 7195 metadata !"fpexcept.strict") #1 7196 ret <3 x float> %floor 7197} 7198 7199define <3 x double> @constrained_vector_floor_v3f64() #0 { 7200; PC64LE-LABEL: constrained_vector_floor_v3f64: 7201; PC64LE: # %bb.0: # %entry 7202; PC64LE-NEXT: addis 3, 2, .LCPI142_0@toc@ha 7203; PC64LE-NEXT: addis 4, 2, .LCPI142_1@toc@ha 7204; PC64LE-NEXT: lfs 0, .LCPI142_0@toc@l(3) 7205; PC64LE-NEXT: addi 3, 4, .LCPI142_1@toc@l 7206; PC64LE-NEXT: lxvd2x 1, 0, 3 7207; PC64LE-NEXT: addis 3, 2, .LCPI142_2@toc@ha 7208; PC64LE-NEXT: xsrdpim 0, 0 7209; PC64LE-NEXT: xvrdpim 0, 1 7210; PC64LE-NEXT: lfs 1, .LCPI142_2@toc@l(3) 7211; PC64LE-NEXT: fmr 2, 1 7212; PC64LE-NEXT: fmr 3, 1 7213; PC64LE-NEXT: blr 7214; 7215; PC64LE9-LABEL: constrained_vector_floor_v3f64: 7216; PC64LE9: # %bb.0: # %entry 7217; PC64LE9-NEXT: addis 3, 2, .LCPI142_0@toc@ha 7218; PC64LE9-NEXT: lfs 0, .LCPI142_0@toc@l(3) 7219; PC64LE9-NEXT: addis 3, 2, .LCPI142_1@toc@ha 7220; PC64LE9-NEXT: addi 3, 3, .LCPI142_1@toc@l 7221; PC64LE9-NEXT: xsrdpim 0, 0 7222; PC64LE9-NEXT: lxvx 0, 0, 3 7223; PC64LE9-NEXT: addis 3, 2, .LCPI142_2@toc@ha 7224; PC64LE9-NEXT: lfs 1, .LCPI142_2@toc@l(3) 7225; PC64LE9-NEXT: xvrdpim 0, 0 7226; PC64LE9-NEXT: fmr 2, 1 7227; PC64LE9-NEXT: fmr 3, 1 7228; PC64LE9-NEXT: blr 7229entry: 7230 %floor = call <3 x double> @llvm.experimental.constrained.floor.v3f64( 7231 <3 x double> <double 1.1, double 1.9, double 1.5>, 7232 metadata !"fpexcept.strict") #1 7233 ret <3 x double> %floor 7234} 7235 7236define <1 x float> @constrained_vector_round_v1f32() #0 { 7237; PC64LE-LABEL: constrained_vector_round_v1f32: 7238; PC64LE: # %bb.0: # %entry 7239; PC64LE-NEXT: addis 3, 2, .LCPI143_0@toc@ha 7240; PC64LE-NEXT: lfs 0, .LCPI143_0@toc@l(3) 7241; PC64LE-NEXT: addis 3, 2, .LCPI143_1@toc@ha 7242; PC64LE-NEXT: lfs 1, .LCPI143_1@toc@l(3) 7243; PC64LE-NEXT: xsrdpi 0, 0 7244; PC64LE-NEXT: blr 7245; 7246; PC64LE9-LABEL: constrained_vector_round_v1f32: 7247; PC64LE9: # %bb.0: # %entry 7248; PC64LE9-NEXT: addis 3, 2, .LCPI143_0@toc@ha 7249; PC64LE9-NEXT: lfs 0, .LCPI143_0@toc@l(3) 7250; PC64LE9-NEXT: addis 3, 2, .LCPI143_1@toc@ha 7251; PC64LE9-NEXT: lfs 1, .LCPI143_1@toc@l(3) 7252; PC64LE9-NEXT: xsrdpi 0, 0 7253; PC64LE9-NEXT: blr 7254entry: 7255 %round = call <1 x float> @llvm.experimental.constrained.round.v1f32( 7256 <1 x float> <float 1.5>, 7257 metadata !"fpexcept.strict") #1 7258 ret <1 x float> %round 7259} 7260 7261define <2 x double> @constrained_vector_round_v2f64() #0 { 7262; PC64LE-LABEL: constrained_vector_round_v2f64: 7263; PC64LE: # %bb.0: # %entry 7264; PC64LE-NEXT: addis 3, 2, .LCPI144_0@toc@ha 7265; PC64LE-NEXT: addis 4, 2, .LCPI144_1@toc@ha 7266; PC64LE-NEXT: addi 3, 3, .LCPI144_0@toc@l 7267; PC64LE-NEXT: lxvd2x 0, 0, 3 7268; PC64LE-NEXT: addi 3, 4, .LCPI144_1@toc@l 7269; PC64LE-NEXT: lxvd2x 1, 0, 3 7270; PC64LE-NEXT: xvrdpi 0, 0 7271; PC64LE-NEXT: xxswapd 34, 1 7272; PC64LE-NEXT: blr 7273; 7274; PC64LE9-LABEL: constrained_vector_round_v2f64: 7275; PC64LE9: # %bb.0: # %entry 7276; PC64LE9-NEXT: addis 3, 2, .LCPI144_0@toc@ha 7277; PC64LE9-NEXT: addi 3, 3, .LCPI144_0@toc@l 7278; PC64LE9-NEXT: lxvx 0, 0, 3 7279; PC64LE9-NEXT: addis 3, 2, .LCPI144_1@toc@ha 7280; PC64LE9-NEXT: addi 3, 3, .LCPI144_1@toc@l 7281; PC64LE9-NEXT: lxvx 34, 0, 3 7282; PC64LE9-NEXT: xvrdpi 0, 0 7283; PC64LE9-NEXT: blr 7284entry: 7285 %round = call <2 x double> @llvm.experimental.constrained.round.v2f64( 7286 <2 x double> <double 1.1, double 1.9>, 7287 metadata !"fpexcept.strict") #1 7288 ret <2 x double> %round 7289} 7290 7291define <3 x float> @constrained_vector_round_v3f32() #0 { 7292; PC64LE-LABEL: constrained_vector_round_v3f32: 7293; PC64LE: # %bb.0: # %entry 7294; PC64LE-NEXT: addis 3, 2, .LCPI145_0@toc@ha 7295; PC64LE-NEXT: addis 4, 2, .LCPI145_1@toc@ha 7296; PC64LE-NEXT: lfs 0, .LCPI145_0@toc@l(3) 7297; PC64LE-NEXT: addis 3, 2, .LCPI145_2@toc@ha 7298; PC64LE-NEXT: lfs 1, .LCPI145_1@toc@l(4) 7299; PC64LE-NEXT: lfs 2, .LCPI145_2@toc@l(3) 7300; PC64LE-NEXT: addis 3, 2, .LCPI145_3@toc@ha 7301; PC64LE-NEXT: addi 3, 3, .LCPI145_3@toc@l 7302; PC64LE-NEXT: xsrdpi 0, 0 7303; PC64LE-NEXT: lvx 2, 0, 3 7304; PC64LE-NEXT: xsrdpi 0, 1 7305; PC64LE-NEXT: xsrdpi 0, 2 7306; PC64LE-NEXT: blr 7307; 7308; PC64LE9-LABEL: constrained_vector_round_v3f32: 7309; PC64LE9: # %bb.0: # %entry 7310; PC64LE9-NEXT: addis 3, 2, .LCPI145_0@toc@ha 7311; PC64LE9-NEXT: lfs 0, .LCPI145_0@toc@l(3) 7312; PC64LE9-NEXT: addis 3, 2, .LCPI145_1@toc@ha 7313; PC64LE9-NEXT: xsrdpi 0, 0 7314; PC64LE9-NEXT: lfs 0, .LCPI145_1@toc@l(3) 7315; PC64LE9-NEXT: addis 3, 2, .LCPI145_2@toc@ha 7316; PC64LE9-NEXT: xsrdpi 0, 0 7317; PC64LE9-NEXT: lfs 0, .LCPI145_2@toc@l(3) 7318; PC64LE9-NEXT: addis 3, 2, .LCPI145_3@toc@ha 7319; PC64LE9-NEXT: addi 3, 3, .LCPI145_3@toc@l 7320; PC64LE9-NEXT: lxvx 34, 0, 3 7321; PC64LE9-NEXT: xsrdpi 0, 0 7322; PC64LE9-NEXT: blr 7323entry: 7324 %round = call <3 x float> @llvm.experimental.constrained.round.v3f32( 7325 <3 x float> <float 1.5, float 2.5, float 3.5>, 7326 metadata !"fpexcept.strict") #1 7327 ret <3 x float> %round 7328} 7329 7330 7331define <3 x double> @constrained_vector_round_v3f64() #0 { 7332; PC64LE-LABEL: constrained_vector_round_v3f64: 7333; PC64LE: # %bb.0: # %entry 7334; PC64LE-NEXT: addis 4, 2, .LCPI146_1@toc@ha 7335; PC64LE-NEXT: addis 3, 2, .LCPI146_0@toc@ha 7336; PC64LE-NEXT: addi 4, 4, .LCPI146_1@toc@l 7337; PC64LE-NEXT: lxvd2x 1, 0, 4 7338; PC64LE-NEXT: addis 4, 2, .LCPI146_3@toc@ha 7339; PC64LE-NEXT: lfs 0, .LCPI146_0@toc@l(3) 7340; PC64LE-NEXT: addis 3, 2, .LCPI146_2@toc@ha 7341; PC64LE-NEXT: lfs 2, .LCPI146_3@toc@l(4) 7342; PC64LE-NEXT: xsrdpi 0, 0 7343; PC64LE-NEXT: xvrdpi 0, 1 7344; PC64LE-NEXT: lfs 1, .LCPI146_2@toc@l(3) 7345; PC64LE-NEXT: fmr 3, 2 7346; PC64LE-NEXT: blr 7347; 7348; PC64LE9-LABEL: constrained_vector_round_v3f64: 7349; PC64LE9: # %bb.0: # %entry 7350; PC64LE9-NEXT: addis 3, 2, .LCPI146_0@toc@ha 7351; PC64LE9-NEXT: lfs 0, .LCPI146_0@toc@l(3) 7352; PC64LE9-NEXT: addis 3, 2, .LCPI146_1@toc@ha 7353; PC64LE9-NEXT: addi 3, 3, .LCPI146_1@toc@l 7354; PC64LE9-NEXT: xsrdpi 0, 0 7355; PC64LE9-NEXT: lxvx 0, 0, 3 7356; PC64LE9-NEXT: addis 3, 2, .LCPI146_2@toc@ha 7357; PC64LE9-NEXT: lfs 1, .LCPI146_2@toc@l(3) 7358; PC64LE9-NEXT: addis 3, 2, .LCPI146_3@toc@ha 7359; PC64LE9-NEXT: lfs 2, .LCPI146_3@toc@l(3) 7360; PC64LE9-NEXT: xvrdpi 0, 0 7361; PC64LE9-NEXT: fmr 3, 2 7362; PC64LE9-NEXT: blr 7363entry: 7364 %round = call <3 x double> @llvm.experimental.constrained.round.v3f64( 7365 <3 x double> <double 1.1, double 1.9, double 1.5>, 7366 metadata !"fpexcept.strict") #1 7367 ret <3 x double> %round 7368} 7369 7370define <1 x float> @constrained_vector_trunc_v1f32() #0 { 7371; PC64LE-LABEL: constrained_vector_trunc_v1f32: 7372; PC64LE: # %bb.0: # %entry 7373; PC64LE-NEXT: addis 3, 2, .LCPI147_0@toc@ha 7374; PC64LE-NEXT: lfs 0, .LCPI147_0@toc@l(3) 7375; PC64LE-NEXT: addis 3, 2, .LCPI147_1@toc@ha 7376; PC64LE-NEXT: lfs 1, .LCPI147_1@toc@l(3) 7377; PC64LE-NEXT: xsrdpiz 0, 0 7378; PC64LE-NEXT: blr 7379; 7380; PC64LE9-LABEL: constrained_vector_trunc_v1f32: 7381; PC64LE9: # %bb.0: # %entry 7382; PC64LE9-NEXT: addis 3, 2, .LCPI147_0@toc@ha 7383; PC64LE9-NEXT: lfs 0, .LCPI147_0@toc@l(3) 7384; PC64LE9-NEXT: addis 3, 2, .LCPI147_1@toc@ha 7385; PC64LE9-NEXT: lfs 1, .LCPI147_1@toc@l(3) 7386; PC64LE9-NEXT: xsrdpiz 0, 0 7387; PC64LE9-NEXT: blr 7388entry: 7389 %trunc = call <1 x float> @llvm.experimental.constrained.trunc.v1f32( 7390 <1 x float> <float 1.5>, 7391 metadata !"fpexcept.strict") #1 7392 ret <1 x float> %trunc 7393} 7394 7395define <2 x double> @constrained_vector_trunc_v2f64() #0 { 7396; PC64LE-LABEL: constrained_vector_trunc_v2f64: 7397; PC64LE: # %bb.0: # %entry 7398; PC64LE-NEXT: addis 3, 2, .LCPI148_0@toc@ha 7399; PC64LE-NEXT: addis 4, 2, .LCPI148_1@toc@ha 7400; PC64LE-NEXT: addi 3, 3, .LCPI148_0@toc@l 7401; PC64LE-NEXT: lxvd2x 0, 0, 3 7402; PC64LE-NEXT: addi 3, 4, .LCPI148_1@toc@l 7403; PC64LE-NEXT: lxvd2x 1, 0, 3 7404; PC64LE-NEXT: xvrdpiz 0, 0 7405; PC64LE-NEXT: xxswapd 34, 1 7406; PC64LE-NEXT: blr 7407; 7408; PC64LE9-LABEL: constrained_vector_trunc_v2f64: 7409; PC64LE9: # %bb.0: # %entry 7410; PC64LE9-NEXT: addis 3, 2, .LCPI148_0@toc@ha 7411; PC64LE9-NEXT: addi 3, 3, .LCPI148_0@toc@l 7412; PC64LE9-NEXT: lxvx 0, 0, 3 7413; PC64LE9-NEXT: addis 3, 2, .LCPI148_1@toc@ha 7414; PC64LE9-NEXT: addi 3, 3, .LCPI148_1@toc@l 7415; PC64LE9-NEXT: lxvx 34, 0, 3 7416; PC64LE9-NEXT: xvrdpiz 0, 0 7417; PC64LE9-NEXT: blr 7418entry: 7419 %trunc = call <2 x double> @llvm.experimental.constrained.trunc.v2f64( 7420 <2 x double> <double 1.1, double 1.9>, 7421 metadata !"fpexcept.strict") #1 7422 ret <2 x double> %trunc 7423} 7424 7425define <3 x float> @constrained_vector_trunc_v3f32() #0 { 7426; PC64LE-LABEL: constrained_vector_trunc_v3f32: 7427; PC64LE: # %bb.0: # %entry 7428; PC64LE-NEXT: addis 3, 2, .LCPI149_0@toc@ha 7429; PC64LE-NEXT: addis 4, 2, .LCPI149_1@toc@ha 7430; PC64LE-NEXT: lfs 0, .LCPI149_0@toc@l(3) 7431; PC64LE-NEXT: addis 3, 2, .LCPI149_2@toc@ha 7432; PC64LE-NEXT: lfs 1, .LCPI149_1@toc@l(4) 7433; PC64LE-NEXT: lfs 2, .LCPI149_2@toc@l(3) 7434; PC64LE-NEXT: addis 3, 2, .LCPI149_3@toc@ha 7435; PC64LE-NEXT: addi 3, 3, .LCPI149_3@toc@l 7436; PC64LE-NEXT: xsrdpiz 0, 0 7437; PC64LE-NEXT: lvx 2, 0, 3 7438; PC64LE-NEXT: xsrdpiz 0, 1 7439; PC64LE-NEXT: xsrdpiz 0, 2 7440; PC64LE-NEXT: blr 7441; 7442; PC64LE9-LABEL: constrained_vector_trunc_v3f32: 7443; PC64LE9: # %bb.0: # %entry 7444; PC64LE9-NEXT: addis 3, 2, .LCPI149_0@toc@ha 7445; PC64LE9-NEXT: lfs 0, .LCPI149_0@toc@l(3) 7446; PC64LE9-NEXT: addis 3, 2, .LCPI149_1@toc@ha 7447; PC64LE9-NEXT: xsrdpiz 0, 0 7448; PC64LE9-NEXT: lfs 0, .LCPI149_1@toc@l(3) 7449; PC64LE9-NEXT: addis 3, 2, .LCPI149_2@toc@ha 7450; PC64LE9-NEXT: xsrdpiz 0, 0 7451; PC64LE9-NEXT: lfs 0, .LCPI149_2@toc@l(3) 7452; PC64LE9-NEXT: addis 3, 2, .LCPI149_3@toc@ha 7453; PC64LE9-NEXT: addi 3, 3, .LCPI149_3@toc@l 7454; PC64LE9-NEXT: lxvx 34, 0, 3 7455; PC64LE9-NEXT: xsrdpiz 0, 0 7456; PC64LE9-NEXT: blr 7457entry: 7458 %trunc = call <3 x float> @llvm.experimental.constrained.trunc.v3f32( 7459 <3 x float> <float 1.5, float 2.5, float 3.5>, 7460 metadata !"fpexcept.strict") #1 7461 ret <3 x float> %trunc 7462} 7463 7464define <3 x double> @constrained_vector_trunc_v3f64() #0 { 7465; PC64LE-LABEL: constrained_vector_trunc_v3f64: 7466; PC64LE: # %bb.0: # %entry 7467; PC64LE-NEXT: addis 3, 2, .LCPI150_0@toc@ha 7468; PC64LE-NEXT: addis 4, 2, .LCPI150_1@toc@ha 7469; PC64LE-NEXT: lfs 0, .LCPI150_0@toc@l(3) 7470; PC64LE-NEXT: addi 3, 4, .LCPI150_1@toc@l 7471; PC64LE-NEXT: lxvd2x 1, 0, 3 7472; PC64LE-NEXT: addis 3, 2, .LCPI150_2@toc@ha 7473; PC64LE-NEXT: xsrdpiz 0, 0 7474; PC64LE-NEXT: xvrdpiz 0, 1 7475; PC64LE-NEXT: lfs 1, .LCPI150_2@toc@l(3) 7476; PC64LE-NEXT: fmr 2, 1 7477; PC64LE-NEXT: fmr 3, 1 7478; PC64LE-NEXT: blr 7479; 7480; PC64LE9-LABEL: constrained_vector_trunc_v3f64: 7481; PC64LE9: # %bb.0: # %entry 7482; PC64LE9-NEXT: addis 3, 2, .LCPI150_0@toc@ha 7483; PC64LE9-NEXT: lfs 0, .LCPI150_0@toc@l(3) 7484; PC64LE9-NEXT: addis 3, 2, .LCPI150_1@toc@ha 7485; PC64LE9-NEXT: addi 3, 3, .LCPI150_1@toc@l 7486; PC64LE9-NEXT: xsrdpiz 0, 0 7487; PC64LE9-NEXT: lxvx 0, 0, 3 7488; PC64LE9-NEXT: addis 3, 2, .LCPI150_2@toc@ha 7489; PC64LE9-NEXT: lfs 1, .LCPI150_2@toc@l(3) 7490; PC64LE9-NEXT: xvrdpiz 0, 0 7491; PC64LE9-NEXT: fmr 2, 1 7492; PC64LE9-NEXT: fmr 3, 1 7493; PC64LE9-NEXT: blr 7494entry: 7495 %trunc = call <3 x double> @llvm.experimental.constrained.trunc.v3f64( 7496 <3 x double> <double 1.1, double 1.9, double 1.5>, 7497 metadata !"fpexcept.strict") #1 7498 ret <3 x double> %trunc 7499} 7500 7501define <1 x double> @constrained_vector_sitofp_v1f64_v1i32(<1 x i32> %x) #0 { 7502; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i32: 7503; PC64LE: # %bb.0: # %entry 7504; PC64LE-NEXT: mtfprwa 0, 3 7505; PC64LE-NEXT: xscvsxddp 1, 0 7506; PC64LE-NEXT: blr 7507; 7508; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i32: 7509; PC64LE9: # %bb.0: # %entry 7510; PC64LE9-NEXT: mtfprwa 0, 3 7511; PC64LE9-NEXT: xscvsxddp 1, 0 7512; PC64LE9-NEXT: blr 7513entry: 7514 %result = call <1 x double> 7515 @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32> %x, 7516 metadata !"round.dynamic", 7517 metadata !"fpexcept.strict") #0 7518 ret <1 x double> %result 7519} 7520 7521define <1 x float> @constrained_vector_sitofp_v1f32_v1i32(<1 x i32> %x) #0 { 7522; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i32: 7523; PC64LE: # %bb.0: # %entry 7524; PC64LE-NEXT: mtfprwa 0, 3 7525; PC64LE-NEXT: xscvsxdsp 1, 0 7526; PC64LE-NEXT: blr 7527; 7528; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i32: 7529; PC64LE9: # %bb.0: # %entry 7530; PC64LE9-NEXT: mtfprwa 0, 3 7531; PC64LE9-NEXT: xscvsxdsp 1, 0 7532; PC64LE9-NEXT: blr 7533entry: 7534 %result = call <1 x float> 7535 @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32> %x, 7536 metadata !"round.dynamic", 7537 metadata !"fpexcept.strict") #0 7538 ret <1 x float> %result 7539} 7540 7541define <1 x double> @constrained_vector_sitofp_v1f64_v1i64(<1 x i64> %x) #0 { 7542; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i64: 7543; PC64LE: # %bb.0: # %entry 7544; PC64LE-NEXT: mtfprd 0, 3 7545; PC64LE-NEXT: xscvsxddp 1, 0 7546; PC64LE-NEXT: blr 7547; 7548; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i64: 7549; PC64LE9: # %bb.0: # %entry 7550; PC64LE9-NEXT: mtfprd 0, 3 7551; PC64LE9-NEXT: xscvsxddp 1, 0 7552; PC64LE9-NEXT: blr 7553entry: 7554 %result = call <1 x double> 7555 @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64> %x, 7556 metadata !"round.dynamic", 7557 metadata !"fpexcept.strict") #0 7558 ret <1 x double> %result 7559} 7560 7561define <1 x float> @constrained_vector_sitofp_v1f32_v1i64(<1 x i64> %x) #0 { 7562; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i64: 7563; PC64LE: # %bb.0: # %entry 7564; PC64LE-NEXT: mtfprd 0, 3 7565; PC64LE-NEXT: xscvsxdsp 1, 0 7566; PC64LE-NEXT: blr 7567; 7568; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i64: 7569; PC64LE9: # %bb.0: # %entry 7570; PC64LE9-NEXT: mtfprd 0, 3 7571; PC64LE9-NEXT: xscvsxdsp 1, 0 7572; PC64LE9-NEXT: blr 7573entry: 7574 %result = call <1 x float> 7575 @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64> %x, 7576 metadata !"round.dynamic", 7577 metadata !"fpexcept.strict") #0 7578 ret <1 x float> %result 7579} 7580 7581define <2 x double> @constrained_vector_sitofp_v2f64_v2i16(<2 x i16> %x) #0 { 7582; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i16: 7583; PC64LE: # %bb.0: # %entry 7584; PC64LE-NEXT: addis 3, 2, .LCPI155_0@toc@ha 7585; PC64LE-NEXT: addi 3, 3, .LCPI155_0@toc@l 7586; PC64LE-NEXT: lvx 3, 0, 3 7587; PC64LE-NEXT: addis 3, 2, .LCPI155_1@toc@ha 7588; PC64LE-NEXT: addi 3, 3, .LCPI155_1@toc@l 7589; PC64LE-NEXT: lxvd2x 0, 0, 3 7590; PC64LE-NEXT: vperm 2, 2, 2, 3 7591; PC64LE-NEXT: xxswapd 35, 0 7592; PC64LE-NEXT: vsld 2, 2, 3 7593; PC64LE-NEXT: vsrad 2, 2, 3 7594; PC64LE-NEXT: xvcvsxddp 34, 34 7595; PC64LE-NEXT: blr 7596; 7597; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i16: 7598; PC64LE9: # %bb.0: # %entry 7599; PC64LE9-NEXT: addis 3, 2, .LCPI155_0@toc@ha 7600; PC64LE9-NEXT: addi 3, 3, .LCPI155_0@toc@l 7601; PC64LE9-NEXT: lxvx 35, 0, 3 7602; PC64LE9-NEXT: vperm 2, 2, 2, 3 7603; PC64LE9-NEXT: vextsh2d 2, 2 7604; PC64LE9-NEXT: xvcvsxddp 34, 34 7605; PC64LE9-NEXT: blr 7606entry: 7607 %result = call <2 x double> 7608 @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16> %x, 7609 metadata !"round.dynamic", 7610 metadata !"fpexcept.strict") #0 7611 ret <2 x double> %result 7612} 7613 7614define <2 x double> @constrained_vector_sitofp_v2f64_v2i32(<2 x i32> %x) #0 { 7615; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i32: 7616; PC64LE: # %bb.0: # %entry 7617; PC64LE-NEXT: xxswapd 0, 34 7618; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 7619; PC64LE-NEXT: mffprwz 3, 0 7620; PC64LE-NEXT: mffprwz 4, 1 7621; PC64LE-NEXT: mtfprwa 0, 3 7622; PC64LE-NEXT: mtfprwa 1, 4 7623; PC64LE-NEXT: xscvsxddp 0, 0 7624; PC64LE-NEXT: xscvsxddp 1, 1 7625; PC64LE-NEXT: xxmrghd 34, 1, 0 7626; PC64LE-NEXT: blr 7627; 7628; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i32: 7629; PC64LE9: # %bb.0: # %entry 7630; PC64LE9-NEXT: li 3, 0 7631; PC64LE9-NEXT: vextuwrx 3, 3, 2 7632; PC64LE9-NEXT: mtfprwa 0, 3 7633; PC64LE9-NEXT: li 3, 4 7634; PC64LE9-NEXT: vextuwrx 3, 3, 2 7635; PC64LE9-NEXT: xscvsxddp 0, 0 7636; PC64LE9-NEXT: mtfprwa 1, 3 7637; PC64LE9-NEXT: xscvsxddp 1, 1 7638; PC64LE9-NEXT: xxmrghd 34, 1, 0 7639; PC64LE9-NEXT: blr 7640entry: 7641 %result = call <2 x double> 7642 @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32> %x, 7643 metadata !"round.dynamic", 7644 metadata !"fpexcept.strict") #0 7645 ret <2 x double> %result 7646} 7647 7648define <2 x float> @constrained_vector_sitofp_v2f32_v2i32(<2 x i32> %x) #0 { 7649; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i32: 7650; PC64LE: # %bb.0: # %entry 7651; PC64LE-NEXT: xxswapd 0, 34 7652; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 7653; PC64LE-NEXT: mffprwz 3, 0 7654; PC64LE-NEXT: mffprwz 4, 1 7655; PC64LE-NEXT: mtfprwa 0, 3 7656; PC64LE-NEXT: mtfprwa 1, 4 7657; PC64LE-NEXT: xscvsxdsp 0, 0 7658; PC64LE-NEXT: xscvsxdsp 1, 1 7659; PC64LE-NEXT: xscvdpspn 34, 0 7660; PC64LE-NEXT: xscvdpspn 35, 1 7661; PC64LE-NEXT: vmrghw 2, 3, 2 7662; PC64LE-NEXT: blr 7663; 7664; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i32: 7665; PC64LE9: # %bb.0: # %entry 7666; PC64LE9-NEXT: li 3, 0 7667; PC64LE9-NEXT: vextuwrx 3, 3, 2 7668; PC64LE9-NEXT: mtfprwa 0, 3 7669; PC64LE9-NEXT: li 3, 4 7670; PC64LE9-NEXT: xscvsxdsp 0, 0 7671; PC64LE9-NEXT: vextuwrx 3, 3, 2 7672; PC64LE9-NEXT: xscvdpspn 35, 0 7673; PC64LE9-NEXT: mtfprwa 0, 3 7674; PC64LE9-NEXT: xscvsxdsp 0, 0 7675; PC64LE9-NEXT: xscvdpspn 34, 0 7676; PC64LE9-NEXT: vmrghw 2, 2, 3 7677; PC64LE9-NEXT: blr 7678entry: 7679 %result = call <2 x float> 7680 @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32> %x, 7681 metadata !"round.dynamic", 7682 metadata !"fpexcept.strict") #0 7683 ret <2 x float> %result 7684} 7685 7686define <2 x double> @constrained_vector_sitofp_v2f64_v2i64(<2 x i64> %x) #0 { 7687; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i64: 7688; PC64LE: # %bb.0: # %entry 7689; PC64LE-NEXT: xvcvsxddp 34, 34 7690; PC64LE-NEXT: blr 7691; 7692; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i64: 7693; PC64LE9: # %bb.0: # %entry 7694; PC64LE9-NEXT: xvcvsxddp 34, 34 7695; PC64LE9-NEXT: blr 7696entry: 7697 %result = call <2 x double> 7698 @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64> %x, 7699 metadata !"round.dynamic", 7700 metadata !"fpexcept.strict") #0 7701 ret <2 x double> %result 7702} 7703 7704define <2 x float> @constrained_vector_sitofp_v2f32_v2i64(<2 x i64> %x) #0 { 7705; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i64: 7706; PC64LE: # %bb.0: # %entry 7707; PC64LE-NEXT: xxswapd 0, 34 7708; PC64LE-NEXT: mfvsrd 3, 34 7709; PC64LE-NEXT: mffprd 4, 0 7710; PC64LE-NEXT: mtfprd 0, 3 7711; PC64LE-NEXT: mtfprd 1, 4 7712; PC64LE-NEXT: xscvsxdsp 0, 0 7713; PC64LE-NEXT: xscvsxdsp 1, 1 7714; PC64LE-NEXT: xscvdpspn 34, 0 7715; PC64LE-NEXT: xscvdpspn 35, 1 7716; PC64LE-NEXT: vmrghw 2, 2, 3 7717; PC64LE-NEXT: blr 7718; 7719; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i64: 7720; PC64LE9: # %bb.0: # %entry 7721; PC64LE9-NEXT: mfvsrld 3, 34 7722; PC64LE9-NEXT: mtfprd 0, 3 7723; PC64LE9-NEXT: mfvsrd 3, 34 7724; PC64LE9-NEXT: xscvsxdsp 0, 0 7725; PC64LE9-NEXT: xscvdpspn 35, 0 7726; PC64LE9-NEXT: mtfprd 0, 3 7727; PC64LE9-NEXT: xscvsxdsp 0, 0 7728; PC64LE9-NEXT: xscvdpspn 34, 0 7729; PC64LE9-NEXT: vmrghw 2, 2, 3 7730; PC64LE9-NEXT: blr 7731entry: 7732 %result = call <2 x float> 7733 @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64> %x, 7734 metadata !"round.dynamic", 7735 metadata !"fpexcept.strict") #0 7736 ret <2 x float> %result 7737} 7738 7739define <3 x double> @constrained_vector_sitofp_v3f64_v3i32(<3 x i32> %x) #0 { 7740; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i32: 7741; PC64LE: # %bb.0: # %entry 7742; PC64LE-NEXT: xxswapd 0, 34 7743; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 7744; PC64LE-NEXT: mfvsrwz 3, 34 7745; PC64LE-NEXT: mtfprwa 3, 3 7746; PC64LE-NEXT: mffprwz 3, 0 7747; PC64LE-NEXT: mffprwz 4, 1 7748; PC64LE-NEXT: mtfprwa 0, 3 7749; PC64LE-NEXT: mtfprwa 2, 4 7750; PC64LE-NEXT: xscvsxddp 1, 0 7751; PC64LE-NEXT: xscvsxddp 2, 2 7752; PC64LE-NEXT: xscvsxddp 3, 3 7753; PC64LE-NEXT: blr 7754; 7755; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i32: 7756; PC64LE9: # %bb.0: # %entry 7757; PC64LE9-NEXT: li 3, 0 7758; PC64LE9-NEXT: vextuwrx 3, 3, 2 7759; PC64LE9-NEXT: mtfprwa 0, 3 7760; PC64LE9-NEXT: li 3, 4 7761; PC64LE9-NEXT: vextuwrx 3, 3, 2 7762; PC64LE9-NEXT: xscvsxddp 1, 0 7763; PC64LE9-NEXT: mtfprwa 0, 3 7764; PC64LE9-NEXT: mfvsrwz 3, 34 7765; PC64LE9-NEXT: xscvsxddp 2, 0 7766; PC64LE9-NEXT: mtfprwa 0, 3 7767; PC64LE9-NEXT: xscvsxddp 3, 0 7768; PC64LE9-NEXT: blr 7769entry: 7770 %result = call <3 x double> 7771 @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32> %x, 7772 metadata !"round.dynamic", 7773 metadata !"fpexcept.strict") #0 7774 ret <3 x double> %result 7775} 7776 7777define <3 x float> @constrained_vector_sitofp_v3f32_v3i32(<3 x i32> %x) #0 { 7778; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i32: 7779; PC64LE: # %bb.0: # %entry 7780; PC64LE-NEXT: xxswapd 0, 34 7781; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 7782; PC64LE-NEXT: mffprwz 3, 0 7783; PC64LE-NEXT: mffprwz 4, 1 7784; PC64LE-NEXT: mtfprwa 0, 3 7785; PC64LE-NEXT: mtfprwa 1, 4 7786; PC64LE-NEXT: xscvsxdsp 0, 0 7787; PC64LE-NEXT: xscvsxdsp 1, 1 7788; PC64LE-NEXT: mfvsrwz 3, 34 7789; PC64LE-NEXT: mtfprwa 2, 3 7790; PC64LE-NEXT: addis 3, 2, .LCPI161_0@toc@ha 7791; PC64LE-NEXT: addi 3, 3, .LCPI161_0@toc@l 7792; PC64LE-NEXT: xscvdpspn 34, 0 7793; PC64LE-NEXT: lvx 4, 0, 3 7794; PC64LE-NEXT: xscvdpspn 35, 1 7795; PC64LE-NEXT: xscvsxdsp 0, 2 7796; PC64LE-NEXT: vmrghw 2, 3, 2 7797; PC64LE-NEXT: xscvdpspn 35, 0 7798; PC64LE-NEXT: vperm 2, 3, 2, 4 7799; PC64LE-NEXT: blr 7800; 7801; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i32: 7802; PC64LE9: # %bb.0: # %entry 7803; PC64LE9-NEXT: li 3, 0 7804; PC64LE9-NEXT: vextuwrx 3, 3, 2 7805; PC64LE9-NEXT: mtfprwa 0, 3 7806; PC64LE9-NEXT: li 3, 4 7807; PC64LE9-NEXT: xscvsxdsp 0, 0 7808; PC64LE9-NEXT: vextuwrx 3, 3, 2 7809; PC64LE9-NEXT: xscvdpspn 35, 0 7810; PC64LE9-NEXT: mtfprwa 0, 3 7811; PC64LE9-NEXT: addis 3, 2, .LCPI161_0@toc@ha 7812; PC64LE9-NEXT: xscvsxdsp 0, 0 7813; PC64LE9-NEXT: addi 3, 3, .LCPI161_0@toc@l 7814; PC64LE9-NEXT: xscvdpspn 36, 0 7815; PC64LE9-NEXT: vmrghw 3, 4, 3 7816; PC64LE9-NEXT: lxvx 36, 0, 3 7817; PC64LE9-NEXT: mfvsrwz 3, 34 7818; PC64LE9-NEXT: mtfprwa 0, 3 7819; PC64LE9-NEXT: xscvsxdsp 0, 0 7820; PC64LE9-NEXT: xscvdpspn 34, 0 7821; PC64LE9-NEXT: vperm 2, 2, 3, 4 7822; PC64LE9-NEXT: blr 7823entry: 7824 %result = call <3 x float> 7825 @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32> %x, 7826 metadata !"round.dynamic", 7827 metadata !"fpexcept.strict") #0 7828 ret <3 x float> %result 7829} 7830 7831define <3 x double> @constrained_vector_sitofp_v3f64_v3i64(<3 x i64> %x) #0 { 7832; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i64: 7833; PC64LE: # %bb.0: # %entry 7834; PC64LE-NEXT: mtfprd 0, 3 7835; PC64LE-NEXT: mtfprd 2, 4 7836; PC64LE-NEXT: mtfprd 3, 5 7837; PC64LE-NEXT: xscvsxddp 1, 0 7838; PC64LE-NEXT: xscvsxddp 2, 2 7839; PC64LE-NEXT: xscvsxddp 3, 3 7840; PC64LE-NEXT: blr 7841; 7842; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i64: 7843; PC64LE9: # %bb.0: # %entry 7844; PC64LE9-NEXT: mtfprd 0, 3 7845; PC64LE9-NEXT: xscvsxddp 1, 0 7846; PC64LE9-NEXT: mtfprd 0, 4 7847; PC64LE9-NEXT: xscvsxddp 2, 0 7848; PC64LE9-NEXT: mtfprd 0, 5 7849; PC64LE9-NEXT: xscvsxddp 3, 0 7850; PC64LE9-NEXT: blr 7851entry: 7852 %result = call <3 x double> 7853 @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64> %x, 7854 metadata !"round.dynamic", 7855 metadata !"fpexcept.strict") #0 7856 ret <3 x double> %result 7857} 7858 7859define <3 x float> @constrained_vector_sitofp_v3f32_v3i64(<3 x i64> %x) #0 { 7860; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i64: 7861; PC64LE: # %bb.0: # %entry 7862; PC64LE-NEXT: mtfprd 0, 3 7863; PC64LE-NEXT: addis 3, 2, .LCPI163_0@toc@ha 7864; PC64LE-NEXT: mtfprd 1, 4 7865; PC64LE-NEXT: addi 3, 3, .LCPI163_0@toc@l 7866; PC64LE-NEXT: xscvsxdsp 0, 0 7867; PC64LE-NEXT: lvx 4, 0, 3 7868; PC64LE-NEXT: xscvsxdsp 1, 1 7869; PC64LE-NEXT: mtfprd 2, 5 7870; PC64LE-NEXT: xscvdpspn 34, 0 7871; PC64LE-NEXT: xscvdpspn 35, 1 7872; PC64LE-NEXT: xscvsxdsp 0, 2 7873; PC64LE-NEXT: vmrghw 2, 3, 2 7874; PC64LE-NEXT: xscvdpspn 35, 0 7875; PC64LE-NEXT: vperm 2, 3, 2, 4 7876; PC64LE-NEXT: blr 7877; 7878; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i64: 7879; PC64LE9: # %bb.0: # %entry 7880; PC64LE9-NEXT: mtfprd 0, 3 7881; PC64LE9-NEXT: addis 3, 2, .LCPI163_0@toc@ha 7882; PC64LE9-NEXT: xscvsxdsp 0, 0 7883; PC64LE9-NEXT: addi 3, 3, .LCPI163_0@toc@l 7884; PC64LE9-NEXT: xscvdpspn 34, 0 7885; PC64LE9-NEXT: mtfprd 0, 4 7886; PC64LE9-NEXT: xscvsxdsp 0, 0 7887; PC64LE9-NEXT: xscvdpspn 35, 0 7888; PC64LE9-NEXT: mtfprd 0, 5 7889; PC64LE9-NEXT: xscvsxdsp 0, 0 7890; PC64LE9-NEXT: vmrghw 2, 3, 2 7891; PC64LE9-NEXT: lxvx 35, 0, 3 7892; PC64LE9-NEXT: xscvdpspn 36, 0 7893; PC64LE9-NEXT: vperm 2, 4, 2, 3 7894; PC64LE9-NEXT: blr 7895entry: 7896 %result = call <3 x float> 7897 @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64> %x, 7898 metadata !"round.dynamic", 7899 metadata !"fpexcept.strict") #0 7900 ret <3 x float> %result 7901} 7902 7903define <4 x double> @constrained_vector_sitofp_v4f64_v4i32(<4 x i32> %x) #0 { 7904; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i32: 7905; PC64LE: # %bb.0: # %entry 7906; PC64LE-NEXT: xxswapd 0, 34 7907; PC64LE-NEXT: mfvsrwz 3, 34 7908; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 7909; PC64LE-NEXT: mtfprwa 2, 3 7910; PC64LE-NEXT: mffprwz 3, 0 7911; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 7912; PC64LE-NEXT: mffprwz 4, 1 7913; PC64LE-NEXT: mtfprwa 1, 3 7914; PC64LE-NEXT: mffprwz 3, 0 7915; PC64LE-NEXT: mtfprwa 3, 4 7916; PC64LE-NEXT: xscvsxddp 0, 2 7917; PC64LE-NEXT: mtfprwa 2, 3 7918; PC64LE-NEXT: xscvsxddp 1, 1 7919; PC64LE-NEXT: xscvsxddp 3, 3 7920; PC64LE-NEXT: xscvsxddp 2, 2 7921; PC64LE-NEXT: xxmrghd 34, 3, 1 7922; PC64LE-NEXT: xxmrghd 35, 2, 0 7923; PC64LE-NEXT: blr 7924; 7925; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i32: 7926; PC64LE9: # %bb.0: # %entry 7927; PC64LE9-NEXT: li 3, 0 7928; PC64LE9-NEXT: vextuwrx 3, 3, 2 7929; PC64LE9-NEXT: mtfprwa 0, 3 7930; PC64LE9-NEXT: li 3, 4 7931; PC64LE9-NEXT: vextuwrx 3, 3, 2 7932; PC64LE9-NEXT: xscvsxddp 0, 0 7933; PC64LE9-NEXT: mtfprwa 1, 3 7934; PC64LE9-NEXT: li 3, 12 7935; PC64LE9-NEXT: xscvsxddp 1, 1 7936; PC64LE9-NEXT: vextuwrx 3, 3, 2 7937; PC64LE9-NEXT: xxmrghd 0, 1, 0 7938; PC64LE9-NEXT: mtfprwa 1, 3 7939; PC64LE9-NEXT: mfvsrwz 3, 34 7940; PC64LE9-NEXT: mtfprwa 2, 3 7941; PC64LE9-NEXT: xscvsxddp 1, 1 7942; PC64LE9-NEXT: xscvsxddp 2, 2 7943; PC64LE9-NEXT: xxlor 34, 0, 0 7944; PC64LE9-NEXT: xxmrghd 35, 1, 2 7945; PC64LE9-NEXT: blr 7946entry: 7947 %result = call <4 x double> 7948 @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32> %x, 7949 metadata !"round.dynamic", 7950 metadata !"fpexcept.strict") #0 7951 ret <4 x double> %result 7952} 7953 7954define <4 x float> @constrained_vector_sitofp_v4f32_v4i16(<4 x i16> %x) #0 { 7955; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i16: 7956; PC64LE: # %bb.0: # %entry 7957; PC64LE-NEXT: vmrglh 2, 2, 2 7958; PC64LE-NEXT: vspltisw 3, 8 7959; PC64LE-NEXT: vadduwm 3, 3, 3 7960; PC64LE-NEXT: vslw 2, 2, 3 7961; PC64LE-NEXT: vsraw 2, 2, 3 7962; PC64LE-NEXT: xvcvsxwsp 34, 34 7963; PC64LE-NEXT: blr 7964; 7965; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i16: 7966; PC64LE9: # %bb.0: # %entry 7967; PC64LE9-NEXT: vmrglh 2, 2, 2 7968; PC64LE9-NEXT: vextsh2w 2, 2 7969; PC64LE9-NEXT: xvcvsxwsp 34, 34 7970; PC64LE9-NEXT: blr 7971entry: 7972 %result = call <4 x float> 7973 @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16> %x, 7974 metadata !"round.dynamic", 7975 metadata !"fpexcept.strict") #0 7976 ret <4 x float> %result 7977} 7978 7979define <4 x float> @constrained_vector_sitofp_v4f32_v4i32(<4 x i32> %x) #0 { 7980; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i32: 7981; PC64LE: # %bb.0: # %entry 7982; PC64LE-NEXT: xvcvsxwsp 34, 34 7983; PC64LE-NEXT: blr 7984; 7985; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i32: 7986; PC64LE9: # %bb.0: # %entry 7987; PC64LE9-NEXT: xvcvsxwsp 34, 34 7988; PC64LE9-NEXT: blr 7989entry: 7990 %result = call <4 x float> 7991 @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32> %x, 7992 metadata !"round.dynamic", 7993 metadata !"fpexcept.strict") #0 7994 ret <4 x float> %result 7995} 7996 7997define <4 x double> @constrained_vector_sitofp_v4f64_v4i64(<4 x i64> %x) #0 { 7998; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i64: 7999; PC64LE: # %bb.0: # %entry 8000; PC64LE-NEXT: xvcvsxddp 35, 35 8001; PC64LE-NEXT: xvcvsxddp 34, 34 8002; PC64LE-NEXT: blr 8003; 8004; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i64: 8005; PC64LE9: # %bb.0: # %entry 8006; PC64LE9-NEXT: xvcvsxddp 35, 35 8007; PC64LE9-NEXT: xvcvsxddp 34, 34 8008; PC64LE9-NEXT: blr 8009entry: 8010 %result = call <4 x double> 8011 @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64> %x, 8012 metadata !"round.dynamic", 8013 metadata !"fpexcept.strict") #0 8014 ret <4 x double> %result 8015} 8016 8017define <4 x float> @constrained_vector_sitofp_v4f32_v4i64(<4 x i64> %x) #0 { 8018; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i64: 8019; PC64LE: # %bb.0: # %entry 8020; PC64LE-NEXT: xxswapd 0, 34 8021; PC64LE-NEXT: mfvsrd 3, 34 8022; PC64LE-NEXT: xxswapd 2, 35 8023; PC64LE-NEXT: mfvsrd 4, 35 8024; PC64LE-NEXT: mtfprd 1, 3 8025; PC64LE-NEXT: mffprd 3, 0 8026; PC64LE-NEXT: mtfprd 0, 4 8027; PC64LE-NEXT: mtfprd 3, 3 8028; PC64LE-NEXT: mffprd 3, 2 8029; PC64LE-NEXT: xscvsxdsp 1, 1 8030; PC64LE-NEXT: mtfprd 2, 3 8031; PC64LE-NEXT: xscvsxdsp 0, 0 8032; PC64LE-NEXT: xscvsxdsp 3, 3 8033; PC64LE-NEXT: xscvsxdsp 2, 2 8034; PC64LE-NEXT: xxmrghd 0, 0, 1 8035; PC64LE-NEXT: xxmrghd 1, 2, 3 8036; PC64LE-NEXT: xvcvdpsp 34, 0 8037; PC64LE-NEXT: xvcvdpsp 35, 1 8038; PC64LE-NEXT: vmrgew 2, 2, 3 8039; PC64LE-NEXT: blr 8040; 8041; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i64: 8042; PC64LE9: # %bb.0: # %entry 8043; PC64LE9-NEXT: mfvsrld 3, 34 8044; PC64LE9-NEXT: mtfprd 0, 3 8045; PC64LE9-NEXT: mfvsrld 3, 35 8046; PC64LE9-NEXT: xscvsxdsp 0, 0 8047; PC64LE9-NEXT: mtfprd 1, 3 8048; PC64LE9-NEXT: mfvsrd 3, 34 8049; PC64LE9-NEXT: xscvsxdsp 1, 1 8050; PC64LE9-NEXT: xxmrghd 0, 1, 0 8051; PC64LE9-NEXT: xvcvdpsp 36, 0 8052; PC64LE9-NEXT: mtfprd 0, 3 8053; PC64LE9-NEXT: mfvsrd 3, 35 8054; PC64LE9-NEXT: mtfprd 1, 3 8055; PC64LE9-NEXT: xscvsxdsp 0, 0 8056; PC64LE9-NEXT: xscvsxdsp 1, 1 8057; PC64LE9-NEXT: xxmrghd 0, 1, 0 8058; PC64LE9-NEXT: xvcvdpsp 34, 0 8059; PC64LE9-NEXT: vmrgew 2, 2, 4 8060; PC64LE9-NEXT: blr 8061entry: 8062 %result = call <4 x float> 8063 @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64> %x, 8064 metadata !"round.dynamic", 8065 metadata !"fpexcept.strict") #0 8066 ret <4 x float> %result 8067} 8068 8069define <1 x double> @constrained_vector_uitofp_v1f64_v1i32(<1 x i32> %x) #0 { 8070; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i32: 8071; PC64LE: # %bb.0: # %entry 8072; PC64LE-NEXT: mtfprwz 0, 3 8073; PC64LE-NEXT: xscvuxddp 1, 0 8074; PC64LE-NEXT: blr 8075; 8076; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i32: 8077; PC64LE9: # %bb.0: # %entry 8078; PC64LE9-NEXT: mtfprwz 0, 3 8079; PC64LE9-NEXT: xscvuxddp 1, 0 8080; PC64LE9-NEXT: blr 8081entry: 8082 %result = call <1 x double> 8083 @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32> %x, 8084 metadata !"round.dynamic", 8085 metadata !"fpexcept.strict") #0 8086 ret <1 x double> %result 8087} 8088 8089define <1 x float> @constrained_vector_uitofp_v1f32_v1i32(<1 x i32> %x) #0 { 8090; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i32: 8091; PC64LE: # %bb.0: # %entry 8092; PC64LE-NEXT: mtfprwz 0, 3 8093; PC64LE-NEXT: xscvuxdsp 1, 0 8094; PC64LE-NEXT: blr 8095; 8096; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i32: 8097; PC64LE9: # %bb.0: # %entry 8098; PC64LE9-NEXT: mtfprwz 0, 3 8099; PC64LE9-NEXT: xscvuxdsp 1, 0 8100; PC64LE9-NEXT: blr 8101entry: 8102 %result = call <1 x float> 8103 @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32> %x, 8104 metadata !"round.dynamic", 8105 metadata !"fpexcept.strict") #0 8106 ret <1 x float> %result 8107} 8108 8109define <1 x double> @constrained_vector_uitofp_v1f64_v1i64(<1 x i64> %x) #0 { 8110; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i64: 8111; PC64LE: # %bb.0: # %entry 8112; PC64LE-NEXT: mtfprd 0, 3 8113; PC64LE-NEXT: xscvuxddp 1, 0 8114; PC64LE-NEXT: blr 8115; 8116; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i64: 8117; PC64LE9: # %bb.0: # %entry 8118; PC64LE9-NEXT: mtfprd 0, 3 8119; PC64LE9-NEXT: xscvuxddp 1, 0 8120; PC64LE9-NEXT: blr 8121entry: 8122 %result = call <1 x double> 8123 @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64> %x, 8124 metadata !"round.dynamic", 8125 metadata !"fpexcept.strict") #0 8126 ret <1 x double> %result 8127} 8128 8129define <1 x float> @constrained_vector_uitofp_v1f32_v1i64(<1 x i64> %x) #0 { 8130; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i64: 8131; PC64LE: # %bb.0: # %entry 8132; PC64LE-NEXT: mtfprd 0, 3 8133; PC64LE-NEXT: xscvuxdsp 1, 0 8134; PC64LE-NEXT: blr 8135; 8136; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i64: 8137; PC64LE9: # %bb.0: # %entry 8138; PC64LE9-NEXT: mtfprd 0, 3 8139; PC64LE9-NEXT: xscvuxdsp 1, 0 8140; PC64LE9-NEXT: blr 8141entry: 8142 %result = call <1 x float> 8143 @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64> %x, 8144 metadata !"round.dynamic", 8145 metadata !"fpexcept.strict") #0 8146 ret <1 x float> %result 8147} 8148 8149define <2 x double> @constrained_vector_uitofp_v2f64_v2i16(<2 x i16> %x) #0 { 8150; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i16: 8151; PC64LE: # %bb.0: # %entry 8152; PC64LE-NEXT: addis 3, 2, .LCPI173_0@toc@ha 8153; PC64LE-NEXT: xxlxor 36, 36, 36 8154; PC64LE-NEXT: addi 3, 3, .LCPI173_0@toc@l 8155; PC64LE-NEXT: lvx 3, 0, 3 8156; PC64LE-NEXT: vperm 2, 4, 2, 3 8157; PC64LE-NEXT: xvcvuxddp 34, 34 8158; PC64LE-NEXT: blr 8159; 8160; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i16: 8161; PC64LE9: # %bb.0: # %entry 8162; PC64LE9-NEXT: addis 3, 2, .LCPI173_0@toc@ha 8163; PC64LE9-NEXT: xxlxor 36, 36, 36 8164; PC64LE9-NEXT: addi 3, 3, .LCPI173_0@toc@l 8165; PC64LE9-NEXT: lxvx 35, 0, 3 8166; PC64LE9-NEXT: vperm 2, 4, 2, 3 8167; PC64LE9-NEXT: xvcvuxddp 34, 34 8168; PC64LE9-NEXT: blr 8169entry: 8170 %result = call <2 x double> 8171 @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16> %x, 8172 metadata !"round.dynamic", 8173 metadata !"fpexcept.strict") #0 8174 ret <2 x double> %result 8175} 8176 8177define <2 x double> @constrained_vector_uitofp_v2f64_v2i32(<2 x i32> %x) #0 { 8178; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i32: 8179; PC64LE: # %bb.0: # %entry 8180; PC64LE-NEXT: xxswapd 0, 34 8181; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 8182; PC64LE-NEXT: mffprwz 3, 0 8183; PC64LE-NEXT: mffprwz 4, 1 8184; PC64LE-NEXT: mtfprwz 0, 3 8185; PC64LE-NEXT: mtfprwz 1, 4 8186; PC64LE-NEXT: xscvuxddp 0, 0 8187; PC64LE-NEXT: xscvuxddp 1, 1 8188; PC64LE-NEXT: xxmrghd 34, 1, 0 8189; PC64LE-NEXT: blr 8190; 8191; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i32: 8192; PC64LE9: # %bb.0: # %entry 8193; PC64LE9-NEXT: li 3, 0 8194; PC64LE9-NEXT: vextuwrx 3, 3, 2 8195; PC64LE9-NEXT: mtfprwz 0, 3 8196; PC64LE9-NEXT: li 3, 4 8197; PC64LE9-NEXT: vextuwrx 3, 3, 2 8198; PC64LE9-NEXT: xscvuxddp 0, 0 8199; PC64LE9-NEXT: mtfprwz 1, 3 8200; PC64LE9-NEXT: xscvuxddp 1, 1 8201; PC64LE9-NEXT: xxmrghd 34, 1, 0 8202; PC64LE9-NEXT: blr 8203entry: 8204 %result = call <2 x double> 8205 @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32> %x, 8206 metadata !"round.dynamic", 8207 metadata !"fpexcept.strict") #0 8208 ret <2 x double> %result 8209} 8210 8211define <2 x float> @constrained_vector_uitofp_v2f32_v2i32(<2 x i32> %x) #0 { 8212; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i32: 8213; PC64LE: # %bb.0: # %entry 8214; PC64LE-NEXT: xxswapd 0, 34 8215; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 8216; PC64LE-NEXT: mffprwz 3, 0 8217; PC64LE-NEXT: mffprwz 4, 1 8218; PC64LE-NEXT: mtfprwz 0, 3 8219; PC64LE-NEXT: mtfprwz 1, 4 8220; PC64LE-NEXT: xscvuxdsp 0, 0 8221; PC64LE-NEXT: xscvuxdsp 1, 1 8222; PC64LE-NEXT: xscvdpspn 34, 0 8223; PC64LE-NEXT: xscvdpspn 35, 1 8224; PC64LE-NEXT: vmrghw 2, 3, 2 8225; PC64LE-NEXT: blr 8226; 8227; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i32: 8228; PC64LE9: # %bb.0: # %entry 8229; PC64LE9-NEXT: li 3, 0 8230; PC64LE9-NEXT: vextuwrx 3, 3, 2 8231; PC64LE9-NEXT: mtfprwz 0, 3 8232; PC64LE9-NEXT: li 3, 4 8233; PC64LE9-NEXT: xscvuxdsp 0, 0 8234; PC64LE9-NEXT: vextuwrx 3, 3, 2 8235; PC64LE9-NEXT: xscvdpspn 35, 0 8236; PC64LE9-NEXT: mtfprwz 0, 3 8237; PC64LE9-NEXT: xscvuxdsp 0, 0 8238; PC64LE9-NEXT: xscvdpspn 34, 0 8239; PC64LE9-NEXT: vmrghw 2, 2, 3 8240; PC64LE9-NEXT: blr 8241entry: 8242 %result = call <2 x float> 8243 @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32> %x, 8244 metadata !"round.dynamic", 8245 metadata !"fpexcept.strict") #0 8246 ret <2 x float> %result 8247} 8248 8249define <2 x double> @constrained_vector_uitofp_v2f64_v2i64(<2 x i64> %x) #0 { 8250; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i64: 8251; PC64LE: # %bb.0: # %entry 8252; PC64LE-NEXT: xvcvuxddp 34, 34 8253; PC64LE-NEXT: blr 8254; 8255; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i64: 8256; PC64LE9: # %bb.0: # %entry 8257; PC64LE9-NEXT: xvcvuxddp 34, 34 8258; PC64LE9-NEXT: blr 8259entry: 8260 %result = call <2 x double> 8261 @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64> %x, 8262 metadata !"round.dynamic", 8263 metadata !"fpexcept.strict") #0 8264 ret <2 x double> %result 8265} 8266 8267define <2 x float> @constrained_vector_uitofp_v2f32_v2i64(<2 x i64> %x) #0 { 8268; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i64: 8269; PC64LE: # %bb.0: # %entry 8270; PC64LE-NEXT: xxswapd 0, 34 8271; PC64LE-NEXT: mfvsrd 3, 34 8272; PC64LE-NEXT: mffprd 4, 0 8273; PC64LE-NEXT: mtfprd 0, 3 8274; PC64LE-NEXT: mtfprd 1, 4 8275; PC64LE-NEXT: xscvuxdsp 0, 0 8276; PC64LE-NEXT: xscvuxdsp 1, 1 8277; PC64LE-NEXT: xscvdpspn 34, 0 8278; PC64LE-NEXT: xscvdpspn 35, 1 8279; PC64LE-NEXT: vmrghw 2, 2, 3 8280; PC64LE-NEXT: blr 8281; 8282; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i64: 8283; PC64LE9: # %bb.0: # %entry 8284; PC64LE9-NEXT: mfvsrld 3, 34 8285; PC64LE9-NEXT: mtfprd 0, 3 8286; PC64LE9-NEXT: mfvsrd 3, 34 8287; PC64LE9-NEXT: xscvuxdsp 0, 0 8288; PC64LE9-NEXT: xscvdpspn 35, 0 8289; PC64LE9-NEXT: mtfprd 0, 3 8290; PC64LE9-NEXT: xscvuxdsp 0, 0 8291; PC64LE9-NEXT: xscvdpspn 34, 0 8292; PC64LE9-NEXT: vmrghw 2, 2, 3 8293; PC64LE9-NEXT: blr 8294entry: 8295 %result = call <2 x float> 8296 @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64> %x, 8297 metadata !"round.dynamic", 8298 metadata !"fpexcept.strict") #0 8299 ret <2 x float> %result 8300} 8301 8302define <3 x double> @constrained_vector_uitofp_v3f64_v3i32(<3 x i32> %x) #0 { 8303; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i32: 8304; PC64LE: # %bb.0: # %entry 8305; PC64LE-NEXT: xxswapd 0, 34 8306; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 8307; PC64LE-NEXT: mfvsrwz 3, 34 8308; PC64LE-NEXT: mtfprwz 3, 3 8309; PC64LE-NEXT: mffprwz 3, 0 8310; PC64LE-NEXT: mffprwz 4, 1 8311; PC64LE-NEXT: mtfprwz 0, 3 8312; PC64LE-NEXT: mtfprwz 2, 4 8313; PC64LE-NEXT: xscvuxddp 1, 0 8314; PC64LE-NEXT: xscvuxddp 2, 2 8315; PC64LE-NEXT: xscvuxddp 3, 3 8316; PC64LE-NEXT: blr 8317; 8318; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i32: 8319; PC64LE9: # %bb.0: # %entry 8320; PC64LE9-NEXT: li 3, 0 8321; PC64LE9-NEXT: vextuwrx 3, 3, 2 8322; PC64LE9-NEXT: mtfprwz 0, 3 8323; PC64LE9-NEXT: li 3, 4 8324; PC64LE9-NEXT: vextuwrx 3, 3, 2 8325; PC64LE9-NEXT: xscvuxddp 1, 0 8326; PC64LE9-NEXT: mtfprwz 0, 3 8327; PC64LE9-NEXT: mfvsrwz 3, 34 8328; PC64LE9-NEXT: xscvuxddp 2, 0 8329; PC64LE9-NEXT: mtfprwz 0, 3 8330; PC64LE9-NEXT: xscvuxddp 3, 0 8331; PC64LE9-NEXT: blr 8332entry: 8333 %result = call <3 x double> 8334 @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32> %x, 8335 metadata !"round.dynamic", 8336 metadata !"fpexcept.strict") #0 8337 ret <3 x double> %result 8338} 8339 8340define <3 x float> @constrained_vector_uitofp_v3f32_v3i32(<3 x i32> %x) #0 { 8341; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i32: 8342; PC64LE: # %bb.0: # %entry 8343; PC64LE-NEXT: xxswapd 0, 34 8344; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 8345; PC64LE-NEXT: mffprwz 3, 0 8346; PC64LE-NEXT: mffprwz 4, 1 8347; PC64LE-NEXT: mtfprwz 0, 3 8348; PC64LE-NEXT: mtfprwz 1, 4 8349; PC64LE-NEXT: xscvuxdsp 0, 0 8350; PC64LE-NEXT: xscvuxdsp 1, 1 8351; PC64LE-NEXT: mfvsrwz 3, 34 8352; PC64LE-NEXT: mtfprwz 2, 3 8353; PC64LE-NEXT: addis 3, 2, .LCPI179_0@toc@ha 8354; PC64LE-NEXT: addi 3, 3, .LCPI179_0@toc@l 8355; PC64LE-NEXT: xscvdpspn 34, 0 8356; PC64LE-NEXT: lvx 4, 0, 3 8357; PC64LE-NEXT: xscvdpspn 35, 1 8358; PC64LE-NEXT: xscvuxdsp 0, 2 8359; PC64LE-NEXT: vmrghw 2, 3, 2 8360; PC64LE-NEXT: xscvdpspn 35, 0 8361; PC64LE-NEXT: vperm 2, 3, 2, 4 8362; PC64LE-NEXT: blr 8363; 8364; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i32: 8365; PC64LE9: # %bb.0: # %entry 8366; PC64LE9-NEXT: li 3, 0 8367; PC64LE9-NEXT: vextuwrx 3, 3, 2 8368; PC64LE9-NEXT: mtfprwz 0, 3 8369; PC64LE9-NEXT: li 3, 4 8370; PC64LE9-NEXT: xscvuxdsp 0, 0 8371; PC64LE9-NEXT: vextuwrx 3, 3, 2 8372; PC64LE9-NEXT: xscvdpspn 35, 0 8373; PC64LE9-NEXT: mtfprwz 0, 3 8374; PC64LE9-NEXT: addis 3, 2, .LCPI179_0@toc@ha 8375; PC64LE9-NEXT: xscvuxdsp 0, 0 8376; PC64LE9-NEXT: addi 3, 3, .LCPI179_0@toc@l 8377; PC64LE9-NEXT: xscvdpspn 36, 0 8378; PC64LE9-NEXT: vmrghw 3, 4, 3 8379; PC64LE9-NEXT: lxvx 36, 0, 3 8380; PC64LE9-NEXT: mfvsrwz 3, 34 8381; PC64LE9-NEXT: mtfprwz 0, 3 8382; PC64LE9-NEXT: xscvuxdsp 0, 0 8383; PC64LE9-NEXT: xscvdpspn 34, 0 8384; PC64LE9-NEXT: vperm 2, 2, 3, 4 8385; PC64LE9-NEXT: blr 8386entry: 8387 %result = call <3 x float> 8388 @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32> %x, 8389 metadata !"round.dynamic", 8390 metadata !"fpexcept.strict") #0 8391 ret <3 x float> %result 8392} 8393 8394define <3 x double> @constrained_vector_uitofp_v3f64_v3i64(<3 x i64> %x) #0 { 8395; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i64: 8396; PC64LE: # %bb.0: # %entry 8397; PC64LE-NEXT: mtfprd 0, 3 8398; PC64LE-NEXT: mtfprd 2, 4 8399; PC64LE-NEXT: mtfprd 3, 5 8400; PC64LE-NEXT: xscvuxddp 1, 0 8401; PC64LE-NEXT: xscvuxddp 2, 2 8402; PC64LE-NEXT: xscvuxddp 3, 3 8403; PC64LE-NEXT: blr 8404; 8405; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i64: 8406; PC64LE9: # %bb.0: # %entry 8407; PC64LE9-NEXT: mtfprd 0, 3 8408; PC64LE9-NEXT: xscvuxddp 1, 0 8409; PC64LE9-NEXT: mtfprd 0, 4 8410; PC64LE9-NEXT: xscvuxddp 2, 0 8411; PC64LE9-NEXT: mtfprd 0, 5 8412; PC64LE9-NEXT: xscvuxddp 3, 0 8413; PC64LE9-NEXT: blr 8414entry: 8415 %result = call <3 x double> 8416 @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64> %x, 8417 metadata !"round.dynamic", 8418 metadata !"fpexcept.strict") #0 8419 ret <3 x double> %result 8420} 8421 8422define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 { 8423; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i64: 8424; PC64LE: # %bb.0: # %entry 8425; PC64LE-NEXT: mtfprd 0, 3 8426; PC64LE-NEXT: addis 3, 2, .LCPI181_0@toc@ha 8427; PC64LE-NEXT: mtfprd 1, 4 8428; PC64LE-NEXT: addi 3, 3, .LCPI181_0@toc@l 8429; PC64LE-NEXT: xscvuxdsp 0, 0 8430; PC64LE-NEXT: lvx 4, 0, 3 8431; PC64LE-NEXT: xscvuxdsp 1, 1 8432; PC64LE-NEXT: mtfprd 2, 5 8433; PC64LE-NEXT: xscvdpspn 34, 0 8434; PC64LE-NEXT: xscvdpspn 35, 1 8435; PC64LE-NEXT: xscvuxdsp 0, 2 8436; PC64LE-NEXT: vmrghw 2, 3, 2 8437; PC64LE-NEXT: xscvdpspn 35, 0 8438; PC64LE-NEXT: vperm 2, 3, 2, 4 8439; PC64LE-NEXT: blr 8440; 8441; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i64: 8442; PC64LE9: # %bb.0: # %entry 8443; PC64LE9-NEXT: mtfprd 0, 3 8444; PC64LE9-NEXT: addis 3, 2, .LCPI181_0@toc@ha 8445; PC64LE9-NEXT: xscvuxdsp 0, 0 8446; PC64LE9-NEXT: addi 3, 3, .LCPI181_0@toc@l 8447; PC64LE9-NEXT: xscvdpspn 34, 0 8448; PC64LE9-NEXT: mtfprd 0, 4 8449; PC64LE9-NEXT: xscvuxdsp 0, 0 8450; PC64LE9-NEXT: xscvdpspn 35, 0 8451; PC64LE9-NEXT: mtfprd 0, 5 8452; PC64LE9-NEXT: xscvuxdsp 0, 0 8453; PC64LE9-NEXT: vmrghw 2, 3, 2 8454; PC64LE9-NEXT: lxvx 35, 0, 3 8455; PC64LE9-NEXT: xscvdpspn 36, 0 8456; PC64LE9-NEXT: vperm 2, 4, 2, 3 8457; PC64LE9-NEXT: blr 8458entry: 8459 %result = call <3 x float> 8460 @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64> %x, 8461 metadata !"round.dynamic", 8462 metadata !"fpexcept.strict") #0 8463 ret <3 x float> %result 8464} 8465 8466define <4 x double> @constrained_vector_uitofp_v4f64_v4i32(<4 x i32> %x) #0 { 8467; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i32: 8468; PC64LE: # %bb.0: # %entry 8469; PC64LE-NEXT: xxswapd 0, 34 8470; PC64LE-NEXT: mfvsrwz 3, 34 8471; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 8472; PC64LE-NEXT: mtfprwz 2, 3 8473; PC64LE-NEXT: mffprwz 3, 0 8474; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 8475; PC64LE-NEXT: mffprwz 4, 1 8476; PC64LE-NEXT: mtfprwz 1, 3 8477; PC64LE-NEXT: mffprwz 3, 0 8478; PC64LE-NEXT: mtfprwz 3, 4 8479; PC64LE-NEXT: xscvuxddp 0, 2 8480; PC64LE-NEXT: mtfprwz 2, 3 8481; PC64LE-NEXT: xscvuxddp 1, 1 8482; PC64LE-NEXT: xscvuxddp 3, 3 8483; PC64LE-NEXT: xscvuxddp 2, 2 8484; PC64LE-NEXT: xxmrghd 34, 3, 1 8485; PC64LE-NEXT: xxmrghd 35, 2, 0 8486; PC64LE-NEXT: blr 8487; 8488; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i32: 8489; PC64LE9: # %bb.0: # %entry 8490; PC64LE9-NEXT: li 3, 0 8491; PC64LE9-NEXT: vextuwrx 3, 3, 2 8492; PC64LE9-NEXT: mtfprwz 0, 3 8493; PC64LE9-NEXT: li 3, 4 8494; PC64LE9-NEXT: vextuwrx 3, 3, 2 8495; PC64LE9-NEXT: xscvuxddp 0, 0 8496; PC64LE9-NEXT: mtfprwz 1, 3 8497; PC64LE9-NEXT: li 3, 12 8498; PC64LE9-NEXT: xscvuxddp 1, 1 8499; PC64LE9-NEXT: vextuwrx 3, 3, 2 8500; PC64LE9-NEXT: xxmrghd 0, 1, 0 8501; PC64LE9-NEXT: mtfprwz 1, 3 8502; PC64LE9-NEXT: mfvsrwz 3, 34 8503; PC64LE9-NEXT: mtfprwz 2, 3 8504; PC64LE9-NEXT: xscvuxddp 1, 1 8505; PC64LE9-NEXT: xscvuxddp 2, 2 8506; PC64LE9-NEXT: xxlor 34, 0, 0 8507; PC64LE9-NEXT: xxmrghd 35, 1, 2 8508; PC64LE9-NEXT: blr 8509entry: 8510 %result = call <4 x double> 8511 @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32> %x, 8512 metadata !"round.dynamic", 8513 metadata !"fpexcept.strict") #0 8514 ret <4 x double> %result 8515} 8516 8517define <4 x float> @constrained_vector_uitofp_v4f32_v4i16(<4 x i16> %x) #0 { 8518; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i16: 8519; PC64LE: # %bb.0: # %entry 8520; PC64LE-NEXT: xxlxor 35, 35, 35 8521; PC64LE-NEXT: vmrglh 2, 3, 2 8522; PC64LE-NEXT: xvcvuxwsp 34, 34 8523; PC64LE-NEXT: blr 8524; 8525; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i16: 8526; PC64LE9: # %bb.0: # %entry 8527; PC64LE9-NEXT: xxlxor 35, 35, 35 8528; PC64LE9-NEXT: vmrglh 2, 3, 2 8529; PC64LE9-NEXT: xvcvuxwsp 34, 34 8530; PC64LE9-NEXT: blr 8531entry: 8532 %result = call <4 x float> 8533 @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16> %x, 8534 metadata !"round.dynamic", 8535 metadata !"fpexcept.strict") #0 8536 ret <4 x float> %result 8537} 8538 8539define <4 x float> @constrained_vector_uitofp_v4f32_v4i32(<4 x i32> %x) #0 { 8540; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i32: 8541; PC64LE: # %bb.0: # %entry 8542; PC64LE-NEXT: xvcvuxwsp 34, 34 8543; PC64LE-NEXT: blr 8544; 8545; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i32: 8546; PC64LE9: # %bb.0: # %entry 8547; PC64LE9-NEXT: xvcvuxwsp 34, 34 8548; PC64LE9-NEXT: blr 8549entry: 8550 %result = call <4 x float> 8551 @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32> %x, 8552 metadata !"round.dynamic", 8553 metadata !"fpexcept.strict") #0 8554 ret <4 x float> %result 8555} 8556 8557define <4 x double> @constrained_vector_uitofp_v4f64_v4i64(<4 x i64> %x) #0 { 8558; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i64: 8559; PC64LE: # %bb.0: # %entry 8560; PC64LE-NEXT: xvcvuxddp 35, 35 8561; PC64LE-NEXT: xvcvuxddp 34, 34 8562; PC64LE-NEXT: blr 8563; 8564; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i64: 8565; PC64LE9: # %bb.0: # %entry 8566; PC64LE9-NEXT: xvcvuxddp 35, 35 8567; PC64LE9-NEXT: xvcvuxddp 34, 34 8568; PC64LE9-NEXT: blr 8569entry: 8570 %result = call <4 x double> 8571 @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64> %x, 8572 metadata !"round.dynamic", 8573 metadata !"fpexcept.strict") #0 8574 ret <4 x double> %result 8575} 8576 8577define <4 x float> @constrained_vector_uitofp_v4f32_v4i64(<4 x i64> %x) #0 { 8578; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i64: 8579; PC64LE: # %bb.0: # %entry 8580; PC64LE-NEXT: xxswapd 0, 34 8581; PC64LE-NEXT: mfvsrd 3, 34 8582; PC64LE-NEXT: xxswapd 2, 35 8583; PC64LE-NEXT: mfvsrd 4, 35 8584; PC64LE-NEXT: mtfprd 1, 3 8585; PC64LE-NEXT: mffprd 3, 0 8586; PC64LE-NEXT: mtfprd 0, 4 8587; PC64LE-NEXT: mtfprd 3, 3 8588; PC64LE-NEXT: mffprd 3, 2 8589; PC64LE-NEXT: xscvuxdsp 1, 1 8590; PC64LE-NEXT: mtfprd 2, 3 8591; PC64LE-NEXT: xscvuxdsp 0, 0 8592; PC64LE-NEXT: xscvuxdsp 3, 3 8593; PC64LE-NEXT: xscvuxdsp 2, 2 8594; PC64LE-NEXT: xxmrghd 0, 0, 1 8595; PC64LE-NEXT: xxmrghd 1, 2, 3 8596; PC64LE-NEXT: xvcvdpsp 34, 0 8597; PC64LE-NEXT: xvcvdpsp 35, 1 8598; PC64LE-NEXT: vmrgew 2, 2, 3 8599; PC64LE-NEXT: blr 8600; 8601; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i64: 8602; PC64LE9: # %bb.0: # %entry 8603; PC64LE9-NEXT: mfvsrld 3, 34 8604; PC64LE9-NEXT: mtfprd 0, 3 8605; PC64LE9-NEXT: mfvsrld 3, 35 8606; PC64LE9-NEXT: xscvuxdsp 0, 0 8607; PC64LE9-NEXT: mtfprd 1, 3 8608; PC64LE9-NEXT: mfvsrd 3, 34 8609; PC64LE9-NEXT: xscvuxdsp 1, 1 8610; PC64LE9-NEXT: xxmrghd 0, 1, 0 8611; PC64LE9-NEXT: xvcvdpsp 36, 0 8612; PC64LE9-NEXT: mtfprd 0, 3 8613; PC64LE9-NEXT: mfvsrd 3, 35 8614; PC64LE9-NEXT: mtfprd 1, 3 8615; PC64LE9-NEXT: xscvuxdsp 0, 0 8616; PC64LE9-NEXT: xscvuxdsp 1, 1 8617; PC64LE9-NEXT: xxmrghd 0, 1, 0 8618; PC64LE9-NEXT: xvcvdpsp 34, 0 8619; PC64LE9-NEXT: vmrgew 2, 2, 4 8620; PC64LE9-NEXT: blr 8621entry: 8622 %result = call <4 x float> 8623 @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64> %x, 8624 metadata !"round.dynamic", 8625 metadata !"fpexcept.strict") #0 8626 ret <4 x float> %result 8627} 8628 8629attributes #0 = { nounwind strictfp noimplicitfloat } 8630attributes #1 = { strictfp } 8631 8632; Single width declarations 8633declare <2 x double> @llvm.experimental.constrained.fadd.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8634declare <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8635declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8636declare <2 x double> @llvm.experimental.constrained.fdiv.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8637declare <2 x double> @llvm.experimental.constrained.frem.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8638declare <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double>, metadata, metadata) 8639declare <2 x double> @llvm.experimental.constrained.pow.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8640declare <2 x double> @llvm.experimental.constrained.powi.v2f64(<2 x double>, i32, metadata, metadata) 8641declare <2 x double> @llvm.experimental.constrained.sin.v2f64(<2 x double>, metadata, metadata) 8642declare <2 x double> @llvm.experimental.constrained.cos.v2f64(<2 x double>, metadata, metadata) 8643declare <2 x double> @llvm.experimental.constrained.exp.v2f64(<2 x double>, metadata, metadata) 8644declare <2 x double> @llvm.experimental.constrained.exp2.v2f64(<2 x double>, metadata, metadata) 8645declare <2 x double> @llvm.experimental.constrained.log.v2f64(<2 x double>, metadata, metadata) 8646declare <2 x double> @llvm.experimental.constrained.log10.v2f64(<2 x double>, metadata, metadata) 8647declare <2 x double> @llvm.experimental.constrained.log2.v2f64(<2 x double>, metadata, metadata) 8648declare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata) 8649declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata) 8650declare <2 x double> @llvm.experimental.constrained.maxnum.v2f64(<2 x double>, <2 x double>, metadata) 8651declare <2 x double> @llvm.experimental.constrained.minnum.v2f64(<2 x double>, <2 x double>, metadata) 8652declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32(<2 x float>, metadata) 8653declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32(<2 x float>, metadata) 8654declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(<2 x double>, metadata) 8655declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(<2 x double>, metadata) 8656declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32(<2 x float>, metadata) 8657declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32(<2 x float>, metadata) 8658declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(<2 x double>, metadata) 8659declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(<2 x double>, metadata) 8660declare <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(<2 x double>, metadata, metadata) 8661declare <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(<2 x float>, metadata) 8662declare <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double>, metadata) 8663declare <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double>, metadata) 8664declare <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double>, metadata) 8665declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata) 8666declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16>, metadata, metadata) 8667declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16>, metadata, metadata) 8668declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32>, metadata, metadata) 8669declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32>, metadata, metadata) 8670declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64>, metadata, metadata) 8671declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64>, metadata, metadata) 8672declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32>, metadata, metadata) 8673declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32>, metadata, metadata) 8674declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64>, metadata, metadata) 8675declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64>, metadata, metadata) 8676 8677; Scalar width declarations 8678declare <1 x float> @llvm.experimental.constrained.fadd.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8679declare <1 x float> @llvm.experimental.constrained.fsub.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8680declare <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8681declare <1 x float> @llvm.experimental.constrained.fdiv.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8682declare <1 x float> @llvm.experimental.constrained.frem.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8683declare <1 x float> @llvm.experimental.constrained.sqrt.v1f32(<1 x float>, metadata, metadata) 8684declare <1 x float> @llvm.experimental.constrained.pow.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8685declare <1 x float> @llvm.experimental.constrained.powi.v1f32(<1 x float>, i32, metadata, metadata) 8686declare <1 x float> @llvm.experimental.constrained.sin.v1f32(<1 x float>, metadata, metadata) 8687declare <1 x float> @llvm.experimental.constrained.cos.v1f32(<1 x float>, metadata, metadata) 8688declare <1 x float> @llvm.experimental.constrained.exp.v1f32(<1 x float>, metadata, metadata) 8689declare <1 x float> @llvm.experimental.constrained.exp2.v1f32(<1 x float>, metadata, metadata) 8690declare <1 x float> @llvm.experimental.constrained.log.v1f32(<1 x float>, metadata, metadata) 8691declare <1 x float> @llvm.experimental.constrained.log10.v1f32(<1 x float>, metadata, metadata) 8692declare <1 x float> @llvm.experimental.constrained.log2.v1f32(<1 x float>, metadata, metadata) 8693declare <1 x float> @llvm.experimental.constrained.rint.v1f32(<1 x float>, metadata, metadata) 8694declare <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(<1 x float>, metadata, metadata) 8695declare <1 x float> @llvm.experimental.constrained.maxnum.v1f32(<1 x float>, <1 x float>, metadata) 8696declare <1 x float> @llvm.experimental.constrained.minnum.v1f32(<1 x float>, <1 x float>, metadata) 8697declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32(<1 x float>, metadata) 8698declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32(<1 x float>, metadata) 8699declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(<1 x double>, metadata) 8700declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(<1 x double>, metadata) 8701declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32(<1 x float>, metadata) 8702declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32(<1 x float>, metadata) 8703declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(<1 x double>, metadata) 8704declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(<1 x double>, metadata) 8705declare <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(<1 x double>, metadata, metadata) 8706declare <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(<1 x float>, metadata) 8707declare <1 x float> @llvm.experimental.constrained.ceil.v1f32(<1 x float>, metadata) 8708declare <1 x float> @llvm.experimental.constrained.floor.v1f32(<1 x float>, metadata) 8709declare <1 x float> @llvm.experimental.constrained.round.v1f32(<1 x float>, metadata) 8710declare <1 x float> @llvm.experimental.constrained.trunc.v1f32(<1 x float>, metadata) 8711declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32>, metadata, metadata) 8712declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32>, metadata, metadata) 8713declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64>, metadata, metadata) 8714declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64>, metadata, metadata) 8715declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32>, metadata, metadata) 8716declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32>, metadata, metadata) 8717declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64>, metadata, metadata) 8718declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64>, metadata, metadata) 8719 8720; Illegal width declarations 8721declare <3 x float> @llvm.experimental.constrained.fadd.v3f32(<3 x float>, <3 x float>, metadata, metadata) 8722declare <3 x double> @llvm.experimental.constrained.fadd.v3f64(<3 x double>, <3 x double>, metadata, metadata) 8723declare <3 x float> @llvm.experimental.constrained.fsub.v3f32(<3 x float>, <3 x float>, metadata, metadata) 8724declare <3 x double> @llvm.experimental.constrained.fsub.v3f64(<3 x double>, <3 x double>, metadata, metadata) 8725declare <3 x float> @llvm.experimental.constrained.fmul.v3f32(<3 x float>, <3 x float>, metadata, metadata) 8726declare <3 x double> @llvm.experimental.constrained.fmul.v3f64(<3 x double>, <3 x double>, metadata, metadata) 8727declare <3 x float> @llvm.experimental.constrained.fdiv.v3f32(<3 x float>, <3 x float>, metadata, metadata) 8728declare <3 x double> @llvm.experimental.constrained.fdiv.v3f64(<3 x double>, <3 x double>, metadata, metadata) 8729declare <3 x float> @llvm.experimental.constrained.frem.v3f32(<3 x float>, <3 x float>, metadata, metadata) 8730declare <3 x double> @llvm.experimental.constrained.frem.v3f64(<3 x double>, <3 x double>, metadata, metadata) 8731declare <3 x float> @llvm.experimental.constrained.sqrt.v3f32(<3 x float>, metadata, metadata) 8732declare <3 x double> @llvm.experimental.constrained.sqrt.v3f64(<3 x double>, metadata, metadata) 8733declare <3 x float> @llvm.experimental.constrained.pow.v3f32(<3 x float>, <3 x float>, metadata, metadata) 8734declare <3 x double> @llvm.experimental.constrained.pow.v3f64(<3 x double>, <3 x double>, metadata, metadata) 8735declare <3 x float> @llvm.experimental.constrained.powi.v3f32(<3 x float>, i32, metadata, metadata) 8736declare <3 x double> @llvm.experimental.constrained.powi.v3f64(<3 x double>, i32, metadata, metadata) 8737declare <3 x float> @llvm.experimental.constrained.sin.v3f32(<3 x float>, metadata, metadata) 8738declare <3 x double> @llvm.experimental.constrained.sin.v3f64(<3 x double>, metadata, metadata) 8739declare <3 x float> @llvm.experimental.constrained.cos.v3f32(<3 x float>, metadata, metadata) 8740declare <3 x double> @llvm.experimental.constrained.cos.v3f64(<3 x double>, metadata, metadata) 8741declare <3 x float> @llvm.experimental.constrained.exp.v3f32(<3 x float>, metadata, metadata) 8742declare <3 x double> @llvm.experimental.constrained.exp.v3f64(<3 x double>, metadata, metadata) 8743declare <3 x float> @llvm.experimental.constrained.exp2.v3f32(<3 x float>, metadata, metadata) 8744declare <3 x double> @llvm.experimental.constrained.exp2.v3f64(<3 x double>, metadata, metadata) 8745declare <3 x float> @llvm.experimental.constrained.log.v3f32(<3 x float>, metadata, metadata) 8746declare <3 x double> @llvm.experimental.constrained.log.v3f64(<3 x double>, metadata, metadata) 8747declare <3 x float> @llvm.experimental.constrained.log10.v3f32(<3 x float>, metadata, metadata) 8748declare <3 x double> @llvm.experimental.constrained.log10.v3f64(<3 x double>, metadata, metadata) 8749declare <3 x float> @llvm.experimental.constrained.log2.v3f32(<3 x float>, metadata, metadata) 8750declare <3 x double> @llvm.experimental.constrained.log2.v3f64(<3 x double>, metadata, metadata) 8751declare <3 x float> @llvm.experimental.constrained.rint.v3f32(<3 x float>, metadata, metadata) 8752declare <3 x double> @llvm.experimental.constrained.rint.v3f64(<3 x double>, metadata, metadata) 8753declare <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(<3 x float>, metadata, metadata) 8754declare <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(<3 x double>, metadata, metadata) 8755declare <3 x float> @llvm.experimental.constrained.maxnum.v3f32(<3 x float>, <3 x float>, metadata) 8756declare <3 x double> @llvm.experimental.constrained.maxnum.v3f64(<3 x double>, <3 x double>, metadata) 8757declare <3 x float> @llvm.experimental.constrained.minnum.v3f32(<3 x float>, <3 x float>, metadata) 8758declare <3 x double> @llvm.experimental.constrained.minnum.v3f64(<3 x double>, <3 x double>, metadata) 8759declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32(<3 x float>, metadata) 8760declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32(<3 x float>, metadata) 8761declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64(<3 x double>, metadata) 8762declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64(<3 x double>, metadata) 8763declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32(<3 x float>, metadata) 8764declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32(<3 x float>, metadata) 8765declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64(<3 x double>, metadata) 8766declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64(<3 x double>, metadata) 8767declare <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(<3 x double>, metadata, metadata) 8768declare <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(<3 x float>, metadata) 8769declare <3 x float> @llvm.experimental.constrained.ceil.v3f32(<3 x float>, metadata) 8770declare <3 x double> @llvm.experimental.constrained.ceil.v3f64(<3 x double>, metadata) 8771declare <3 x float> @llvm.experimental.constrained.floor.v3f32(<3 x float>, metadata) 8772declare <3 x double> @llvm.experimental.constrained.floor.v3f64(<3 x double>, metadata) 8773declare <3 x float> @llvm.experimental.constrained.round.v3f32(<3 x float>, metadata) 8774declare <3 x double> @llvm.experimental.constrained.round.v3f64(<3 x double>, metadata) 8775declare <3 x float> @llvm.experimental.constrained.trunc.v3f32(<3 x float>, metadata) 8776declare <3 x double> @llvm.experimental.constrained.trunc.v3f64(<3 x double>, metadata) 8777declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32>, metadata, metadata) 8778declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32>, metadata, metadata) 8779declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64>, metadata, metadata) 8780declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64>, metadata, metadata) 8781declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32>, metadata, metadata) 8782declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32>, metadata, metadata) 8783declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64>, metadata, metadata) 8784declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64>, metadata, metadata) 8785 8786; Double width declarations 8787declare <4 x double> @llvm.experimental.constrained.fadd.v4f64(<4 x double>, <4 x double>, metadata, metadata) 8788declare <4 x double> @llvm.experimental.constrained.fsub.v4f64(<4 x double>, <4 x double>, metadata, metadata) 8789declare <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double>, <4 x double>, metadata, metadata) 8790declare <4 x double> @llvm.experimental.constrained.fdiv.v4f64(<4 x double>, <4 x double>, metadata, metadata) 8791declare <4 x double> @llvm.experimental.constrained.frem.v4f64(<4 x double>, <4 x double>, metadata, metadata) 8792declare <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double>, metadata, metadata) 8793declare <4 x double> @llvm.experimental.constrained.pow.v4f64(<4 x double>, <4 x double>, metadata, metadata) 8794declare <4 x double> @llvm.experimental.constrained.powi.v4f64(<4 x double>, i32, metadata, metadata) 8795declare <4 x double> @llvm.experimental.constrained.sin.v4f64(<4 x double>, metadata, metadata) 8796declare <4 x double> @llvm.experimental.constrained.cos.v4f64(<4 x double>, metadata, metadata) 8797declare <4 x double> @llvm.experimental.constrained.exp.v4f64(<4 x double>, metadata, metadata) 8798declare <4 x double> @llvm.experimental.constrained.exp2.v4f64(<4 x double>, metadata, metadata) 8799declare <4 x double> @llvm.experimental.constrained.log.v4f64(<4 x double>, metadata, metadata) 8800declare <4 x double> @llvm.experimental.constrained.log10.v4f64(<4 x double>, metadata, metadata) 8801declare <4 x double> @llvm.experimental.constrained.log2.v4f64(<4 x double>, metadata, metadata) 8802declare <4 x double> @llvm.experimental.constrained.rint.v4f64(<4 x double>, metadata, metadata) 8803declare <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(<4 x double>, metadata, metadata) 8804declare <4 x double> @llvm.experimental.constrained.maxnum.v4f64(<4 x double>, <4 x double>, metadata) 8805declare <4 x double> @llvm.experimental.constrained.minnum.v4f64(<4 x double>, <4 x double>, metadata) 8806declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float>, metadata) 8807declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(<4 x float>, metadata) 8808declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64(<4 x double>, metadata) 8809declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64(<4 x double>, metadata) 8810declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float>, metadata) 8811declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(<4 x float>, metadata) 8812declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(<4 x double>, metadata) 8813declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64(<4 x double>, metadata) 8814declare <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(<4 x double>, metadata, metadata) 8815declare <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float>, metadata) 8816declare <4 x double> @llvm.experimental.constrained.ceil.v4f64(<4 x double>, metadata) 8817declare <4 x double> @llvm.experimental.constrained.floor.v4f64(<4 x double>, metadata) 8818declare <4 x double> @llvm.experimental.constrained.round.v4f64(<4 x double>, metadata) 8819declare <4 x double> @llvm.experimental.constrained.trunc.v4f64(<4 x double>, metadata) 8820declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16>, metadata, metadata) 8821declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32>, metadata, metadata) 8822declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32>, metadata, metadata) 8823declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64>, metadata, metadata) 8824declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64>, metadata, metadata) 8825declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16>, metadata, metadata) 8826declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32>, metadata, metadata) 8827declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32>, metadata, metadata) 8828declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64>, metadata, metadata) 8829declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64>, metadata, metadata) 8830