1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -O3 -mtriple=powerpc64le-linux-gnu < %s | FileCheck --check-prefix=PC64LE %s 3; RUN: llc -O3 -mtriple=powerpc64le-linux-gnu -mcpu=pwr9 < %s | FileCheck --check-prefix=PC64LE9 %s 4 5define <1 x float> @constrained_vector_fdiv_v1f32() #0 { 6; PC64LE-LABEL: constrained_vector_fdiv_v1f32: 7; PC64LE: # %bb.0: # %entry 8; PC64LE-NEXT: addis 3, 2, .LCPI0_0@toc@ha 9; PC64LE-NEXT: addis 4, 2, .LCPI0_1@toc@ha 10; PC64LE-NEXT: lfs 0, .LCPI0_0@toc@l(3) 11; PC64LE-NEXT: lfs 1, .LCPI0_1@toc@l(4) 12; PC64LE-NEXT: xsdivsp 1, 1, 0 13; PC64LE-NEXT: blr 14; 15; PC64LE9-LABEL: constrained_vector_fdiv_v1f32: 16; PC64LE9: # %bb.0: # %entry 17; PC64LE9-NEXT: addis 3, 2, .LCPI0_0@toc@ha 18; PC64LE9-NEXT: lfs 0, .LCPI0_0@toc@l(3) 19; PC64LE9-NEXT: addis 3, 2, .LCPI0_1@toc@ha 20; PC64LE9-NEXT: lfs 1, .LCPI0_1@toc@l(3) 21; PC64LE9-NEXT: xsdivsp 1, 1, 0 22; PC64LE9-NEXT: blr 23entry: 24 %div = call <1 x float> @llvm.experimental.constrained.fdiv.v1f32( 25 <1 x float> <float 1.000000e+00>, 26 <1 x float> <float 1.000000e+01>, 27 metadata !"round.dynamic", 28 metadata !"fpexcept.strict") #1 29 ret <1 x float> %div 30} 31 32define <2 x double> @constrained_vector_fdiv_v2f64() #0 { 33; PC64LE-LABEL: constrained_vector_fdiv_v2f64: 34; PC64LE: # %bb.0: # %entry 35; PC64LE-NEXT: addis 3, 2, .LCPI1_0@toc@ha 36; PC64LE-NEXT: addis 4, 2, .LCPI1_1@toc@ha 37; PC64LE-NEXT: addi 3, 3, .LCPI1_0@toc@l 38; PC64LE-NEXT: addi 4, 4, .LCPI1_1@toc@l 39; PC64LE-NEXT: lxvd2x 0, 0, 3 40; PC64LE-NEXT: lxvd2x 1, 0, 4 41; PC64LE-NEXT: xxswapd 0, 0 42; PC64LE-NEXT: xxswapd 1, 1 43; PC64LE-NEXT: xvdivdp 34, 1, 0 44; PC64LE-NEXT: blr 45; 46; PC64LE9-LABEL: constrained_vector_fdiv_v2f64: 47; PC64LE9: # %bb.0: # %entry 48; PC64LE9-NEXT: addis 3, 2, .LCPI1_0@toc@ha 49; PC64LE9-NEXT: addi 3, 3, .LCPI1_0@toc@l 50; PC64LE9-NEXT: lxvx 0, 0, 3 51; PC64LE9-NEXT: addis 3, 2, .LCPI1_1@toc@ha 52; PC64LE9-NEXT: addi 3, 3, .LCPI1_1@toc@l 53; PC64LE9-NEXT: lxvx 1, 0, 3 54; PC64LE9-NEXT: xvdivdp 34, 1, 0 55; PC64LE9-NEXT: blr 56entry: 57 %div = call <2 x double> @llvm.experimental.constrained.fdiv.v2f64( 58 <2 x double> <double 1.000000e+00, double 2.000000e+00>, 59 <2 x double> <double 1.000000e+01, double 1.000000e+01>, 60 metadata !"round.dynamic", 61 metadata !"fpexcept.strict") #1 62 ret <2 x double> %div 63} 64 65define <3 x float> @constrained_vector_fdiv_v3f32() #0 { 66; PC64LE-LABEL: constrained_vector_fdiv_v3f32: 67; PC64LE: # %bb.0: # %entry 68; PC64LE-NEXT: addis 3, 2, .LCPI2_0@toc@ha 69; PC64LE-NEXT: addis 4, 2, .LCPI2_3@toc@ha 70; PC64LE-NEXT: addis 5, 2, .LCPI2_2@toc@ha 71; PC64LE-NEXT: lfs 0, .LCPI2_0@toc@l(3) 72; PC64LE-NEXT: lfs 1, .LCPI2_3@toc@l(4) 73; PC64LE-NEXT: lfs 2, .LCPI2_2@toc@l(5) 74; PC64LE-NEXT: addis 3, 2, .LCPI2_1@toc@ha 75; PC64LE-NEXT: xsdivsp 1, 1, 0 76; PC64LE-NEXT: lfs 3, .LCPI2_1@toc@l(3) 77; PC64LE-NEXT: addis 3, 2, .LCPI2_4@toc@ha 78; PC64LE-NEXT: xsdivsp 2, 2, 0 79; PC64LE-NEXT: addi 3, 3, .LCPI2_4@toc@l 80; PC64LE-NEXT: lvx 4, 0, 3 81; PC64LE-NEXT: xsdivsp 0, 3, 0 82; PC64LE-NEXT: xscvdpspn 1, 1 83; PC64LE-NEXT: xscvdpspn 2, 2 84; PC64LE-NEXT: xscvdpspn 0, 0 85; PC64LE-NEXT: xxsldwi 34, 1, 1, 3 86; PC64LE-NEXT: xxsldwi 35, 2, 2, 3 87; PC64LE-NEXT: vmrghw 2, 3, 2 88; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 89; PC64LE-NEXT: vperm 2, 3, 2, 4 90; PC64LE-NEXT: blr 91; 92; PC64LE9-LABEL: constrained_vector_fdiv_v3f32: 93; PC64LE9: # %bb.0: # %entry 94; PC64LE9-NEXT: addis 3, 2, .LCPI2_0@toc@ha 95; PC64LE9-NEXT: lfs 0, .LCPI2_0@toc@l(3) 96; PC64LE9-NEXT: addis 3, 2, .LCPI2_1@toc@ha 97; PC64LE9-NEXT: lfs 1, .LCPI2_1@toc@l(3) 98; PC64LE9-NEXT: addis 3, 2, .LCPI2_2@toc@ha 99; PC64LE9-NEXT: xsdivsp 1, 1, 0 100; PC64LE9-NEXT: lfs 2, .LCPI2_2@toc@l(3) 101; PC64LE9-NEXT: addis 3, 2, .LCPI2_3@toc@ha 102; PC64LE9-NEXT: lfs 3, .LCPI2_3@toc@l(3) 103; PC64LE9-NEXT: addis 3, 2, .LCPI2_4@toc@ha 104; PC64LE9-NEXT: addi 3, 3, .LCPI2_4@toc@l 105; PC64LE9-NEXT: lxvx 36, 0, 3 106; PC64LE9-NEXT: xsdivsp 2, 2, 0 107; PC64LE9-NEXT: xsdivsp 0, 3, 0 108; PC64LE9-NEXT: xscvdpspn 0, 0 109; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 110; PC64LE9-NEXT: xscvdpspn 0, 2 111; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 112; PC64LE9-NEXT: xscvdpspn 0, 1 113; PC64LE9-NEXT: vmrghw 2, 3, 2 114; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 115; PC64LE9-NEXT: vperm 2, 3, 2, 4 116; PC64LE9-NEXT: blr 117entry: 118 %div = call <3 x float> @llvm.experimental.constrained.fdiv.v3f32( 119 <3 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, 120 <3 x float> <float 1.000000e+01, float 1.000000e+01, float 1.000000e+01>, 121 metadata !"round.dynamic", 122 metadata !"fpexcept.strict") #1 123 ret <3 x float> %div 124} 125 126define <3 x double> @constrained_vector_fdiv_v3f64() #0 { 127; PC64LE-LABEL: constrained_vector_fdiv_v3f64: 128; PC64LE: # %bb.0: # %entry 129; PC64LE-NEXT: addis 3, 2, .LCPI3_2@toc@ha 130; PC64LE-NEXT: addis 4, 2, .LCPI3_3@toc@ha 131; PC64LE-NEXT: addi 3, 3, .LCPI3_2@toc@l 132; PC64LE-NEXT: addi 4, 4, .LCPI3_3@toc@l 133; PC64LE-NEXT: lxvd2x 0, 0, 3 134; PC64LE-NEXT: lxvd2x 1, 0, 4 135; PC64LE-NEXT: addis 3, 2, .LCPI3_0@toc@ha 136; PC64LE-NEXT: addis 4, 2, .LCPI3_1@toc@ha 137; PC64LE-NEXT: lfs 3, .LCPI3_0@toc@l(3) 138; PC64LE-NEXT: xxswapd 0, 0 139; PC64LE-NEXT: xxswapd 1, 1 140; PC64LE-NEXT: xvdivdp 2, 1, 0 141; PC64LE-NEXT: lfs 0, .LCPI3_1@toc@l(4) 142; PC64LE-NEXT: xsdivdp 3, 0, 3 143; PC64LE-NEXT: xxswapd 1, 2 144; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 145; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 146; PC64LE-NEXT: blr 147; 148; PC64LE9-LABEL: constrained_vector_fdiv_v3f64: 149; PC64LE9: # %bb.0: # %entry 150; PC64LE9-NEXT: addis 3, 2, .LCPI3_0@toc@ha 151; PC64LE9-NEXT: lfs 0, .LCPI3_0@toc@l(3) 152; PC64LE9-NEXT: addis 3, 2, .LCPI3_1@toc@ha 153; PC64LE9-NEXT: lfs 1, .LCPI3_1@toc@l(3) 154; PC64LE9-NEXT: addis 3, 2, .LCPI3_2@toc@ha 155; PC64LE9-NEXT: addi 3, 3, .LCPI3_2@toc@l 156; PC64LE9-NEXT: xsdivdp 3, 1, 0 157; PC64LE9-NEXT: lxvx 0, 0, 3 158; PC64LE9-NEXT: addis 3, 2, .LCPI3_3@toc@ha 159; PC64LE9-NEXT: addi 3, 3, .LCPI3_3@toc@l 160; PC64LE9-NEXT: lxvx 1, 0, 3 161; PC64LE9-NEXT: xvdivdp 2, 1, 0 162; PC64LE9-NEXT: xxswapd 1, 2 163; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 164; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 165; PC64LE9-NEXT: blr 166entry: 167 %div = call <3 x double> @llvm.experimental.constrained.fdiv.v3f64( 168 <3 x double> <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00>, 169 <3 x double> <double 1.000000e+01, double 1.000000e+01, double 1.000000e+01>, 170 metadata !"round.dynamic", 171 metadata !"fpexcept.strict") #1 172 ret <3 x double> %div 173} 174 175define <4 x double> @constrained_vector_fdiv_v4f64() #0 { 176; PC64LE-LABEL: constrained_vector_fdiv_v4f64: 177; PC64LE: # %bb.0: # %entry 178; PC64LE-NEXT: addis 3, 2, .LCPI4_0@toc@ha 179; PC64LE-NEXT: addis 4, 2, .LCPI4_1@toc@ha 180; PC64LE-NEXT: addis 5, 2, .LCPI4_2@toc@ha 181; PC64LE-NEXT: addi 3, 3, .LCPI4_0@toc@l 182; PC64LE-NEXT: lxvd2x 0, 0, 3 183; PC64LE-NEXT: addi 3, 4, .LCPI4_1@toc@l 184; PC64LE-NEXT: addi 4, 5, .LCPI4_2@toc@l 185; PC64LE-NEXT: lxvd2x 1, 0, 3 186; PC64LE-NEXT: lxvd2x 2, 0, 4 187; PC64LE-NEXT: xxswapd 0, 0 188; PC64LE-NEXT: xxswapd 1, 1 189; PC64LE-NEXT: xxswapd 2, 2 190; PC64LE-NEXT: xvdivdp 35, 1, 0 191; PC64LE-NEXT: xvdivdp 34, 2, 0 192; PC64LE-NEXT: blr 193; 194; PC64LE9-LABEL: constrained_vector_fdiv_v4f64: 195; PC64LE9: # %bb.0: # %entry 196; PC64LE9-NEXT: addis 3, 2, .LCPI4_0@toc@ha 197; PC64LE9-NEXT: addi 3, 3, .LCPI4_0@toc@l 198; PC64LE9-NEXT: lxvx 0, 0, 3 199; PC64LE9-NEXT: addis 3, 2, .LCPI4_1@toc@ha 200; PC64LE9-NEXT: addi 3, 3, .LCPI4_1@toc@l 201; PC64LE9-NEXT: lxvx 1, 0, 3 202; PC64LE9-NEXT: addis 3, 2, .LCPI4_2@toc@ha 203; PC64LE9-NEXT: addi 3, 3, .LCPI4_2@toc@l 204; PC64LE9-NEXT: xvdivdp 35, 1, 0 205; PC64LE9-NEXT: lxvx 1, 0, 3 206; PC64LE9-NEXT: xvdivdp 34, 1, 0 207; PC64LE9-NEXT: blr 208entry: 209 %div = call <4 x double> @llvm.experimental.constrained.fdiv.v4f64( 210 <4 x double> <double 1.000000e+00, double 2.000000e+00, 211 double 3.000000e+00, double 4.000000e+00>, 212 <4 x double> <double 1.000000e+01, double 1.000000e+01, 213 double 1.000000e+01, double 1.000000e+01>, 214 metadata !"round.dynamic", 215 metadata !"fpexcept.strict") #1 216 ret <4 x double> %div 217} 218 219define <1 x float> @constrained_vector_frem_v1f32() #0 { 220; PC64LE-LABEL: constrained_vector_frem_v1f32: 221; PC64LE: # %bb.0: # %entry 222; PC64LE-NEXT: mflr 0 223; PC64LE-NEXT: std 0, 16(1) 224; PC64LE-NEXT: stdu 1, -32(1) 225; PC64LE-NEXT: addis 3, 2, .LCPI5_0@toc@ha 226; PC64LE-NEXT: addis 4, 2, .LCPI5_1@toc@ha 227; PC64LE-NEXT: lfs 1, .LCPI5_0@toc@l(3) 228; PC64LE-NEXT: lfs 2, .LCPI5_1@toc@l(4) 229; PC64LE-NEXT: bl fmodf 230; PC64LE-NEXT: nop 231; PC64LE-NEXT: addi 1, 1, 32 232; PC64LE-NEXT: ld 0, 16(1) 233; PC64LE-NEXT: mtlr 0 234; PC64LE-NEXT: blr 235; 236; PC64LE9-LABEL: constrained_vector_frem_v1f32: 237; PC64LE9: # %bb.0: # %entry 238; PC64LE9-NEXT: mflr 0 239; PC64LE9-NEXT: std 0, 16(1) 240; PC64LE9-NEXT: stdu 1, -32(1) 241; PC64LE9-NEXT: addis 3, 2, .LCPI5_0@toc@ha 242; PC64LE9-NEXT: lfs 1, .LCPI5_0@toc@l(3) 243; PC64LE9-NEXT: addis 3, 2, .LCPI5_1@toc@ha 244; PC64LE9-NEXT: lfs 2, .LCPI5_1@toc@l(3) 245; PC64LE9-NEXT: bl fmodf 246; PC64LE9-NEXT: nop 247; PC64LE9-NEXT: addi 1, 1, 32 248; PC64LE9-NEXT: ld 0, 16(1) 249; PC64LE9-NEXT: mtlr 0 250; PC64LE9-NEXT: blr 251entry: 252 %rem = call <1 x float> @llvm.experimental.constrained.frem.v1f32( 253 <1 x float> <float 1.000000e+00>, 254 <1 x float> <float 1.000000e+01>, 255 metadata !"round.dynamic", 256 metadata !"fpexcept.strict") #1 257 ret <1 x float> %rem 258} 259 260define <2 x double> @constrained_vector_frem_v2f64() #0 { 261; PC64LE-LABEL: constrained_vector_frem_v2f64: 262; PC64LE: # %bb.0: # %entry 263; PC64LE-NEXT: mflr 0 264; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 265; PC64LE-NEXT: std 0, 16(1) 266; PC64LE-NEXT: stdu 1, -80(1) 267; PC64LE-NEXT: addis 4, 2, .LCPI6_1@toc@ha 268; PC64LE-NEXT: addis 3, 2, .LCPI6_0@toc@ha 269; PC64LE-NEXT: lfs 31, .LCPI6_1@toc@l(4) 270; PC64LE-NEXT: lfs 1, .LCPI6_0@toc@l(3) 271; PC64LE-NEXT: fmr 2, 31 272; PC64LE-NEXT: bl fmod 273; PC64LE-NEXT: nop 274; PC64LE-NEXT: li 3, 48 275; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 276; PC64LE-NEXT: fmr 2, 31 277; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 278; PC64LE-NEXT: addis 3, 2, .LCPI6_2@toc@ha 279; PC64LE-NEXT: lfs 1, .LCPI6_2@toc@l(3) 280; PC64LE-NEXT: bl fmod 281; PC64LE-NEXT: nop 282; PC64LE-NEXT: li 3, 48 283; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 284; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 285; PC64LE-NEXT: xxmrghd 34, 1, 0 286; PC64LE-NEXT: addi 1, 1, 80 287; PC64LE-NEXT: ld 0, 16(1) 288; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 289; PC64LE-NEXT: mtlr 0 290; PC64LE-NEXT: blr 291; 292; PC64LE9-LABEL: constrained_vector_frem_v2f64: 293; PC64LE9: # %bb.0: # %entry 294; PC64LE9-NEXT: mflr 0 295; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 296; PC64LE9-NEXT: std 0, 16(1) 297; PC64LE9-NEXT: stdu 1, -64(1) 298; PC64LE9-NEXT: addis 3, 2, .LCPI6_0@toc@ha 299; PC64LE9-NEXT: lfs 1, .LCPI6_0@toc@l(3) 300; PC64LE9-NEXT: addis 3, 2, .LCPI6_1@toc@ha 301; PC64LE9-NEXT: lfs 31, .LCPI6_1@toc@l(3) 302; PC64LE9-NEXT: fmr 2, 31 303; PC64LE9-NEXT: bl fmod 304; PC64LE9-NEXT: nop 305; PC64LE9-NEXT: addis 3, 2, .LCPI6_2@toc@ha 306; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 307; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 308; PC64LE9-NEXT: lfs 1, .LCPI6_2@toc@l(3) 309; PC64LE9-NEXT: fmr 2, 31 310; PC64LE9-NEXT: bl fmod 311; PC64LE9-NEXT: nop 312; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 313; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 314; PC64LE9-NEXT: xxmrghd 34, 1, 0 315; PC64LE9-NEXT: addi 1, 1, 64 316; PC64LE9-NEXT: ld 0, 16(1) 317; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 318; PC64LE9-NEXT: mtlr 0 319; PC64LE9-NEXT: blr 320entry: 321 %rem = call <2 x double> @llvm.experimental.constrained.frem.v2f64( 322 <2 x double> <double 1.000000e+00, double 2.000000e+00>, 323 <2 x double> <double 1.000000e+01, double 1.000000e+01>, 324 metadata !"round.dynamic", 325 metadata !"fpexcept.strict") #1 326 ret <2 x double> %rem 327} 328 329define <3 x float> @constrained_vector_frem_v3f32() #0 { 330; PC64LE-LABEL: constrained_vector_frem_v3f32: 331; PC64LE: # %bb.0: # %entry 332; PC64LE-NEXT: mflr 0 333; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 334; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 335; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 336; PC64LE-NEXT: std 0, 16(1) 337; PC64LE-NEXT: stdu 1, -64(1) 338; PC64LE-NEXT: addis 4, 2, .LCPI7_1@toc@ha 339; PC64LE-NEXT: addis 3, 2, .LCPI7_0@toc@ha 340; PC64LE-NEXT: lfs 31, .LCPI7_1@toc@l(4) 341; PC64LE-NEXT: lfs 1, .LCPI7_0@toc@l(3) 342; PC64LE-NEXT: fmr 2, 31 343; PC64LE-NEXT: bl fmodf 344; PC64LE-NEXT: nop 345; PC64LE-NEXT: addis 3, 2, .LCPI7_2@toc@ha 346; PC64LE-NEXT: fmr 2, 31 347; PC64LE-NEXT: fmr 30, 1 348; PC64LE-NEXT: lfs 1, .LCPI7_2@toc@l(3) 349; PC64LE-NEXT: bl fmodf 350; PC64LE-NEXT: nop 351; PC64LE-NEXT: addis 3, 2, .LCPI7_3@toc@ha 352; PC64LE-NEXT: fmr 2, 31 353; PC64LE-NEXT: fmr 29, 1 354; PC64LE-NEXT: lfs 1, .LCPI7_3@toc@l(3) 355; PC64LE-NEXT: bl fmodf 356; PC64LE-NEXT: nop 357; PC64LE-NEXT: xscvdpspn 0, 29 358; PC64LE-NEXT: addis 3, 2, .LCPI7_4@toc@ha 359; PC64LE-NEXT: xscvdpspn 1, 1 360; PC64LE-NEXT: addi 3, 3, .LCPI7_4@toc@l 361; PC64LE-NEXT: lvx 4, 0, 3 362; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 363; PC64LE-NEXT: xscvdpspn 0, 30 364; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 365; PC64LE-NEXT: vmrghw 2, 2, 3 366; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 367; PC64LE-NEXT: vperm 2, 3, 2, 4 368; PC64LE-NEXT: addi 1, 1, 64 369; PC64LE-NEXT: ld 0, 16(1) 370; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 371; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 372; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 373; PC64LE-NEXT: mtlr 0 374; PC64LE-NEXT: blr 375; 376; PC64LE9-LABEL: constrained_vector_frem_v3f32: 377; PC64LE9: # %bb.0: # %entry 378; PC64LE9-NEXT: mflr 0 379; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 380; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 381; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 382; PC64LE9-NEXT: std 0, 16(1) 383; PC64LE9-NEXT: stdu 1, -64(1) 384; PC64LE9-NEXT: addis 3, 2, .LCPI7_0@toc@ha 385; PC64LE9-NEXT: lfs 1, .LCPI7_0@toc@l(3) 386; PC64LE9-NEXT: addis 3, 2, .LCPI7_1@toc@ha 387; PC64LE9-NEXT: lfs 31, .LCPI7_1@toc@l(3) 388; PC64LE9-NEXT: fmr 2, 31 389; PC64LE9-NEXT: bl fmodf 390; PC64LE9-NEXT: nop 391; PC64LE9-NEXT: addis 3, 2, .LCPI7_2@toc@ha 392; PC64LE9-NEXT: fmr 30, 1 393; PC64LE9-NEXT: lfs 1, .LCPI7_2@toc@l(3) 394; PC64LE9-NEXT: fmr 2, 31 395; PC64LE9-NEXT: bl fmodf 396; PC64LE9-NEXT: nop 397; PC64LE9-NEXT: addis 3, 2, .LCPI7_3@toc@ha 398; PC64LE9-NEXT: fmr 29, 1 399; PC64LE9-NEXT: lfs 1, .LCPI7_3@toc@l(3) 400; PC64LE9-NEXT: fmr 2, 31 401; PC64LE9-NEXT: bl fmodf 402; PC64LE9-NEXT: nop 403; PC64LE9-NEXT: xscvdpspn 0, 1 404; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 405; PC64LE9-NEXT: xscvdpspn 0, 29 406; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 407; PC64LE9-NEXT: xscvdpspn 0, 30 408; PC64LE9-NEXT: addis 3, 2, .LCPI7_4@toc@ha 409; PC64LE9-NEXT: addi 3, 3, .LCPI7_4@toc@l 410; PC64LE9-NEXT: lxvx 36, 0, 3 411; PC64LE9-NEXT: vmrghw 2, 3, 2 412; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 413; PC64LE9-NEXT: vperm 2, 3, 2, 4 414; PC64LE9-NEXT: addi 1, 1, 64 415; PC64LE9-NEXT: ld 0, 16(1) 416; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 417; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 418; PC64LE9-NEXT: mtlr 0 419; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 420; PC64LE9-NEXT: blr 421entry: 422 %rem = call <3 x float> @llvm.experimental.constrained.frem.v3f32( 423 <3 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, 424 <3 x float> <float 1.000000e+01, float 1.000000e+01, float 1.000000e+01>, 425 metadata !"round.dynamic", 426 metadata !"fpexcept.strict") #1 427 ret <3 x float> %rem 428} 429 430define <3 x double> @constrained_vector_frem_v3f64() #0 { 431; PC64LE-LABEL: constrained_vector_frem_v3f64: 432; PC64LE: # %bb.0: # %entry 433; PC64LE-NEXT: mflr 0 434; PC64LE-NEXT: std 0, 16(1) 435; PC64LE-NEXT: stdu 1, -96(1) 436; PC64LE-NEXT: addis 4, 2, .LCPI8_1@toc@ha 437; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 438; PC64LE-NEXT: li 3, 64 439; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 440; PC64LE-NEXT: addis 3, 2, .LCPI8_0@toc@ha 441; PC64LE-NEXT: lfs 31, .LCPI8_1@toc@l(4) 442; PC64LE-NEXT: lfs 1, .LCPI8_0@toc@l(3) 443; PC64LE-NEXT: fmr 2, 31 444; PC64LE-NEXT: bl fmod 445; PC64LE-NEXT: nop 446; PC64LE-NEXT: li 3, 48 447; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 448; PC64LE-NEXT: fmr 2, 31 449; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 450; PC64LE-NEXT: addis 3, 2, .LCPI8_2@toc@ha 451; PC64LE-NEXT: lfs 1, .LCPI8_2@toc@l(3) 452; PC64LE-NEXT: bl fmod 453; PC64LE-NEXT: nop 454; PC64LE-NEXT: li 3, 48 455; PC64LE-NEXT: fmr 2, 31 456; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 457; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 458; PC64LE-NEXT: addis 3, 2, .LCPI8_3@toc@ha 459; PC64LE-NEXT: xxmrghd 63, 1, 0 460; PC64LE-NEXT: lfs 1, .LCPI8_3@toc@l(3) 461; PC64LE-NEXT: bl fmod 462; PC64LE-NEXT: nop 463; PC64LE-NEXT: xxswapd 0, 63 464; PC64LE-NEXT: li 3, 64 465; PC64LE-NEXT: xxlor 2, 63, 63 466; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 467; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 468; PC64LE-NEXT: fmr 3, 1 469; PC64LE-NEXT: fmr 1, 0 470; PC64LE-NEXT: addi 1, 1, 96 471; PC64LE-NEXT: ld 0, 16(1) 472; PC64LE-NEXT: mtlr 0 473; PC64LE-NEXT: blr 474; 475; PC64LE9-LABEL: constrained_vector_frem_v3f64: 476; PC64LE9: # %bb.0: # %entry 477; PC64LE9-NEXT: mflr 0 478; PC64LE9-NEXT: std 0, 16(1) 479; PC64LE9-NEXT: stdu 1, -80(1) 480; PC64LE9-NEXT: addis 3, 2, .LCPI8_0@toc@ha 481; PC64LE9-NEXT: lfs 1, .LCPI8_0@toc@l(3) 482; PC64LE9-NEXT: addis 3, 2, .LCPI8_1@toc@ha 483; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 484; PC64LE9-NEXT: lfs 31, .LCPI8_1@toc@l(3) 485; PC64LE9-NEXT: fmr 2, 31 486; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 487; PC64LE9-NEXT: bl fmod 488; PC64LE9-NEXT: nop 489; PC64LE9-NEXT: addis 3, 2, .LCPI8_2@toc@ha 490; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 491; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 492; PC64LE9-NEXT: lfs 1, .LCPI8_2@toc@l(3) 493; PC64LE9-NEXT: fmr 2, 31 494; PC64LE9-NEXT: bl fmod 495; PC64LE9-NEXT: nop 496; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 497; PC64LE9-NEXT: addis 3, 2, .LCPI8_3@toc@ha 498; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 499; PC64LE9-NEXT: xxmrghd 63, 1, 0 500; PC64LE9-NEXT: lfs 1, .LCPI8_3@toc@l(3) 501; PC64LE9-NEXT: fmr 2, 31 502; PC64LE9-NEXT: bl fmod 503; PC64LE9-NEXT: nop 504; PC64LE9-NEXT: fmr 3, 1 505; PC64LE9-NEXT: xxswapd 1, 63 506; PC64LE9-NEXT: xscpsgndp 2, 63, 63 507; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 508; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 509; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 510; PC64LE9-NEXT: addi 1, 1, 80 511; PC64LE9-NEXT: ld 0, 16(1) 512; PC64LE9-NEXT: mtlr 0 513; PC64LE9-NEXT: blr 514entry: 515 %rem = call <3 x double> @llvm.experimental.constrained.frem.v3f64( 516 <3 x double> <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00>, 517 <3 x double> <double 1.000000e+01, double 1.000000e+01, double 1.000000e+01>, 518 metadata !"round.dynamic", 519 metadata !"fpexcept.strict") #1 520 ret <3 x double> %rem 521} 522 523define <4 x double> @constrained_vector_frem_v4f64() #0 { 524; PC64LE-LABEL: constrained_vector_frem_v4f64: 525; PC64LE: # %bb.0: 526; PC64LE-NEXT: mflr 0 527; PC64LE-NEXT: std 0, 16(1) 528; PC64LE-NEXT: stdu 1, -96(1) 529; PC64LE-NEXT: addis 4, 2, .LCPI9_1@toc@ha 530; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 531; PC64LE-NEXT: li 3, 64 532; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 533; PC64LE-NEXT: addis 3, 2, .LCPI9_0@toc@ha 534; PC64LE-NEXT: lfs 31, .LCPI9_1@toc@l(4) 535; PC64LE-NEXT: lfs 1, .LCPI9_0@toc@l(3) 536; PC64LE-NEXT: fmr 2, 31 537; PC64LE-NEXT: bl fmod 538; PC64LE-NEXT: nop 539; PC64LE-NEXT: li 3, 48 540; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 541; PC64LE-NEXT: fmr 2, 31 542; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 543; PC64LE-NEXT: addis 3, 2, .LCPI9_2@toc@ha 544; PC64LE-NEXT: lfs 1, .LCPI9_2@toc@l(3) 545; PC64LE-NEXT: bl fmod 546; PC64LE-NEXT: nop 547; PC64LE-NEXT: li 3, 48 548; PC64LE-NEXT: fmr 2, 31 549; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 550; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 551; PC64LE-NEXT: addis 3, 2, .LCPI9_3@toc@ha 552; PC64LE-NEXT: xxmrghd 63, 1, 0 553; PC64LE-NEXT: lfs 1, .LCPI9_3@toc@l(3) 554; PC64LE-NEXT: bl fmod 555; PC64LE-NEXT: nop 556; PC64LE-NEXT: li 3, 48 557; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 558; PC64LE-NEXT: fmr 2, 31 559; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 560; PC64LE-NEXT: addis 3, 2, .LCPI9_4@toc@ha 561; PC64LE-NEXT: lfs 1, .LCPI9_4@toc@l(3) 562; PC64LE-NEXT: bl fmod 563; PC64LE-NEXT: nop 564; PC64LE-NEXT: li 3, 48 565; PC64LE-NEXT: vmr 2, 31 566; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 567; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 568; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 569; PC64LE-NEXT: li 3, 64 570; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 571; PC64LE-NEXT: xxmrghd 35, 1, 0 572; PC64LE-NEXT: addi 1, 1, 96 573; PC64LE-NEXT: ld 0, 16(1) 574; PC64LE-NEXT: mtlr 0 575; PC64LE-NEXT: blr 576; 577; PC64LE9-LABEL: constrained_vector_frem_v4f64: 578; PC64LE9: # %bb.0: 579; PC64LE9-NEXT: mflr 0 580; PC64LE9-NEXT: std 0, 16(1) 581; PC64LE9-NEXT: stdu 1, -80(1) 582; PC64LE9-NEXT: addis 3, 2, .LCPI9_0@toc@ha 583; PC64LE9-NEXT: lfs 1, .LCPI9_0@toc@l(3) 584; PC64LE9-NEXT: addis 3, 2, .LCPI9_1@toc@ha 585; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 586; PC64LE9-NEXT: lfs 31, .LCPI9_1@toc@l(3) 587; PC64LE9-NEXT: fmr 2, 31 588; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 589; PC64LE9-NEXT: bl fmod 590; PC64LE9-NEXT: nop 591; PC64LE9-NEXT: addis 3, 2, .LCPI9_2@toc@ha 592; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 593; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 594; PC64LE9-NEXT: lfs 1, .LCPI9_2@toc@l(3) 595; PC64LE9-NEXT: fmr 2, 31 596; PC64LE9-NEXT: bl fmod 597; PC64LE9-NEXT: nop 598; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 599; PC64LE9-NEXT: addis 3, 2, .LCPI9_3@toc@ha 600; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 601; PC64LE9-NEXT: xxmrghd 63, 1, 0 602; PC64LE9-NEXT: lfs 1, .LCPI9_3@toc@l(3) 603; PC64LE9-NEXT: fmr 2, 31 604; PC64LE9-NEXT: bl fmod 605; PC64LE9-NEXT: nop 606; PC64LE9-NEXT: addis 3, 2, .LCPI9_4@toc@ha 607; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 608; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 609; PC64LE9-NEXT: lfs 1, .LCPI9_4@toc@l(3) 610; PC64LE9-NEXT: fmr 2, 31 611; PC64LE9-NEXT: bl fmod 612; PC64LE9-NEXT: nop 613; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 614; PC64LE9-NEXT: vmr 2, 31 615; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 616; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 617; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 618; PC64LE9-NEXT: xxmrghd 35, 1, 0 619; PC64LE9-NEXT: addi 1, 1, 80 620; PC64LE9-NEXT: ld 0, 16(1) 621; PC64LE9-NEXT: mtlr 0 622; PC64LE9-NEXT: blr 623 %rem = call <4 x double> @llvm.experimental.constrained.frem.v4f64( 624 <4 x double> <double 1.000000e+00, double 2.000000e+00, 625 double 3.000000e+00, double 4.000000e+00>, 626 <4 x double> <double 1.000000e+01, double 1.000000e+01, 627 double 1.000000e+01, double 1.000000e+01>, 628 metadata !"round.dynamic", 629 metadata !"fpexcept.strict") #1 630 ret <4 x double> %rem 631} 632 633define <1 x float> @constrained_vector_fmul_v1f32() #0 { 634; PC64LE-LABEL: constrained_vector_fmul_v1f32: 635; PC64LE: # %bb.0: # %entry 636; PC64LE-NEXT: addis 3, 2, .LCPI10_0@toc@ha 637; PC64LE-NEXT: addis 4, 2, .LCPI10_1@toc@ha 638; PC64LE-NEXT: lfs 0, .LCPI10_0@toc@l(3) 639; PC64LE-NEXT: lfs 1, .LCPI10_1@toc@l(4) 640; PC64LE-NEXT: xsmulsp 1, 1, 0 641; PC64LE-NEXT: blr 642; 643; PC64LE9-LABEL: constrained_vector_fmul_v1f32: 644; PC64LE9: # %bb.0: # %entry 645; PC64LE9-NEXT: addis 3, 2, .LCPI10_0@toc@ha 646; PC64LE9-NEXT: lfs 0, .LCPI10_0@toc@l(3) 647; PC64LE9-NEXT: addis 3, 2, .LCPI10_1@toc@ha 648; PC64LE9-NEXT: lfs 1, .LCPI10_1@toc@l(3) 649; PC64LE9-NEXT: xsmulsp 1, 1, 0 650; PC64LE9-NEXT: blr 651entry: 652 %mul = call <1 x float> @llvm.experimental.constrained.fmul.v1f32( 653 <1 x float> <float 0x7FF0000000000000>, 654 <1 x float> <float 2.000000e+00>, 655 metadata !"round.dynamic", 656 metadata !"fpexcept.strict") #1 657 ret <1 x float> %mul 658} 659 660define <2 x double> @constrained_vector_fmul_v2f64() #0 { 661; PC64LE-LABEL: constrained_vector_fmul_v2f64: 662; PC64LE: # %bb.0: # %entry 663; PC64LE-NEXT: addis 3, 2, .LCPI11_0@toc@ha 664; PC64LE-NEXT: addis 4, 2, .LCPI11_1@toc@ha 665; PC64LE-NEXT: addi 3, 3, .LCPI11_0@toc@l 666; PC64LE-NEXT: addi 4, 4, .LCPI11_1@toc@l 667; PC64LE-NEXT: lxvd2x 0, 0, 3 668; PC64LE-NEXT: lxvd2x 1, 0, 4 669; PC64LE-NEXT: xxswapd 0, 0 670; PC64LE-NEXT: xxswapd 1, 1 671; PC64LE-NEXT: xvmuldp 34, 1, 0 672; PC64LE-NEXT: blr 673; 674; PC64LE9-LABEL: constrained_vector_fmul_v2f64: 675; PC64LE9: # %bb.0: # %entry 676; PC64LE9-NEXT: addis 3, 2, .LCPI11_0@toc@ha 677; PC64LE9-NEXT: addi 3, 3, .LCPI11_0@toc@l 678; PC64LE9-NEXT: lxvx 0, 0, 3 679; PC64LE9-NEXT: addis 3, 2, .LCPI11_1@toc@ha 680; PC64LE9-NEXT: addi 3, 3, .LCPI11_1@toc@l 681; PC64LE9-NEXT: lxvx 1, 0, 3 682; PC64LE9-NEXT: xvmuldp 34, 1, 0 683; PC64LE9-NEXT: blr 684entry: 685 %mul = call <2 x double> @llvm.experimental.constrained.fmul.v2f64( 686 <2 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>, 687 <2 x double> <double 2.000000e+00, double 3.000000e+00>, 688 metadata !"round.dynamic", 689 metadata !"fpexcept.strict") #1 690 ret <2 x double> %mul 691} 692 693define <3 x float> @constrained_vector_fmul_v3f32() #0 { 694; PC64LE-LABEL: constrained_vector_fmul_v3f32: 695; PC64LE: # %bb.0: # %entry 696; PC64LE-NEXT: addis 3, 2, .LCPI12_1@toc@ha 697; PC64LE-NEXT: addis 4, 2, .LCPI12_3@toc@ha 698; PC64LE-NEXT: addis 5, 2, .LCPI12_2@toc@ha 699; PC64LE-NEXT: lfs 0, .LCPI12_1@toc@l(3) 700; PC64LE-NEXT: lfs 1, .LCPI12_3@toc@l(4) 701; PC64LE-NEXT: lfs 2, .LCPI12_2@toc@l(5) 702; PC64LE-NEXT: addis 3, 2, .LCPI12_0@toc@ha 703; PC64LE-NEXT: xsmulsp 1, 0, 1 704; PC64LE-NEXT: lfs 3, .LCPI12_0@toc@l(3) 705; PC64LE-NEXT: addis 3, 2, .LCPI12_4@toc@ha 706; PC64LE-NEXT: xsmulsp 2, 0, 2 707; PC64LE-NEXT: addi 3, 3, .LCPI12_4@toc@l 708; PC64LE-NEXT: lvx 4, 0, 3 709; PC64LE-NEXT: xsmulsp 0, 0, 3 710; PC64LE-NEXT: xscvdpspn 1, 1 711; PC64LE-NEXT: xscvdpspn 2, 2 712; PC64LE-NEXT: xscvdpspn 0, 0 713; PC64LE-NEXT: xxsldwi 34, 1, 1, 3 714; PC64LE-NEXT: xxsldwi 35, 2, 2, 3 715; PC64LE-NEXT: vmrghw 2, 3, 2 716; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 717; PC64LE-NEXT: vperm 2, 3, 2, 4 718; PC64LE-NEXT: blr 719; 720; PC64LE9-LABEL: constrained_vector_fmul_v3f32: 721; PC64LE9: # %bb.0: # %entry 722; PC64LE9-NEXT: addis 3, 2, .LCPI12_0@toc@ha 723; PC64LE9-NEXT: lfs 0, .LCPI12_0@toc@l(3) 724; PC64LE9-NEXT: addis 3, 2, .LCPI12_1@toc@ha 725; PC64LE9-NEXT: lfs 1, .LCPI12_1@toc@l(3) 726; PC64LE9-NEXT: addis 3, 2, .LCPI12_2@toc@ha 727; PC64LE9-NEXT: xsmulsp 0, 1, 0 728; PC64LE9-NEXT: lfs 2, .LCPI12_2@toc@l(3) 729; PC64LE9-NEXT: addis 3, 2, .LCPI12_3@toc@ha 730; PC64LE9-NEXT: lfs 3, .LCPI12_3@toc@l(3) 731; PC64LE9-NEXT: addis 3, 2, .LCPI12_4@toc@ha 732; PC64LE9-NEXT: addi 3, 3, .LCPI12_4@toc@l 733; PC64LE9-NEXT: lxvx 36, 0, 3 734; PC64LE9-NEXT: xsmulsp 2, 1, 2 735; PC64LE9-NEXT: xsmulsp 1, 1, 3 736; PC64LE9-NEXT: xscvdpspn 0, 0 737; PC64LE9-NEXT: xscvdpspn 1, 1 738; PC64LE9-NEXT: xxsldwi 34, 1, 1, 3 739; PC64LE9-NEXT: xscvdpspn 1, 2 740; PC64LE9-NEXT: xxsldwi 35, 1, 1, 3 741; PC64LE9-NEXT: vmrghw 2, 3, 2 742; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 743; PC64LE9-NEXT: vperm 2, 3, 2, 4 744; PC64LE9-NEXT: blr 745entry: 746 %mul = call <3 x float> @llvm.experimental.constrained.fmul.v3f32( 747 <3 x float> <float 0x7FF0000000000000, float 0x7FF0000000000000, 748 float 0x7FF0000000000000>, 749 <3 x float> <float 1.000000e+00, float 1.000000e+01, float 1.000000e+02>, 750 metadata !"round.dynamic", 751 metadata !"fpexcept.strict") #1 752 ret <3 x float> %mul 753} 754 755define <3 x double> @constrained_vector_fmul_v3f64() #0 { 756; PC64LE-LABEL: constrained_vector_fmul_v3f64: 757; PC64LE: # %bb.0: # %entry 758; PC64LE-NEXT: addis 3, 2, .LCPI13_2@toc@ha 759; PC64LE-NEXT: addis 4, 2, .LCPI13_3@toc@ha 760; PC64LE-NEXT: addi 3, 3, .LCPI13_2@toc@l 761; PC64LE-NEXT: addi 4, 4, .LCPI13_3@toc@l 762; PC64LE-NEXT: lxvd2x 0, 0, 3 763; PC64LE-NEXT: lxvd2x 1, 0, 4 764; PC64LE-NEXT: addis 3, 2, .LCPI13_0@toc@ha 765; PC64LE-NEXT: addis 4, 2, .LCPI13_1@toc@ha 766; PC64LE-NEXT: lfd 3, .LCPI13_0@toc@l(3) 767; PC64LE-NEXT: xxswapd 0, 0 768; PC64LE-NEXT: xxswapd 1, 1 769; PC64LE-NEXT: xvmuldp 2, 1, 0 770; PC64LE-NEXT: lfs 0, .LCPI13_1@toc@l(4) 771; PC64LE-NEXT: xsmuldp 3, 3, 0 772; PC64LE-NEXT: xxswapd 1, 2 773; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 774; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 775; PC64LE-NEXT: blr 776; 777; PC64LE9-LABEL: constrained_vector_fmul_v3f64: 778; PC64LE9: # %bb.0: # %entry 779; PC64LE9-NEXT: addis 3, 2, .LCPI13_0@toc@ha 780; PC64LE9-NEXT: lfd 0, .LCPI13_0@toc@l(3) 781; PC64LE9-NEXT: addis 3, 2, .LCPI13_1@toc@ha 782; PC64LE9-NEXT: lfs 1, .LCPI13_1@toc@l(3) 783; PC64LE9-NEXT: addis 3, 2, .LCPI13_2@toc@ha 784; PC64LE9-NEXT: addi 3, 3, .LCPI13_2@toc@l 785; PC64LE9-NEXT: xsmuldp 3, 0, 1 786; PC64LE9-NEXT: lxvx 0, 0, 3 787; PC64LE9-NEXT: addis 3, 2, .LCPI13_3@toc@ha 788; PC64LE9-NEXT: addi 3, 3, .LCPI13_3@toc@l 789; PC64LE9-NEXT: lxvx 1, 0, 3 790; PC64LE9-NEXT: xvmuldp 2, 1, 0 791; PC64LE9-NEXT: xxswapd 1, 2 792; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 793; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 794; PC64LE9-NEXT: blr 795entry: 796 %mul = call <3 x double> @llvm.experimental.constrained.fmul.v3f64( 797 <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF, 798 double 0x7FEFFFFFFFFFFFFF>, 799 <3 x double> <double 1.000000e+00, double 1.000000e+01, double 1.000000e+02>, 800 metadata !"round.dynamic", 801 metadata !"fpexcept.strict") #1 802 ret <3 x double> %mul 803} 804 805define <4 x double> @constrained_vector_fmul_v4f64() #0 { 806; PC64LE-LABEL: constrained_vector_fmul_v4f64: 807; PC64LE: # %bb.0: # %entry 808; PC64LE-NEXT: addis 3, 2, .LCPI14_0@toc@ha 809; PC64LE-NEXT: addis 4, 2, .LCPI14_1@toc@ha 810; PC64LE-NEXT: addis 5, 2, .LCPI14_2@toc@ha 811; PC64LE-NEXT: addi 3, 3, .LCPI14_0@toc@l 812; PC64LE-NEXT: addi 4, 4, .LCPI14_1@toc@l 813; PC64LE-NEXT: lxvd2x 0, 0, 3 814; PC64LE-NEXT: addi 3, 5, .LCPI14_2@toc@l 815; PC64LE-NEXT: lxvd2x 1, 0, 4 816; PC64LE-NEXT: lxvd2x 2, 0, 3 817; PC64LE-NEXT: xxswapd 0, 0 818; PC64LE-NEXT: xxswapd 1, 1 819; PC64LE-NEXT: xxswapd 2, 2 820; PC64LE-NEXT: xvmuldp 35, 1, 0 821; PC64LE-NEXT: xvmuldp 34, 1, 2 822; PC64LE-NEXT: blr 823; 824; PC64LE9-LABEL: constrained_vector_fmul_v4f64: 825; PC64LE9: # %bb.0: # %entry 826; PC64LE9-NEXT: addis 3, 2, .LCPI14_0@toc@ha 827; PC64LE9-NEXT: addi 3, 3, .LCPI14_0@toc@l 828; PC64LE9-NEXT: lxvx 0, 0, 3 829; PC64LE9-NEXT: addis 3, 2, .LCPI14_1@toc@ha 830; PC64LE9-NEXT: addi 3, 3, .LCPI14_1@toc@l 831; PC64LE9-NEXT: lxvx 1, 0, 3 832; PC64LE9-NEXT: addis 3, 2, .LCPI14_2@toc@ha 833; PC64LE9-NEXT: addi 3, 3, .LCPI14_2@toc@l 834; PC64LE9-NEXT: xvmuldp 35, 1, 0 835; PC64LE9-NEXT: lxvx 0, 0, 3 836; PC64LE9-NEXT: xvmuldp 34, 1, 0 837; PC64LE9-NEXT: blr 838entry: 839 %mul = call <4 x double> @llvm.experimental.constrained.fmul.v4f64( 840 <4 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF, 841 double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>, 842 <4 x double> <double 2.000000e+00, double 3.000000e+00, 843 double 4.000000e+00, double 5.000000e+00>, 844 metadata !"round.dynamic", 845 metadata !"fpexcept.strict") #1 846 ret <4 x double> %mul 847} 848 849define <1 x float> @constrained_vector_fadd_v1f32() #0 { 850; PC64LE-LABEL: constrained_vector_fadd_v1f32: 851; PC64LE: # %bb.0: # %entry 852; PC64LE-NEXT: addis 3, 2, .LCPI15_0@toc@ha 853; PC64LE-NEXT: addis 4, 2, .LCPI15_1@toc@ha 854; PC64LE-NEXT: lfs 0, .LCPI15_0@toc@l(3) 855; PC64LE-NEXT: lfs 1, .LCPI15_1@toc@l(4) 856; PC64LE-NEXT: xsaddsp 1, 1, 0 857; PC64LE-NEXT: blr 858; 859; PC64LE9-LABEL: constrained_vector_fadd_v1f32: 860; PC64LE9: # %bb.0: # %entry 861; PC64LE9-NEXT: addis 3, 2, .LCPI15_0@toc@ha 862; PC64LE9-NEXT: lfs 0, .LCPI15_0@toc@l(3) 863; PC64LE9-NEXT: addis 3, 2, .LCPI15_1@toc@ha 864; PC64LE9-NEXT: lfs 1, .LCPI15_1@toc@l(3) 865; PC64LE9-NEXT: xsaddsp 1, 1, 0 866; PC64LE9-NEXT: blr 867entry: 868 %add = call <1 x float> @llvm.experimental.constrained.fadd.v1f32( 869 <1 x float> <float 0x7FF0000000000000>, 870 <1 x float> <float 1.0>, 871 metadata !"round.dynamic", 872 metadata !"fpexcept.strict") #1 873 ret <1 x float> %add 874} 875 876define <2 x double> @constrained_vector_fadd_v2f64() #0 { 877; PC64LE-LABEL: constrained_vector_fadd_v2f64: 878; PC64LE: # %bb.0: # %entry 879; PC64LE-NEXT: addis 3, 2, .LCPI16_0@toc@ha 880; PC64LE-NEXT: addis 4, 2, .LCPI16_1@toc@ha 881; PC64LE-NEXT: addi 3, 3, .LCPI16_0@toc@l 882; PC64LE-NEXT: addi 4, 4, .LCPI16_1@toc@l 883; PC64LE-NEXT: lxvd2x 0, 0, 3 884; PC64LE-NEXT: lxvd2x 1, 0, 4 885; PC64LE-NEXT: xxswapd 0, 0 886; PC64LE-NEXT: xxswapd 1, 1 887; PC64LE-NEXT: xvadddp 34, 1, 0 888; PC64LE-NEXT: blr 889; 890; PC64LE9-LABEL: constrained_vector_fadd_v2f64: 891; PC64LE9: # %bb.0: # %entry 892; PC64LE9-NEXT: addis 3, 2, .LCPI16_0@toc@ha 893; PC64LE9-NEXT: addi 3, 3, .LCPI16_0@toc@l 894; PC64LE9-NEXT: lxvx 0, 0, 3 895; PC64LE9-NEXT: addis 3, 2, .LCPI16_1@toc@ha 896; PC64LE9-NEXT: addi 3, 3, .LCPI16_1@toc@l 897; PC64LE9-NEXT: lxvx 1, 0, 3 898; PC64LE9-NEXT: xvadddp 34, 1, 0 899; PC64LE9-NEXT: blr 900entry: 901 %add = call <2 x double> @llvm.experimental.constrained.fadd.v2f64( 902 <2 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>, 903 <2 x double> <double 1.000000e+00, double 1.000000e-01>, 904 metadata !"round.dynamic", 905 metadata !"fpexcept.strict") #1 906 ret <2 x double> %add 907} 908 909define <3 x float> @constrained_vector_fadd_v3f32() #0 { 910; PC64LE-LABEL: constrained_vector_fadd_v3f32: 911; PC64LE: # %bb.0: # %entry 912; PC64LE-NEXT: addis 3, 2, .LCPI17_0@toc@ha 913; PC64LE-NEXT: addis 4, 2, .LCPI17_2@toc@ha 914; PC64LE-NEXT: addis 5, 2, .LCPI17_1@toc@ha 915; PC64LE-NEXT: xxlxor 3, 3, 3 916; PC64LE-NEXT: lfs 0, .LCPI17_0@toc@l(3) 917; PC64LE-NEXT: lfs 1, .LCPI17_2@toc@l(4) 918; PC64LE-NEXT: lfs 2, .LCPI17_1@toc@l(5) 919; PC64LE-NEXT: addis 3, 2, .LCPI17_3@toc@ha 920; PC64LE-NEXT: addi 3, 3, .LCPI17_3@toc@l 921; PC64LE-NEXT: xsaddsp 1, 0, 1 922; PC64LE-NEXT: lvx 4, 0, 3 923; PC64LE-NEXT: xsaddsp 2, 0, 2 924; PC64LE-NEXT: xsaddsp 0, 0, 3 925; PC64LE-NEXT: xscvdpspn 1, 1 926; PC64LE-NEXT: xscvdpspn 2, 2 927; PC64LE-NEXT: xscvdpspn 0, 0 928; PC64LE-NEXT: xxsldwi 34, 1, 1, 3 929; PC64LE-NEXT: xxsldwi 35, 2, 2, 3 930; PC64LE-NEXT: vmrghw 2, 3, 2 931; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 932; PC64LE-NEXT: vperm 2, 3, 2, 4 933; PC64LE-NEXT: blr 934; 935; PC64LE9-LABEL: constrained_vector_fadd_v3f32: 936; PC64LE9: # %bb.0: # %entry 937; PC64LE9-NEXT: addis 3, 2, .LCPI17_0@toc@ha 938; PC64LE9-NEXT: lfs 0, .LCPI17_0@toc@l(3) 939; PC64LE9-NEXT: addis 3, 2, .LCPI17_1@toc@ha 940; PC64LE9-NEXT: lfs 2, .LCPI17_1@toc@l(3) 941; PC64LE9-NEXT: addis 3, 2, .LCPI17_2@toc@ha 942; PC64LE9-NEXT: xsaddsp 2, 0, 2 943; PC64LE9-NEXT: lfs 3, .LCPI17_2@toc@l(3) 944; PC64LE9-NEXT: xxlxor 1, 1, 1 945; PC64LE9-NEXT: xsaddsp 1, 0, 1 946; PC64LE9-NEXT: xsaddsp 0, 0, 3 947; PC64LE9-NEXT: xscvdpspn 0, 0 948; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 949; PC64LE9-NEXT: xscvdpspn 0, 2 950; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 951; PC64LE9-NEXT: xscvdpspn 0, 1 952; PC64LE9-NEXT: addis 3, 2, .LCPI17_3@toc@ha 953; PC64LE9-NEXT: addi 3, 3, .LCPI17_3@toc@l 954; PC64LE9-NEXT: lxvx 36, 0, 3 955; PC64LE9-NEXT: vmrghw 2, 3, 2 956; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 957; PC64LE9-NEXT: vperm 2, 3, 2, 4 958; PC64LE9-NEXT: blr 959entry: 960 %add = call <3 x float> @llvm.experimental.constrained.fadd.v3f32( 961 <3 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000, 962 float 0xFFFFFFFFE0000000>, 963 <3 x float> <float 2.0, float 1.0, float 0.0>, 964 metadata !"round.dynamic", 965 metadata !"fpexcept.strict") #1 966 ret <3 x float> %add 967} 968 969define <3 x double> @constrained_vector_fadd_v3f64() #0 { 970; PC64LE-LABEL: constrained_vector_fadd_v3f64: 971; PC64LE: # %bb.0: # %entry 972; PC64LE-NEXT: addis 3, 2, .LCPI18_1@toc@ha 973; PC64LE-NEXT: addis 4, 2, .LCPI18_2@toc@ha 974; PC64LE-NEXT: addi 3, 3, .LCPI18_1@toc@l 975; PC64LE-NEXT: addi 4, 4, .LCPI18_2@toc@l 976; PC64LE-NEXT: lxvd2x 0, 0, 3 977; PC64LE-NEXT: lxvd2x 1, 0, 4 978; PC64LE-NEXT: addis 3, 2, .LCPI18_0@toc@ha 979; PC64LE-NEXT: lfd 3, .LCPI18_0@toc@l(3) 980; PC64LE-NEXT: xxswapd 0, 0 981; PC64LE-NEXT: xxswapd 1, 1 982; PC64LE-NEXT: xvadddp 2, 1, 0 983; PC64LE-NEXT: xxlxor 0, 0, 0 984; PC64LE-NEXT: xsadddp 3, 3, 0 985; PC64LE-NEXT: xxswapd 1, 2 986; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 987; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 988; PC64LE-NEXT: blr 989; 990; PC64LE9-LABEL: constrained_vector_fadd_v3f64: 991; PC64LE9: # %bb.0: # %entry 992; PC64LE9-NEXT: addis 3, 2, .LCPI18_0@toc@ha 993; PC64LE9-NEXT: lfd 0, .LCPI18_0@toc@l(3) 994; PC64LE9-NEXT: addis 3, 2, .LCPI18_1@toc@ha 995; PC64LE9-NEXT: xxlxor 1, 1, 1 996; PC64LE9-NEXT: addi 3, 3, .LCPI18_1@toc@l 997; PC64LE9-NEXT: xsadddp 3, 0, 1 998; PC64LE9-NEXT: lxvx 0, 0, 3 999; PC64LE9-NEXT: addis 3, 2, .LCPI18_2@toc@ha 1000; PC64LE9-NEXT: addi 3, 3, .LCPI18_2@toc@l 1001; PC64LE9-NEXT: lxvx 1, 0, 3 1002; PC64LE9-NEXT: xvadddp 2, 1, 0 1003; PC64LE9-NEXT: xxswapd 1, 2 1004; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1005; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1006; PC64LE9-NEXT: blr 1007entry: 1008 %add = call <3 x double> @llvm.experimental.constrained.fadd.v3f64( 1009 <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF, 1010 double 0x7FEFFFFFFFFFFFFF>, 1011 <3 x double> <double 2.0, double 1.0, double 0.0>, 1012 metadata !"round.dynamic", 1013 metadata !"fpexcept.strict") #1 1014 ret <3 x double> %add 1015} 1016 1017define <4 x double> @constrained_vector_fadd_v4f64() #0 { 1018; PC64LE-LABEL: constrained_vector_fadd_v4f64: 1019; PC64LE: # %bb.0: # %entry 1020; PC64LE-NEXT: addis 3, 2, .LCPI19_0@toc@ha 1021; PC64LE-NEXT: addis 4, 2, .LCPI19_1@toc@ha 1022; PC64LE-NEXT: addis 5, 2, .LCPI19_2@toc@ha 1023; PC64LE-NEXT: addi 3, 3, .LCPI19_0@toc@l 1024; PC64LE-NEXT: addi 4, 4, .LCPI19_1@toc@l 1025; PC64LE-NEXT: lxvd2x 0, 0, 3 1026; PC64LE-NEXT: addi 3, 5, .LCPI19_2@toc@l 1027; PC64LE-NEXT: lxvd2x 1, 0, 4 1028; PC64LE-NEXT: lxvd2x 2, 0, 3 1029; PC64LE-NEXT: xxswapd 0, 0 1030; PC64LE-NEXT: xxswapd 1, 1 1031; PC64LE-NEXT: xxswapd 2, 2 1032; PC64LE-NEXT: xvadddp 35, 1, 0 1033; PC64LE-NEXT: xvadddp 34, 1, 2 1034; PC64LE-NEXT: blr 1035; 1036; PC64LE9-LABEL: constrained_vector_fadd_v4f64: 1037; PC64LE9: # %bb.0: # %entry 1038; PC64LE9-NEXT: addis 3, 2, .LCPI19_0@toc@ha 1039; PC64LE9-NEXT: addi 3, 3, .LCPI19_0@toc@l 1040; PC64LE9-NEXT: lxvx 0, 0, 3 1041; PC64LE9-NEXT: addis 3, 2, .LCPI19_1@toc@ha 1042; PC64LE9-NEXT: addi 3, 3, .LCPI19_1@toc@l 1043; PC64LE9-NEXT: lxvx 1, 0, 3 1044; PC64LE9-NEXT: addis 3, 2, .LCPI19_2@toc@ha 1045; PC64LE9-NEXT: addi 3, 3, .LCPI19_2@toc@l 1046; PC64LE9-NEXT: xvadddp 35, 1, 0 1047; PC64LE9-NEXT: lxvx 0, 0, 3 1048; PC64LE9-NEXT: xvadddp 34, 1, 0 1049; PC64LE9-NEXT: blr 1050entry: 1051 %add = call <4 x double> @llvm.experimental.constrained.fadd.v4f64( 1052 <4 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF, 1053 double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>, 1054 <4 x double> <double 1.000000e+00, double 1.000000e-01, 1055 double 2.000000e+00, double 2.000000e-01>, 1056 metadata !"round.dynamic", 1057 metadata !"fpexcept.strict") #1 1058 ret <4 x double> %add 1059} 1060 1061define <1 x float> @constrained_vector_fsub_v1f32() #0 { 1062; PC64LE-LABEL: constrained_vector_fsub_v1f32: 1063; PC64LE: # %bb.0: # %entry 1064; PC64LE-NEXT: addis 3, 2, .LCPI20_0@toc@ha 1065; PC64LE-NEXT: addis 4, 2, .LCPI20_1@toc@ha 1066; PC64LE-NEXT: lfs 0, .LCPI20_0@toc@l(3) 1067; PC64LE-NEXT: lfs 1, .LCPI20_1@toc@l(4) 1068; PC64LE-NEXT: xssubsp 1, 1, 0 1069; PC64LE-NEXT: blr 1070; 1071; PC64LE9-LABEL: constrained_vector_fsub_v1f32: 1072; PC64LE9: # %bb.0: # %entry 1073; PC64LE9-NEXT: addis 3, 2, .LCPI20_0@toc@ha 1074; PC64LE9-NEXT: lfs 0, .LCPI20_0@toc@l(3) 1075; PC64LE9-NEXT: addis 3, 2, .LCPI20_1@toc@ha 1076; PC64LE9-NEXT: lfs 1, .LCPI20_1@toc@l(3) 1077; PC64LE9-NEXT: xssubsp 1, 1, 0 1078; PC64LE9-NEXT: blr 1079entry: 1080 %sub = call <1 x float> @llvm.experimental.constrained.fsub.v1f32( 1081 <1 x float> <float 0x7FF0000000000000>, 1082 <1 x float> <float 1.000000e+00>, 1083 metadata !"round.dynamic", 1084 metadata !"fpexcept.strict") #1 1085 ret <1 x float> %sub 1086} 1087 1088define <2 x double> @constrained_vector_fsub_v2f64() #0 { 1089; PC64LE-LABEL: constrained_vector_fsub_v2f64: 1090; PC64LE: # %bb.0: # %entry 1091; PC64LE-NEXT: addis 3, 2, .LCPI21_0@toc@ha 1092; PC64LE-NEXT: addis 4, 2, .LCPI21_1@toc@ha 1093; PC64LE-NEXT: addi 3, 3, .LCPI21_0@toc@l 1094; PC64LE-NEXT: addi 4, 4, .LCPI21_1@toc@l 1095; PC64LE-NEXT: lxvd2x 0, 0, 3 1096; PC64LE-NEXT: lxvd2x 1, 0, 4 1097; PC64LE-NEXT: xxswapd 0, 0 1098; PC64LE-NEXT: xxswapd 1, 1 1099; PC64LE-NEXT: xvsubdp 34, 1, 0 1100; PC64LE-NEXT: blr 1101; 1102; PC64LE9-LABEL: constrained_vector_fsub_v2f64: 1103; PC64LE9: # %bb.0: # %entry 1104; PC64LE9-NEXT: addis 3, 2, .LCPI21_0@toc@ha 1105; PC64LE9-NEXT: addi 3, 3, .LCPI21_0@toc@l 1106; PC64LE9-NEXT: lxvx 0, 0, 3 1107; PC64LE9-NEXT: addis 3, 2, .LCPI21_1@toc@ha 1108; PC64LE9-NEXT: addi 3, 3, .LCPI21_1@toc@l 1109; PC64LE9-NEXT: lxvx 1, 0, 3 1110; PC64LE9-NEXT: xvsubdp 34, 1, 0 1111; PC64LE9-NEXT: blr 1112entry: 1113 %sub = call <2 x double> @llvm.experimental.constrained.fsub.v2f64( 1114 <2 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF>, 1115 <2 x double> <double 1.000000e+00, double 1.000000e-01>, 1116 metadata !"round.dynamic", 1117 metadata !"fpexcept.strict") #1 1118 ret <2 x double> %sub 1119} 1120 1121define <3 x float> @constrained_vector_fsub_v3f32() #0 { 1122; PC64LE-LABEL: constrained_vector_fsub_v3f32: 1123; PC64LE: # %bb.0: # %entry 1124; PC64LE-NEXT: addis 3, 2, .LCPI22_0@toc@ha 1125; PC64LE-NEXT: addis 4, 2, .LCPI22_2@toc@ha 1126; PC64LE-NEXT: addis 5, 2, .LCPI22_1@toc@ha 1127; PC64LE-NEXT: xxlxor 3, 3, 3 1128; PC64LE-NEXT: lfs 0, .LCPI22_0@toc@l(3) 1129; PC64LE-NEXT: lfs 1, .LCPI22_2@toc@l(4) 1130; PC64LE-NEXT: lfs 2, .LCPI22_1@toc@l(5) 1131; PC64LE-NEXT: addis 3, 2, .LCPI22_3@toc@ha 1132; PC64LE-NEXT: addi 3, 3, .LCPI22_3@toc@l 1133; PC64LE-NEXT: xssubsp 1, 0, 1 1134; PC64LE-NEXT: lvx 4, 0, 3 1135; PC64LE-NEXT: xssubsp 2, 0, 2 1136; PC64LE-NEXT: xssubsp 0, 0, 3 1137; PC64LE-NEXT: xscvdpspn 1, 1 1138; PC64LE-NEXT: xscvdpspn 2, 2 1139; PC64LE-NEXT: xscvdpspn 0, 0 1140; PC64LE-NEXT: xxsldwi 34, 1, 1, 3 1141; PC64LE-NEXT: xxsldwi 35, 2, 2, 3 1142; PC64LE-NEXT: vmrghw 2, 3, 2 1143; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 1144; PC64LE-NEXT: vperm 2, 3, 2, 4 1145; PC64LE-NEXT: blr 1146; 1147; PC64LE9-LABEL: constrained_vector_fsub_v3f32: 1148; PC64LE9: # %bb.0: # %entry 1149; PC64LE9-NEXT: addis 3, 2, .LCPI22_0@toc@ha 1150; PC64LE9-NEXT: lfs 0, .LCPI22_0@toc@l(3) 1151; PC64LE9-NEXT: addis 3, 2, .LCPI22_1@toc@ha 1152; PC64LE9-NEXT: lfs 2, .LCPI22_1@toc@l(3) 1153; PC64LE9-NEXT: addis 3, 2, .LCPI22_2@toc@ha 1154; PC64LE9-NEXT: xssubsp 2, 0, 2 1155; PC64LE9-NEXT: lfs 3, .LCPI22_2@toc@l(3) 1156; PC64LE9-NEXT: xxlxor 1, 1, 1 1157; PC64LE9-NEXT: xssubsp 1, 0, 1 1158; PC64LE9-NEXT: xssubsp 0, 0, 3 1159; PC64LE9-NEXT: xscvdpspn 0, 0 1160; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 1161; PC64LE9-NEXT: xscvdpspn 0, 2 1162; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 1163; PC64LE9-NEXT: xscvdpspn 0, 1 1164; PC64LE9-NEXT: addis 3, 2, .LCPI22_3@toc@ha 1165; PC64LE9-NEXT: addi 3, 3, .LCPI22_3@toc@l 1166; PC64LE9-NEXT: lxvx 36, 0, 3 1167; PC64LE9-NEXT: vmrghw 2, 3, 2 1168; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 1169; PC64LE9-NEXT: vperm 2, 3, 2, 4 1170; PC64LE9-NEXT: blr 1171entry: 1172 %sub = call <3 x float> @llvm.experimental.constrained.fsub.v3f32( 1173 <3 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000, 1174 float 0xFFFFFFFFE0000000>, 1175 <3 x float> <float 2.0, float 1.0, float 0.0>, 1176 metadata !"round.dynamic", 1177 metadata !"fpexcept.strict") #1 1178 ret <3 x float> %sub 1179} 1180 1181define <3 x double> @constrained_vector_fsub_v3f64() #0 { 1182; PC64LE-LABEL: constrained_vector_fsub_v3f64: 1183; PC64LE: # %bb.0: # %entry 1184; PC64LE-NEXT: addis 3, 2, .LCPI23_1@toc@ha 1185; PC64LE-NEXT: addis 4, 2, .LCPI23_2@toc@ha 1186; PC64LE-NEXT: addi 3, 3, .LCPI23_1@toc@l 1187; PC64LE-NEXT: addi 4, 4, .LCPI23_2@toc@l 1188; PC64LE-NEXT: lxvd2x 0, 0, 3 1189; PC64LE-NEXT: lxvd2x 1, 0, 4 1190; PC64LE-NEXT: addis 3, 2, .LCPI23_0@toc@ha 1191; PC64LE-NEXT: lfd 3, .LCPI23_0@toc@l(3) 1192; PC64LE-NEXT: xxswapd 0, 0 1193; PC64LE-NEXT: xxswapd 1, 1 1194; PC64LE-NEXT: xvsubdp 2, 1, 0 1195; PC64LE-NEXT: xxlxor 0, 0, 0 1196; PC64LE-NEXT: xssubdp 3, 3, 0 1197; PC64LE-NEXT: xxswapd 1, 2 1198; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1199; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1200; PC64LE-NEXT: blr 1201; 1202; PC64LE9-LABEL: constrained_vector_fsub_v3f64: 1203; PC64LE9: # %bb.0: # %entry 1204; PC64LE9-NEXT: addis 3, 2, .LCPI23_0@toc@ha 1205; PC64LE9-NEXT: lfd 0, .LCPI23_0@toc@l(3) 1206; PC64LE9-NEXT: addis 3, 2, .LCPI23_1@toc@ha 1207; PC64LE9-NEXT: xxlxor 1, 1, 1 1208; PC64LE9-NEXT: addi 3, 3, .LCPI23_1@toc@l 1209; PC64LE9-NEXT: xssubdp 3, 0, 1 1210; PC64LE9-NEXT: lxvx 0, 0, 3 1211; PC64LE9-NEXT: addis 3, 2, .LCPI23_2@toc@ha 1212; PC64LE9-NEXT: addi 3, 3, .LCPI23_2@toc@l 1213; PC64LE9-NEXT: lxvx 1, 0, 3 1214; PC64LE9-NEXT: xvsubdp 2, 1, 0 1215; PC64LE9-NEXT: xxswapd 1, 2 1216; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1217; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1218; PC64LE9-NEXT: blr 1219entry: 1220 %sub = call <3 x double> @llvm.experimental.constrained.fsub.v3f64( 1221 <3 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF, 1222 double 0xFFEFFFFFFFFFFFFF>, 1223 <3 x double> <double 2.0, double 1.0, double 0.0>, 1224 metadata !"round.dynamic", 1225 metadata !"fpexcept.strict") #1 1226 ret <3 x double> %sub 1227} 1228 1229define <4 x double> @constrained_vector_fsub_v4f64() #0 { 1230; PC64LE-LABEL: constrained_vector_fsub_v4f64: 1231; PC64LE: # %bb.0: # %entry 1232; PC64LE-NEXT: addis 3, 2, .LCPI24_0@toc@ha 1233; PC64LE-NEXT: addis 4, 2, .LCPI24_1@toc@ha 1234; PC64LE-NEXT: addis 5, 2, .LCPI24_2@toc@ha 1235; PC64LE-NEXT: addi 3, 3, .LCPI24_0@toc@l 1236; PC64LE-NEXT: addi 4, 4, .LCPI24_1@toc@l 1237; PC64LE-NEXT: lxvd2x 0, 0, 3 1238; PC64LE-NEXT: addi 3, 5, .LCPI24_2@toc@l 1239; PC64LE-NEXT: lxvd2x 1, 0, 4 1240; PC64LE-NEXT: lxvd2x 2, 0, 3 1241; PC64LE-NEXT: xxswapd 0, 0 1242; PC64LE-NEXT: xxswapd 1, 1 1243; PC64LE-NEXT: xxswapd 2, 2 1244; PC64LE-NEXT: xvsubdp 35, 1, 0 1245; PC64LE-NEXT: xvsubdp 34, 1, 2 1246; PC64LE-NEXT: blr 1247; 1248; PC64LE9-LABEL: constrained_vector_fsub_v4f64: 1249; PC64LE9: # %bb.0: # %entry 1250; PC64LE9-NEXT: addis 3, 2, .LCPI24_0@toc@ha 1251; PC64LE9-NEXT: addi 3, 3, .LCPI24_0@toc@l 1252; PC64LE9-NEXT: lxvx 0, 0, 3 1253; PC64LE9-NEXT: addis 3, 2, .LCPI24_1@toc@ha 1254; PC64LE9-NEXT: addi 3, 3, .LCPI24_1@toc@l 1255; PC64LE9-NEXT: lxvx 1, 0, 3 1256; PC64LE9-NEXT: addis 3, 2, .LCPI24_2@toc@ha 1257; PC64LE9-NEXT: addi 3, 3, .LCPI24_2@toc@l 1258; PC64LE9-NEXT: xvsubdp 35, 1, 0 1259; PC64LE9-NEXT: lxvx 0, 0, 3 1260; PC64LE9-NEXT: xvsubdp 34, 1, 0 1261; PC64LE9-NEXT: blr 1262entry: 1263 %sub = call <4 x double> @llvm.experimental.constrained.fsub.v4f64( 1264 <4 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF, 1265 double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF>, 1266 <4 x double> <double 1.000000e+00, double 1.000000e-01, 1267 double 2.000000e+00, double 2.000000e-01>, 1268 metadata !"round.dynamic", 1269 metadata !"fpexcept.strict") #1 1270 ret <4 x double> %sub 1271} 1272 1273define <1 x float> @constrained_vector_sqrt_v1f32() #0 { 1274; PC64LE-LABEL: constrained_vector_sqrt_v1f32: 1275; PC64LE: # %bb.0: # %entry 1276; PC64LE-NEXT: addis 3, 2, .LCPI25_0@toc@ha 1277; PC64LE-NEXT: lfs 0, .LCPI25_0@toc@l(3) 1278; PC64LE-NEXT: xssqrtsp 1, 0 1279; PC64LE-NEXT: blr 1280; 1281; PC64LE9-LABEL: constrained_vector_sqrt_v1f32: 1282; PC64LE9: # %bb.0: # %entry 1283; PC64LE9-NEXT: addis 3, 2, .LCPI25_0@toc@ha 1284; PC64LE9-NEXT: lfs 0, .LCPI25_0@toc@l(3) 1285; PC64LE9-NEXT: xssqrtsp 1, 0 1286; PC64LE9-NEXT: blr 1287entry: 1288 %sqrt = call <1 x float> @llvm.experimental.constrained.sqrt.v1f32( 1289 <1 x float> <float 42.0>, 1290 metadata !"round.dynamic", 1291 metadata !"fpexcept.strict") #1 1292 ret <1 x float> %sqrt 1293} 1294 1295define <2 x double> @constrained_vector_sqrt_v2f64() #0 { 1296; PC64LE-LABEL: constrained_vector_sqrt_v2f64: 1297; PC64LE: # %bb.0: # %entry 1298; PC64LE-NEXT: addis 3, 2, .LCPI26_0@toc@ha 1299; PC64LE-NEXT: addi 3, 3, .LCPI26_0@toc@l 1300; PC64LE-NEXT: lxvd2x 0, 0, 3 1301; PC64LE-NEXT: xxswapd 0, 0 1302; PC64LE-NEXT: xvsqrtdp 34, 0 1303; PC64LE-NEXT: blr 1304; 1305; PC64LE9-LABEL: constrained_vector_sqrt_v2f64: 1306; PC64LE9: # %bb.0: # %entry 1307; PC64LE9-NEXT: addis 3, 2, .LCPI26_0@toc@ha 1308; PC64LE9-NEXT: addi 3, 3, .LCPI26_0@toc@l 1309; PC64LE9-NEXT: lxvx 0, 0, 3 1310; PC64LE9-NEXT: xvsqrtdp 34, 0 1311; PC64LE9-NEXT: blr 1312entry: 1313 %sqrt = call <2 x double> @llvm.experimental.constrained.sqrt.v2f64( 1314 <2 x double> <double 42.0, double 42.1>, 1315 metadata !"round.dynamic", 1316 metadata !"fpexcept.strict") #1 1317 ret <2 x double> %sqrt 1318} 1319 1320define <3 x float> @constrained_vector_sqrt_v3f32() #0 { 1321; PC64LE-LABEL: constrained_vector_sqrt_v3f32: 1322; PC64LE: # %bb.0: # %entry 1323; PC64LE-NEXT: addis 3, 2, .LCPI27_2@toc@ha 1324; PC64LE-NEXT: addis 4, 2, .LCPI27_1@toc@ha 1325; PC64LE-NEXT: lfs 0, .LCPI27_2@toc@l(3) 1326; PC64LE-NEXT: lfs 1, .LCPI27_1@toc@l(4) 1327; PC64LE-NEXT: addis 3, 2, .LCPI27_0@toc@ha 1328; PC64LE-NEXT: xssqrtsp 0, 0 1329; PC64LE-NEXT: lfs 2, .LCPI27_0@toc@l(3) 1330; PC64LE-NEXT: addis 3, 2, .LCPI27_3@toc@ha 1331; PC64LE-NEXT: xssqrtsp 1, 1 1332; PC64LE-NEXT: addi 3, 3, .LCPI27_3@toc@l 1333; PC64LE-NEXT: xssqrtsp 2, 2 1334; PC64LE-NEXT: xscvdpspn 0, 0 1335; PC64LE-NEXT: xscvdpspn 1, 1 1336; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 1337; PC64LE-NEXT: xscvdpspn 0, 2 1338; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 1339; PC64LE-NEXT: vmrghw 2, 3, 2 1340; PC64LE-NEXT: lvx 3, 0, 3 1341; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 1342; PC64LE-NEXT: vperm 2, 4, 2, 3 1343; PC64LE-NEXT: blr 1344; 1345; PC64LE9-LABEL: constrained_vector_sqrt_v3f32: 1346; PC64LE9: # %bb.0: # %entry 1347; PC64LE9-NEXT: addis 3, 2, .LCPI27_0@toc@ha 1348; PC64LE9-NEXT: lfs 0, .LCPI27_0@toc@l(3) 1349; PC64LE9-NEXT: addis 3, 2, .LCPI27_1@toc@ha 1350; PC64LE9-NEXT: lfs 1, .LCPI27_1@toc@l(3) 1351; PC64LE9-NEXT: addis 3, 2, .LCPI27_2@toc@ha 1352; PC64LE9-NEXT: xssqrtsp 0, 0 1353; PC64LE9-NEXT: lfs 2, .LCPI27_2@toc@l(3) 1354; PC64LE9-NEXT: addis 3, 2, .LCPI27_3@toc@ha 1355; PC64LE9-NEXT: addi 3, 3, .LCPI27_3@toc@l 1356; PC64LE9-NEXT: xssqrtsp 1, 1 1357; PC64LE9-NEXT: xssqrtsp 2, 2 1358; PC64LE9-NEXT: xscvdpspn 0, 0 1359; PC64LE9-NEXT: xscvdpspn 1, 1 1360; PC64LE9-NEXT: xscvdpspn 2, 2 1361; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 1362; PC64LE9-NEXT: xxsldwi 35, 1, 1, 3 1363; PC64LE9-NEXT: xxsldwi 34, 2, 2, 3 1364; PC64LE9-NEXT: vmrghw 2, 3, 2 1365; PC64LE9-NEXT: lxvx 35, 0, 3 1366; PC64LE9-NEXT: vperm 2, 4, 2, 3 1367; PC64LE9-NEXT: blr 1368entry: 1369 %sqrt = call <3 x float> @llvm.experimental.constrained.sqrt.v3f32( 1370 <3 x float> <float 42.0, float 43.0, float 44.0>, 1371 metadata !"round.dynamic", 1372 metadata !"fpexcept.strict") #1 1373 ret <3 x float> %sqrt 1374} 1375 1376define <3 x double> @constrained_vector_sqrt_v3f64() #0 { 1377; PC64LE-LABEL: constrained_vector_sqrt_v3f64: 1378; PC64LE: # %bb.0: # %entry 1379; PC64LE-NEXT: addis 3, 2, .LCPI28_1@toc@ha 1380; PC64LE-NEXT: addi 3, 3, .LCPI28_1@toc@l 1381; PC64LE-NEXT: lxvd2x 0, 0, 3 1382; PC64LE-NEXT: addis 3, 2, .LCPI28_0@toc@ha 1383; PC64LE-NEXT: lfd 1, .LCPI28_0@toc@l(3) 1384; PC64LE-NEXT: xxswapd 0, 0 1385; PC64LE-NEXT: xssqrtdp 3, 1 1386; PC64LE-NEXT: xvsqrtdp 2, 0 1387; PC64LE-NEXT: xxswapd 1, 2 1388; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1389; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1390; PC64LE-NEXT: blr 1391; 1392; PC64LE9-LABEL: constrained_vector_sqrt_v3f64: 1393; PC64LE9: # %bb.0: # %entry 1394; PC64LE9-NEXT: addis 3, 2, .LCPI28_0@toc@ha 1395; PC64LE9-NEXT: lfd 0, .LCPI28_0@toc@l(3) 1396; PC64LE9-NEXT: addis 3, 2, .LCPI28_1@toc@ha 1397; PC64LE9-NEXT: addi 3, 3, .LCPI28_1@toc@l 1398; PC64LE9-NEXT: xssqrtdp 3, 0 1399; PC64LE9-NEXT: lxvx 0, 0, 3 1400; PC64LE9-NEXT: xvsqrtdp 2, 0 1401; PC64LE9-NEXT: xxswapd 1, 2 1402; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1403; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1404; PC64LE9-NEXT: blr 1405entry: 1406 %sqrt = call <3 x double> @llvm.experimental.constrained.sqrt.v3f64( 1407 <3 x double> <double 42.0, double 42.1, double 42.2>, 1408 metadata !"round.dynamic", 1409 metadata !"fpexcept.strict") #1 1410 ret <3 x double> %sqrt 1411} 1412 1413define <4 x double> @constrained_vector_sqrt_v4f64() #0 { 1414; PC64LE-LABEL: constrained_vector_sqrt_v4f64: 1415; PC64LE: # %bb.0: # %entry 1416; PC64LE-NEXT: addis 3, 2, .LCPI29_0@toc@ha 1417; PC64LE-NEXT: addis 4, 2, .LCPI29_1@toc@ha 1418; PC64LE-NEXT: addi 3, 3, .LCPI29_0@toc@l 1419; PC64LE-NEXT: addi 4, 4, .LCPI29_1@toc@l 1420; PC64LE-NEXT: lxvd2x 0, 0, 3 1421; PC64LE-NEXT: lxvd2x 1, 0, 4 1422; PC64LE-NEXT: xxswapd 0, 0 1423; PC64LE-NEXT: xxswapd 1, 1 1424; PC64LE-NEXT: xvsqrtdp 35, 0 1425; PC64LE-NEXT: xvsqrtdp 34, 1 1426; PC64LE-NEXT: blr 1427; 1428; PC64LE9-LABEL: constrained_vector_sqrt_v4f64: 1429; PC64LE9: # %bb.0: # %entry 1430; PC64LE9-NEXT: addis 3, 2, .LCPI29_0@toc@ha 1431; PC64LE9-NEXT: addi 3, 3, .LCPI29_0@toc@l 1432; PC64LE9-NEXT: lxvx 0, 0, 3 1433; PC64LE9-NEXT: addis 3, 2, .LCPI29_1@toc@ha 1434; PC64LE9-NEXT: addi 3, 3, .LCPI29_1@toc@l 1435; PC64LE9-NEXT: xvsqrtdp 35, 0 1436; PC64LE9-NEXT: lxvx 0, 0, 3 1437; PC64LE9-NEXT: xvsqrtdp 34, 0 1438; PC64LE9-NEXT: blr 1439 entry: 1440 %sqrt = call <4 x double> @llvm.experimental.constrained.sqrt.v4f64( 1441 <4 x double> <double 42.0, double 42.1, 1442 double 42.2, double 42.3>, 1443 metadata !"round.dynamic", 1444 metadata !"fpexcept.strict") #1 1445 ret <4 x double> %sqrt 1446} 1447 1448define <1 x float> @constrained_vector_pow_v1f32() #0 { 1449; PC64LE-LABEL: constrained_vector_pow_v1f32: 1450; PC64LE: # %bb.0: # %entry 1451; PC64LE-NEXT: mflr 0 1452; PC64LE-NEXT: std 0, 16(1) 1453; PC64LE-NEXT: stdu 1, -32(1) 1454; PC64LE-NEXT: addis 3, 2, .LCPI30_0@toc@ha 1455; PC64LE-NEXT: addis 4, 2, .LCPI30_1@toc@ha 1456; PC64LE-NEXT: lfs 1, .LCPI30_0@toc@l(3) 1457; PC64LE-NEXT: lfs 2, .LCPI30_1@toc@l(4) 1458; PC64LE-NEXT: bl powf 1459; PC64LE-NEXT: nop 1460; PC64LE-NEXT: addi 1, 1, 32 1461; PC64LE-NEXT: ld 0, 16(1) 1462; PC64LE-NEXT: mtlr 0 1463; PC64LE-NEXT: blr 1464; 1465; PC64LE9-LABEL: constrained_vector_pow_v1f32: 1466; PC64LE9: # %bb.0: # %entry 1467; PC64LE9-NEXT: mflr 0 1468; PC64LE9-NEXT: std 0, 16(1) 1469; PC64LE9-NEXT: stdu 1, -32(1) 1470; PC64LE9-NEXT: addis 3, 2, .LCPI30_0@toc@ha 1471; PC64LE9-NEXT: lfs 1, .LCPI30_0@toc@l(3) 1472; PC64LE9-NEXT: addis 3, 2, .LCPI30_1@toc@ha 1473; PC64LE9-NEXT: lfs 2, .LCPI30_1@toc@l(3) 1474; PC64LE9-NEXT: bl powf 1475; PC64LE9-NEXT: nop 1476; PC64LE9-NEXT: addi 1, 1, 32 1477; PC64LE9-NEXT: ld 0, 16(1) 1478; PC64LE9-NEXT: mtlr 0 1479; PC64LE9-NEXT: blr 1480entry: 1481 %pow = call <1 x float> @llvm.experimental.constrained.pow.v1f32( 1482 <1 x float> <float 42.0>, 1483 <1 x float> <float 3.0>, 1484 metadata !"round.dynamic", 1485 metadata !"fpexcept.strict") #1 1486 ret <1 x float> %pow 1487} 1488 1489define <2 x double> @constrained_vector_pow_v2f64() #0 { 1490; PC64LE-LABEL: constrained_vector_pow_v2f64: 1491; PC64LE: # %bb.0: # %entry 1492; PC64LE-NEXT: mflr 0 1493; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1494; PC64LE-NEXT: std 0, 16(1) 1495; PC64LE-NEXT: stdu 1, -80(1) 1496; PC64LE-NEXT: addis 4, 2, .LCPI31_1@toc@ha 1497; PC64LE-NEXT: addis 3, 2, .LCPI31_0@toc@ha 1498; PC64LE-NEXT: lfs 31, .LCPI31_1@toc@l(4) 1499; PC64LE-NEXT: lfd 1, .LCPI31_0@toc@l(3) 1500; PC64LE-NEXT: fmr 2, 31 1501; PC64LE-NEXT: bl pow 1502; PC64LE-NEXT: nop 1503; PC64LE-NEXT: li 3, 48 1504; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1505; PC64LE-NEXT: fmr 2, 31 1506; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 1507; PC64LE-NEXT: addis 3, 2, .LCPI31_2@toc@ha 1508; PC64LE-NEXT: lfd 1, .LCPI31_2@toc@l(3) 1509; PC64LE-NEXT: bl pow 1510; PC64LE-NEXT: nop 1511; PC64LE-NEXT: li 3, 48 1512; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1513; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 1514; PC64LE-NEXT: xxmrghd 34, 1, 0 1515; PC64LE-NEXT: addi 1, 1, 80 1516; PC64LE-NEXT: ld 0, 16(1) 1517; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1518; PC64LE-NEXT: mtlr 0 1519; PC64LE-NEXT: blr 1520; 1521; PC64LE9-LABEL: constrained_vector_pow_v2f64: 1522; PC64LE9: # %bb.0: # %entry 1523; PC64LE9-NEXT: mflr 0 1524; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1525; PC64LE9-NEXT: std 0, 16(1) 1526; PC64LE9-NEXT: stdu 1, -64(1) 1527; PC64LE9-NEXT: addis 3, 2, .LCPI31_0@toc@ha 1528; PC64LE9-NEXT: lfd 1, .LCPI31_0@toc@l(3) 1529; PC64LE9-NEXT: addis 3, 2, .LCPI31_1@toc@ha 1530; PC64LE9-NEXT: lfs 31, .LCPI31_1@toc@l(3) 1531; PC64LE9-NEXT: fmr 2, 31 1532; PC64LE9-NEXT: bl pow 1533; PC64LE9-NEXT: nop 1534; PC64LE9-NEXT: addis 3, 2, .LCPI31_2@toc@ha 1535; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1536; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 1537; PC64LE9-NEXT: lfd 1, .LCPI31_2@toc@l(3) 1538; PC64LE9-NEXT: fmr 2, 31 1539; PC64LE9-NEXT: bl pow 1540; PC64LE9-NEXT: nop 1541; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 1542; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1543; PC64LE9-NEXT: xxmrghd 34, 1, 0 1544; PC64LE9-NEXT: addi 1, 1, 64 1545; PC64LE9-NEXT: ld 0, 16(1) 1546; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1547; PC64LE9-NEXT: mtlr 0 1548; PC64LE9-NEXT: blr 1549entry: 1550 %pow = call <2 x double> @llvm.experimental.constrained.pow.v2f64( 1551 <2 x double> <double 42.1, double 42.2>, 1552 <2 x double> <double 3.0, double 3.0>, 1553 metadata !"round.dynamic", 1554 metadata !"fpexcept.strict") #1 1555 ret <2 x double> %pow 1556} 1557 1558define <3 x float> @constrained_vector_pow_v3f32() #0 { 1559; PC64LE-LABEL: constrained_vector_pow_v3f32: 1560; PC64LE: # %bb.0: # %entry 1561; PC64LE-NEXT: mflr 0 1562; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 1563; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 1564; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1565; PC64LE-NEXT: std 0, 16(1) 1566; PC64LE-NEXT: stdu 1, -64(1) 1567; PC64LE-NEXT: addis 4, 2, .LCPI32_1@toc@ha 1568; PC64LE-NEXT: addis 3, 2, .LCPI32_0@toc@ha 1569; PC64LE-NEXT: lfs 31, .LCPI32_1@toc@l(4) 1570; PC64LE-NEXT: lfs 1, .LCPI32_0@toc@l(3) 1571; PC64LE-NEXT: fmr 2, 31 1572; PC64LE-NEXT: bl powf 1573; PC64LE-NEXT: nop 1574; PC64LE-NEXT: addis 3, 2, .LCPI32_2@toc@ha 1575; PC64LE-NEXT: fmr 2, 31 1576; PC64LE-NEXT: fmr 30, 1 1577; PC64LE-NEXT: lfs 1, .LCPI32_2@toc@l(3) 1578; PC64LE-NEXT: bl powf 1579; PC64LE-NEXT: nop 1580; PC64LE-NEXT: addis 3, 2, .LCPI32_3@toc@ha 1581; PC64LE-NEXT: fmr 2, 31 1582; PC64LE-NEXT: fmr 29, 1 1583; PC64LE-NEXT: lfs 1, .LCPI32_3@toc@l(3) 1584; PC64LE-NEXT: bl powf 1585; PC64LE-NEXT: nop 1586; PC64LE-NEXT: xscvdpspn 0, 29 1587; PC64LE-NEXT: addis 3, 2, .LCPI32_4@toc@ha 1588; PC64LE-NEXT: xscvdpspn 1, 1 1589; PC64LE-NEXT: addi 3, 3, .LCPI32_4@toc@l 1590; PC64LE-NEXT: lvx 4, 0, 3 1591; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 1592; PC64LE-NEXT: xscvdpspn 0, 30 1593; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 1594; PC64LE-NEXT: vmrghw 2, 2, 3 1595; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 1596; PC64LE-NEXT: vperm 2, 3, 2, 4 1597; PC64LE-NEXT: addi 1, 1, 64 1598; PC64LE-NEXT: ld 0, 16(1) 1599; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1600; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 1601; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 1602; PC64LE-NEXT: mtlr 0 1603; PC64LE-NEXT: blr 1604; 1605; PC64LE9-LABEL: constrained_vector_pow_v3f32: 1606; PC64LE9: # %bb.0: # %entry 1607; PC64LE9-NEXT: mflr 0 1608; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 1609; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 1610; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1611; PC64LE9-NEXT: std 0, 16(1) 1612; PC64LE9-NEXT: stdu 1, -64(1) 1613; PC64LE9-NEXT: addis 3, 2, .LCPI32_0@toc@ha 1614; PC64LE9-NEXT: lfs 1, .LCPI32_0@toc@l(3) 1615; PC64LE9-NEXT: addis 3, 2, .LCPI32_1@toc@ha 1616; PC64LE9-NEXT: lfs 31, .LCPI32_1@toc@l(3) 1617; PC64LE9-NEXT: fmr 2, 31 1618; PC64LE9-NEXT: bl powf 1619; PC64LE9-NEXT: nop 1620; PC64LE9-NEXT: addis 3, 2, .LCPI32_2@toc@ha 1621; PC64LE9-NEXT: fmr 30, 1 1622; PC64LE9-NEXT: lfs 1, .LCPI32_2@toc@l(3) 1623; PC64LE9-NEXT: fmr 2, 31 1624; PC64LE9-NEXT: bl powf 1625; PC64LE9-NEXT: nop 1626; PC64LE9-NEXT: addis 3, 2, .LCPI32_3@toc@ha 1627; PC64LE9-NEXT: fmr 29, 1 1628; PC64LE9-NEXT: lfs 1, .LCPI32_3@toc@l(3) 1629; PC64LE9-NEXT: fmr 2, 31 1630; PC64LE9-NEXT: bl powf 1631; PC64LE9-NEXT: nop 1632; PC64LE9-NEXT: xscvdpspn 0, 1 1633; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 1634; PC64LE9-NEXT: xscvdpspn 0, 29 1635; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 1636; PC64LE9-NEXT: xscvdpspn 0, 30 1637; PC64LE9-NEXT: addis 3, 2, .LCPI32_4@toc@ha 1638; PC64LE9-NEXT: addi 3, 3, .LCPI32_4@toc@l 1639; PC64LE9-NEXT: lxvx 36, 0, 3 1640; PC64LE9-NEXT: vmrghw 2, 3, 2 1641; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 1642; PC64LE9-NEXT: vperm 2, 3, 2, 4 1643; PC64LE9-NEXT: addi 1, 1, 64 1644; PC64LE9-NEXT: ld 0, 16(1) 1645; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 1646; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 1647; PC64LE9-NEXT: mtlr 0 1648; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 1649; PC64LE9-NEXT: blr 1650entry: 1651 %pow = call <3 x float> @llvm.experimental.constrained.pow.v3f32( 1652 <3 x float> <float 42.0, float 43.0, float 44.0>, 1653 <3 x float> <float 3.0, float 3.0, float 3.0>, 1654 metadata !"round.dynamic", 1655 metadata !"fpexcept.strict") #1 1656 ret <3 x float> %pow 1657} 1658 1659define <3 x double> @constrained_vector_pow_v3f64() #0 { 1660; PC64LE-LABEL: constrained_vector_pow_v3f64: 1661; PC64LE: # %bb.0: # %entry 1662; PC64LE-NEXT: mflr 0 1663; PC64LE-NEXT: std 0, 16(1) 1664; PC64LE-NEXT: stdu 1, -96(1) 1665; PC64LE-NEXT: addis 4, 2, .LCPI33_1@toc@ha 1666; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 1667; PC64LE-NEXT: li 3, 64 1668; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 1669; PC64LE-NEXT: addis 3, 2, .LCPI33_0@toc@ha 1670; PC64LE-NEXT: lfs 31, .LCPI33_1@toc@l(4) 1671; PC64LE-NEXT: lfs 1, .LCPI33_0@toc@l(3) 1672; PC64LE-NEXT: fmr 2, 31 1673; PC64LE-NEXT: bl pow 1674; PC64LE-NEXT: nop 1675; PC64LE-NEXT: li 3, 48 1676; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1677; PC64LE-NEXT: fmr 2, 31 1678; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 1679; PC64LE-NEXT: addis 3, 2, .LCPI33_2@toc@ha 1680; PC64LE-NEXT: lfd 1, .LCPI33_2@toc@l(3) 1681; PC64LE-NEXT: bl pow 1682; PC64LE-NEXT: nop 1683; PC64LE-NEXT: li 3, 48 1684; PC64LE-NEXT: fmr 2, 31 1685; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1686; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 1687; PC64LE-NEXT: addis 3, 2, .LCPI33_3@toc@ha 1688; PC64LE-NEXT: xxmrghd 63, 1, 0 1689; PC64LE-NEXT: lfd 1, .LCPI33_3@toc@l(3) 1690; PC64LE-NEXT: bl pow 1691; PC64LE-NEXT: nop 1692; PC64LE-NEXT: xxswapd 0, 63 1693; PC64LE-NEXT: li 3, 64 1694; PC64LE-NEXT: xxlor 2, 63, 63 1695; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 1696; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 1697; PC64LE-NEXT: fmr 3, 1 1698; PC64LE-NEXT: fmr 1, 0 1699; PC64LE-NEXT: addi 1, 1, 96 1700; PC64LE-NEXT: ld 0, 16(1) 1701; PC64LE-NEXT: mtlr 0 1702; PC64LE-NEXT: blr 1703; 1704; PC64LE9-LABEL: constrained_vector_pow_v3f64: 1705; PC64LE9: # %bb.0: # %entry 1706; PC64LE9-NEXT: mflr 0 1707; PC64LE9-NEXT: std 0, 16(1) 1708; PC64LE9-NEXT: stdu 1, -80(1) 1709; PC64LE9-NEXT: addis 3, 2, .LCPI33_0@toc@ha 1710; PC64LE9-NEXT: lfs 1, .LCPI33_0@toc@l(3) 1711; PC64LE9-NEXT: addis 3, 2, .LCPI33_1@toc@ha 1712; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 1713; PC64LE9-NEXT: lfs 31, .LCPI33_1@toc@l(3) 1714; PC64LE9-NEXT: fmr 2, 31 1715; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 1716; PC64LE9-NEXT: bl pow 1717; PC64LE9-NEXT: nop 1718; PC64LE9-NEXT: addis 3, 2, .LCPI33_2@toc@ha 1719; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1720; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 1721; PC64LE9-NEXT: lfd 1, .LCPI33_2@toc@l(3) 1722; PC64LE9-NEXT: fmr 2, 31 1723; PC64LE9-NEXT: bl pow 1724; PC64LE9-NEXT: nop 1725; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 1726; PC64LE9-NEXT: addis 3, 2, .LCPI33_3@toc@ha 1727; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1728; PC64LE9-NEXT: xxmrghd 63, 1, 0 1729; PC64LE9-NEXT: lfd 1, .LCPI33_3@toc@l(3) 1730; PC64LE9-NEXT: fmr 2, 31 1731; PC64LE9-NEXT: bl pow 1732; PC64LE9-NEXT: nop 1733; PC64LE9-NEXT: fmr 3, 1 1734; PC64LE9-NEXT: xxswapd 1, 63 1735; PC64LE9-NEXT: xscpsgndp 2, 63, 63 1736; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 1737; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 1738; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1739; PC64LE9-NEXT: addi 1, 1, 80 1740; PC64LE9-NEXT: ld 0, 16(1) 1741; PC64LE9-NEXT: mtlr 0 1742; PC64LE9-NEXT: blr 1743entry: 1744 %pow = call <3 x double> @llvm.experimental.constrained.pow.v3f64( 1745 <3 x double> <double 42.0, double 42.1, double 42.2>, 1746 <3 x double> <double 3.0, double 3.0, double 3.0>, 1747 metadata !"round.dynamic", 1748 metadata !"fpexcept.strict") #1 1749 ret <3 x double> %pow 1750} 1751 1752define <4 x double> @constrained_vector_pow_v4f64() #0 { 1753; PC64LE-LABEL: constrained_vector_pow_v4f64: 1754; PC64LE: # %bb.0: # %entry 1755; PC64LE-NEXT: mflr 0 1756; PC64LE-NEXT: std 0, 16(1) 1757; PC64LE-NEXT: stdu 1, -96(1) 1758; PC64LE-NEXT: addis 4, 2, .LCPI34_1@toc@ha 1759; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 1760; PC64LE-NEXT: li 3, 64 1761; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 1762; PC64LE-NEXT: addis 3, 2, .LCPI34_0@toc@ha 1763; PC64LE-NEXT: lfs 31, .LCPI34_1@toc@l(4) 1764; PC64LE-NEXT: lfd 1, .LCPI34_0@toc@l(3) 1765; PC64LE-NEXT: fmr 2, 31 1766; PC64LE-NEXT: bl pow 1767; PC64LE-NEXT: nop 1768; PC64LE-NEXT: li 3, 48 1769; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1770; PC64LE-NEXT: fmr 2, 31 1771; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 1772; PC64LE-NEXT: addis 3, 2, .LCPI34_2@toc@ha 1773; PC64LE-NEXT: lfd 1, .LCPI34_2@toc@l(3) 1774; PC64LE-NEXT: bl pow 1775; PC64LE-NEXT: nop 1776; PC64LE-NEXT: li 3, 48 1777; PC64LE-NEXT: fmr 2, 31 1778; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1779; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 1780; PC64LE-NEXT: addis 3, 2, .LCPI34_3@toc@ha 1781; PC64LE-NEXT: xxmrghd 63, 1, 0 1782; PC64LE-NEXT: lfd 1, .LCPI34_3@toc@l(3) 1783; PC64LE-NEXT: bl pow 1784; PC64LE-NEXT: nop 1785; PC64LE-NEXT: li 3, 48 1786; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1787; PC64LE-NEXT: fmr 2, 31 1788; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 1789; PC64LE-NEXT: addis 3, 2, .LCPI34_4@toc@ha 1790; PC64LE-NEXT: lfd 1, .LCPI34_4@toc@l(3) 1791; PC64LE-NEXT: bl pow 1792; PC64LE-NEXT: nop 1793; PC64LE-NEXT: li 3, 48 1794; PC64LE-NEXT: vmr 2, 31 1795; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 1796; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1797; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 1798; PC64LE-NEXT: li 3, 64 1799; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 1800; PC64LE-NEXT: xxmrghd 35, 1, 0 1801; PC64LE-NEXT: addi 1, 1, 96 1802; PC64LE-NEXT: ld 0, 16(1) 1803; PC64LE-NEXT: mtlr 0 1804; PC64LE-NEXT: blr 1805; 1806; PC64LE9-LABEL: constrained_vector_pow_v4f64: 1807; PC64LE9: # %bb.0: # %entry 1808; PC64LE9-NEXT: mflr 0 1809; PC64LE9-NEXT: std 0, 16(1) 1810; PC64LE9-NEXT: stdu 1, -80(1) 1811; PC64LE9-NEXT: addis 3, 2, .LCPI34_0@toc@ha 1812; PC64LE9-NEXT: lfd 1, .LCPI34_0@toc@l(3) 1813; PC64LE9-NEXT: addis 3, 2, .LCPI34_1@toc@ha 1814; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 1815; PC64LE9-NEXT: lfs 31, .LCPI34_1@toc@l(3) 1816; PC64LE9-NEXT: fmr 2, 31 1817; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 1818; PC64LE9-NEXT: bl pow 1819; PC64LE9-NEXT: nop 1820; PC64LE9-NEXT: addis 3, 2, .LCPI34_2@toc@ha 1821; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1822; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 1823; PC64LE9-NEXT: lfd 1, .LCPI34_2@toc@l(3) 1824; PC64LE9-NEXT: fmr 2, 31 1825; PC64LE9-NEXT: bl pow 1826; PC64LE9-NEXT: nop 1827; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 1828; PC64LE9-NEXT: addis 3, 2, .LCPI34_3@toc@ha 1829; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1830; PC64LE9-NEXT: xxmrghd 63, 1, 0 1831; PC64LE9-NEXT: lfd 1, .LCPI34_3@toc@l(3) 1832; PC64LE9-NEXT: fmr 2, 31 1833; PC64LE9-NEXT: bl pow 1834; PC64LE9-NEXT: nop 1835; PC64LE9-NEXT: addis 3, 2, .LCPI34_4@toc@ha 1836; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1837; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 1838; PC64LE9-NEXT: lfd 1, .LCPI34_4@toc@l(3) 1839; PC64LE9-NEXT: fmr 2, 31 1840; PC64LE9-NEXT: bl pow 1841; PC64LE9-NEXT: nop 1842; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 1843; PC64LE9-NEXT: vmr 2, 31 1844; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 1845; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 1846; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1847; PC64LE9-NEXT: xxmrghd 35, 1, 0 1848; PC64LE9-NEXT: addi 1, 1, 80 1849; PC64LE9-NEXT: ld 0, 16(1) 1850; PC64LE9-NEXT: mtlr 0 1851; PC64LE9-NEXT: blr 1852entry: 1853 %pow = call <4 x double> @llvm.experimental.constrained.pow.v4f64( 1854 <4 x double> <double 42.1, double 42.2, 1855 double 42.3, double 42.4>, 1856 <4 x double> <double 3.0, double 3.0, 1857 double 3.0, double 3.0>, 1858 metadata !"round.dynamic", 1859 metadata !"fpexcept.strict") #1 1860 ret <4 x double> %pow 1861} 1862 1863define <1 x float> @constrained_vector_powi_v1f32() #0 { 1864; PC64LE-LABEL: constrained_vector_powi_v1f32: 1865; PC64LE: # %bb.0: # %entry 1866; PC64LE-NEXT: mflr 0 1867; PC64LE-NEXT: std 0, 16(1) 1868; PC64LE-NEXT: stdu 1, -32(1) 1869; PC64LE-NEXT: addis 3, 2, .LCPI35_0@toc@ha 1870; PC64LE-NEXT: li 4, 3 1871; PC64LE-NEXT: lfs 1, .LCPI35_0@toc@l(3) 1872; PC64LE-NEXT: bl __powisf2 1873; PC64LE-NEXT: nop 1874; PC64LE-NEXT: addi 1, 1, 32 1875; PC64LE-NEXT: ld 0, 16(1) 1876; PC64LE-NEXT: mtlr 0 1877; PC64LE-NEXT: blr 1878; 1879; PC64LE9-LABEL: constrained_vector_powi_v1f32: 1880; PC64LE9: # %bb.0: # %entry 1881; PC64LE9-NEXT: mflr 0 1882; PC64LE9-NEXT: std 0, 16(1) 1883; PC64LE9-NEXT: stdu 1, -32(1) 1884; PC64LE9-NEXT: addis 3, 2, .LCPI35_0@toc@ha 1885; PC64LE9-NEXT: lfs 1, .LCPI35_0@toc@l(3) 1886; PC64LE9-NEXT: li 4, 3 1887; PC64LE9-NEXT: bl __powisf2 1888; PC64LE9-NEXT: nop 1889; PC64LE9-NEXT: addi 1, 1, 32 1890; PC64LE9-NEXT: ld 0, 16(1) 1891; PC64LE9-NEXT: mtlr 0 1892; PC64LE9-NEXT: blr 1893entry: 1894 %powi = call <1 x float> @llvm.experimental.constrained.powi.v1f32( 1895 <1 x float> <float 42.0>, 1896 i32 3, 1897 metadata !"round.dynamic", 1898 metadata !"fpexcept.strict") #1 1899 ret <1 x float> %powi 1900} 1901 1902define <2 x double> @constrained_vector_powi_v2f64() #0 { 1903; PC64LE-LABEL: constrained_vector_powi_v2f64: 1904; PC64LE: # %bb.0: # %entry 1905; PC64LE-NEXT: mflr 0 1906; PC64LE-NEXT: std 0, 16(1) 1907; PC64LE-NEXT: stdu 1, -64(1) 1908; PC64LE-NEXT: addis 3, 2, .LCPI36_0@toc@ha 1909; PC64LE-NEXT: li 4, 3 1910; PC64LE-NEXT: lfd 1, .LCPI36_0@toc@l(3) 1911; PC64LE-NEXT: bl __powidf2 1912; PC64LE-NEXT: nop 1913; PC64LE-NEXT: li 3, 48 1914; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1915; PC64LE-NEXT: li 4, 3 1916; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 1917; PC64LE-NEXT: addis 3, 2, .LCPI36_1@toc@ha 1918; PC64LE-NEXT: lfd 1, .LCPI36_1@toc@l(3) 1919; PC64LE-NEXT: bl __powidf2 1920; PC64LE-NEXT: nop 1921; PC64LE-NEXT: li 3, 48 1922; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1923; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 1924; PC64LE-NEXT: xxmrghd 34, 1, 0 1925; PC64LE-NEXT: addi 1, 1, 64 1926; PC64LE-NEXT: ld 0, 16(1) 1927; PC64LE-NEXT: mtlr 0 1928; PC64LE-NEXT: blr 1929; 1930; PC64LE9-LABEL: constrained_vector_powi_v2f64: 1931; PC64LE9: # %bb.0: # %entry 1932; PC64LE9-NEXT: mflr 0 1933; PC64LE9-NEXT: std 0, 16(1) 1934; PC64LE9-NEXT: stdu 1, -48(1) 1935; PC64LE9-NEXT: addis 3, 2, .LCPI36_0@toc@ha 1936; PC64LE9-NEXT: lfd 1, .LCPI36_0@toc@l(3) 1937; PC64LE9-NEXT: li 4, 3 1938; PC64LE9-NEXT: bl __powidf2 1939; PC64LE9-NEXT: nop 1940; PC64LE9-NEXT: addis 3, 2, .LCPI36_1@toc@ha 1941; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1942; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 1943; PC64LE9-NEXT: lfd 1, .LCPI36_1@toc@l(3) 1944; PC64LE9-NEXT: li 4, 3 1945; PC64LE9-NEXT: bl __powidf2 1946; PC64LE9-NEXT: nop 1947; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 1948; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1949; PC64LE9-NEXT: xxmrghd 34, 1, 0 1950; PC64LE9-NEXT: addi 1, 1, 48 1951; PC64LE9-NEXT: ld 0, 16(1) 1952; PC64LE9-NEXT: mtlr 0 1953; PC64LE9-NEXT: blr 1954entry: 1955 %powi = call <2 x double> @llvm.experimental.constrained.powi.v2f64( 1956 <2 x double> <double 42.1, double 42.2>, 1957 i32 3, 1958 metadata !"round.dynamic", 1959 metadata !"fpexcept.strict") #1 1960 ret <2 x double> %powi 1961} 1962 1963define <3 x float> @constrained_vector_powi_v3f32() #0 { 1964; 1965; 1966; PC64LE-LABEL: constrained_vector_powi_v3f32: 1967; PC64LE: # %bb.0: # %entry 1968; PC64LE-NEXT: mflr 0 1969; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 1970; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 1971; PC64LE-NEXT: std 0, 16(1) 1972; PC64LE-NEXT: stdu 1, -48(1) 1973; PC64LE-NEXT: addis 3, 2, .LCPI37_0@toc@ha 1974; PC64LE-NEXT: li 4, 3 1975; PC64LE-NEXT: lfs 1, .LCPI37_0@toc@l(3) 1976; PC64LE-NEXT: bl __powisf2 1977; PC64LE-NEXT: nop 1978; PC64LE-NEXT: addis 3, 2, .LCPI37_1@toc@ha 1979; PC64LE-NEXT: fmr 31, 1 1980; PC64LE-NEXT: li 4, 3 1981; PC64LE-NEXT: lfs 1, .LCPI37_1@toc@l(3) 1982; PC64LE-NEXT: bl __powisf2 1983; PC64LE-NEXT: nop 1984; PC64LE-NEXT: addis 3, 2, .LCPI37_2@toc@ha 1985; PC64LE-NEXT: fmr 30, 1 1986; PC64LE-NEXT: li 4, 3 1987; PC64LE-NEXT: lfs 1, .LCPI37_2@toc@l(3) 1988; PC64LE-NEXT: bl __powisf2 1989; PC64LE-NEXT: nop 1990; PC64LE-NEXT: xscvdpspn 0, 30 1991; PC64LE-NEXT: addis 3, 2, .LCPI37_3@toc@ha 1992; PC64LE-NEXT: xscvdpspn 1, 1 1993; PC64LE-NEXT: addi 3, 3, .LCPI37_3@toc@l 1994; PC64LE-NEXT: lvx 4, 0, 3 1995; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 1996; PC64LE-NEXT: xscvdpspn 0, 31 1997; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 1998; PC64LE-NEXT: vmrghw 2, 2, 3 1999; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 2000; PC64LE-NEXT: vperm 2, 3, 2, 4 2001; PC64LE-NEXT: addi 1, 1, 48 2002; PC64LE-NEXT: ld 0, 16(1) 2003; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2004; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2005; PC64LE-NEXT: mtlr 0 2006; PC64LE-NEXT: blr 2007; 2008; PC64LE9-LABEL: constrained_vector_powi_v3f32: 2009; PC64LE9: # %bb.0: # %entry 2010; PC64LE9-NEXT: mflr 0 2011; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 2012; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 2013; PC64LE9-NEXT: std 0, 16(1) 2014; PC64LE9-NEXT: stdu 1, -48(1) 2015; PC64LE9-NEXT: addis 3, 2, .LCPI37_0@toc@ha 2016; PC64LE9-NEXT: lfs 1, .LCPI37_0@toc@l(3) 2017; PC64LE9-NEXT: li 4, 3 2018; PC64LE9-NEXT: bl __powisf2 2019; PC64LE9-NEXT: nop 2020; PC64LE9-NEXT: addis 3, 2, .LCPI37_1@toc@ha 2021; PC64LE9-NEXT: fmr 31, 1 2022; PC64LE9-NEXT: lfs 1, .LCPI37_1@toc@l(3) 2023; PC64LE9-NEXT: li 4, 3 2024; PC64LE9-NEXT: bl __powisf2 2025; PC64LE9-NEXT: nop 2026; PC64LE9-NEXT: addis 3, 2, .LCPI37_2@toc@ha 2027; PC64LE9-NEXT: fmr 30, 1 2028; PC64LE9-NEXT: lfs 1, .LCPI37_2@toc@l(3) 2029; PC64LE9-NEXT: li 4, 3 2030; PC64LE9-NEXT: bl __powisf2 2031; PC64LE9-NEXT: nop 2032; PC64LE9-NEXT: xscvdpspn 0, 1 2033; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 2034; PC64LE9-NEXT: xscvdpspn 0, 30 2035; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 2036; PC64LE9-NEXT: xscvdpspn 0, 31 2037; PC64LE9-NEXT: addis 3, 2, .LCPI37_3@toc@ha 2038; PC64LE9-NEXT: addi 3, 3, .LCPI37_3@toc@l 2039; PC64LE9-NEXT: lxvx 36, 0, 3 2040; PC64LE9-NEXT: vmrghw 2, 3, 2 2041; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 2042; PC64LE9-NEXT: vperm 2, 3, 2, 4 2043; PC64LE9-NEXT: addi 1, 1, 48 2044; PC64LE9-NEXT: ld 0, 16(1) 2045; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2046; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2047; PC64LE9-NEXT: mtlr 0 2048; PC64LE9-NEXT: blr 2049entry: 2050 %powi = call <3 x float> @llvm.experimental.constrained.powi.v3f32( 2051 <3 x float> <float 42.0, float 43.0, float 44.0>, 2052 i32 3, 2053 metadata !"round.dynamic", 2054 metadata !"fpexcept.strict") #1 2055 ret <3 x float> %powi 2056} 2057 2058define <3 x double> @constrained_vector_powi_v3f64() #0 { 2059; PC64LE-LABEL: constrained_vector_powi_v3f64: 2060; PC64LE: # %bb.0: # %entry 2061; PC64LE-NEXT: mflr 0 2062; PC64LE-NEXT: std 0, 16(1) 2063; PC64LE-NEXT: stdu 1, -80(1) 2064; PC64LE-NEXT: li 3, 64 2065; PC64LE-NEXT: li 4, 3 2066; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2067; PC64LE-NEXT: addis 3, 2, .LCPI38_0@toc@ha 2068; PC64LE-NEXT: lfd 1, .LCPI38_0@toc@l(3) 2069; PC64LE-NEXT: bl __powidf2 2070; PC64LE-NEXT: nop 2071; PC64LE-NEXT: li 3, 48 2072; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2073; PC64LE-NEXT: li 4, 3 2074; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2075; PC64LE-NEXT: addis 3, 2, .LCPI38_1@toc@ha 2076; PC64LE-NEXT: lfs 1, .LCPI38_1@toc@l(3) 2077; PC64LE-NEXT: bl __powidf2 2078; PC64LE-NEXT: nop 2079; PC64LE-NEXT: li 3, 48 2080; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2081; PC64LE-NEXT: li 4, 3 2082; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2083; PC64LE-NEXT: addis 3, 2, .LCPI38_2@toc@ha 2084; PC64LE-NEXT: xxmrghd 63, 0, 1 2085; PC64LE-NEXT: lfd 1, .LCPI38_2@toc@l(3) 2086; PC64LE-NEXT: bl __powidf2 2087; PC64LE-NEXT: nop 2088; PC64LE-NEXT: xxswapd 0, 63 2089; PC64LE-NEXT: li 3, 64 2090; PC64LE-NEXT: xxlor 2, 63, 63 2091; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2092; PC64LE-NEXT: fmr 3, 1 2093; PC64LE-NEXT: fmr 1, 0 2094; PC64LE-NEXT: addi 1, 1, 80 2095; PC64LE-NEXT: ld 0, 16(1) 2096; PC64LE-NEXT: mtlr 0 2097; PC64LE-NEXT: blr 2098; 2099; PC64LE9-LABEL: constrained_vector_powi_v3f64: 2100; PC64LE9: # %bb.0: # %entry 2101; PC64LE9-NEXT: mflr 0 2102; PC64LE9-NEXT: std 0, 16(1) 2103; PC64LE9-NEXT: stdu 1, -64(1) 2104; PC64LE9-NEXT: addis 3, 2, .LCPI38_0@toc@ha 2105; PC64LE9-NEXT: lfd 1, .LCPI38_0@toc@l(3) 2106; PC64LE9-NEXT: li 4, 3 2107; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2108; PC64LE9-NEXT: bl __powidf2 2109; PC64LE9-NEXT: nop 2110; PC64LE9-NEXT: addis 3, 2, .LCPI38_1@toc@ha 2111; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2112; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2113; PC64LE9-NEXT: lfs 1, .LCPI38_1@toc@l(3) 2114; PC64LE9-NEXT: li 4, 3 2115; PC64LE9-NEXT: bl __powidf2 2116; PC64LE9-NEXT: nop 2117; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2118; PC64LE9-NEXT: addis 3, 2, .LCPI38_2@toc@ha 2119; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2120; PC64LE9-NEXT: xxmrghd 63, 0, 1 2121; PC64LE9-NEXT: lfd 1, .LCPI38_2@toc@l(3) 2122; PC64LE9-NEXT: li 4, 3 2123; PC64LE9-NEXT: bl __powidf2 2124; PC64LE9-NEXT: nop 2125; PC64LE9-NEXT: fmr 3, 1 2126; PC64LE9-NEXT: xxswapd 1, 63 2127; PC64LE9-NEXT: xscpsgndp 2, 63, 63 2128; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2129; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2130; PC64LE9-NEXT: addi 1, 1, 64 2131; PC64LE9-NEXT: ld 0, 16(1) 2132; PC64LE9-NEXT: mtlr 0 2133; PC64LE9-NEXT: blr 2134entry: 2135 %powi = call <3 x double> @llvm.experimental.constrained.powi.v3f64( 2136 <3 x double> <double 42.0, double 42.1, double 42.2>, 2137 i32 3, 2138 metadata !"round.dynamic", 2139 metadata !"fpexcept.strict") #1 2140 ret <3 x double> %powi 2141} 2142 2143define <4 x double> @constrained_vector_powi_v4f64() #0 { 2144; PC64LE-LABEL: constrained_vector_powi_v4f64: 2145; PC64LE: # %bb.0: # %entry 2146; PC64LE-NEXT: mflr 0 2147; PC64LE-NEXT: std 0, 16(1) 2148; PC64LE-NEXT: stdu 1, -80(1) 2149; PC64LE-NEXT: li 3, 64 2150; PC64LE-NEXT: li 4, 3 2151; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2152; PC64LE-NEXT: addis 3, 2, .LCPI39_0@toc@ha 2153; PC64LE-NEXT: lfd 1, .LCPI39_0@toc@l(3) 2154; PC64LE-NEXT: bl __powidf2 2155; PC64LE-NEXT: nop 2156; PC64LE-NEXT: li 3, 48 2157; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2158; PC64LE-NEXT: li 4, 3 2159; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2160; PC64LE-NEXT: addis 3, 2, .LCPI39_1@toc@ha 2161; PC64LE-NEXT: lfd 1, .LCPI39_1@toc@l(3) 2162; PC64LE-NEXT: bl __powidf2 2163; PC64LE-NEXT: nop 2164; PC64LE-NEXT: li 3, 48 2165; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2166; PC64LE-NEXT: li 4, 3 2167; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2168; PC64LE-NEXT: addis 3, 2, .LCPI39_2@toc@ha 2169; PC64LE-NEXT: xxmrghd 63, 1, 0 2170; PC64LE-NEXT: lfd 1, .LCPI39_2@toc@l(3) 2171; PC64LE-NEXT: bl __powidf2 2172; PC64LE-NEXT: nop 2173; PC64LE-NEXT: li 3, 48 2174; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2175; PC64LE-NEXT: li 4, 3 2176; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2177; PC64LE-NEXT: addis 3, 2, .LCPI39_3@toc@ha 2178; PC64LE-NEXT: lfd 1, .LCPI39_3@toc@l(3) 2179; PC64LE-NEXT: bl __powidf2 2180; PC64LE-NEXT: nop 2181; PC64LE-NEXT: li 3, 48 2182; PC64LE-NEXT: vmr 2, 31 2183; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2184; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2185; PC64LE-NEXT: li 3, 64 2186; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2187; PC64LE-NEXT: xxmrghd 35, 1, 0 2188; PC64LE-NEXT: addi 1, 1, 80 2189; PC64LE-NEXT: ld 0, 16(1) 2190; PC64LE-NEXT: mtlr 0 2191; PC64LE-NEXT: blr 2192; 2193; PC64LE9-LABEL: constrained_vector_powi_v4f64: 2194; PC64LE9: # %bb.0: # %entry 2195; PC64LE9-NEXT: mflr 0 2196; PC64LE9-NEXT: std 0, 16(1) 2197; PC64LE9-NEXT: stdu 1, -64(1) 2198; PC64LE9-NEXT: addis 3, 2, .LCPI39_0@toc@ha 2199; PC64LE9-NEXT: lfd 1, .LCPI39_0@toc@l(3) 2200; PC64LE9-NEXT: li 4, 3 2201; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2202; PC64LE9-NEXT: bl __powidf2 2203; PC64LE9-NEXT: nop 2204; PC64LE9-NEXT: addis 3, 2, .LCPI39_1@toc@ha 2205; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2206; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2207; PC64LE9-NEXT: lfd 1, .LCPI39_1@toc@l(3) 2208; PC64LE9-NEXT: li 4, 3 2209; PC64LE9-NEXT: bl __powidf2 2210; PC64LE9-NEXT: nop 2211; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2212; PC64LE9-NEXT: addis 3, 2, .LCPI39_2@toc@ha 2213; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2214; PC64LE9-NEXT: xxmrghd 63, 1, 0 2215; PC64LE9-NEXT: lfd 1, .LCPI39_2@toc@l(3) 2216; PC64LE9-NEXT: li 4, 3 2217; PC64LE9-NEXT: bl __powidf2 2218; PC64LE9-NEXT: nop 2219; PC64LE9-NEXT: addis 3, 2, .LCPI39_3@toc@ha 2220; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2221; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2222; PC64LE9-NEXT: lfd 1, .LCPI39_3@toc@l(3) 2223; PC64LE9-NEXT: li 4, 3 2224; PC64LE9-NEXT: bl __powidf2 2225; PC64LE9-NEXT: nop 2226; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2227; PC64LE9-NEXT: vmr 2, 31 2228; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2229; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2230; PC64LE9-NEXT: xxmrghd 35, 1, 0 2231; PC64LE9-NEXT: addi 1, 1, 64 2232; PC64LE9-NEXT: ld 0, 16(1) 2233; PC64LE9-NEXT: mtlr 0 2234; PC64LE9-NEXT: blr 2235entry: 2236 %powi = call <4 x double> @llvm.experimental.constrained.powi.v4f64( 2237 <4 x double> <double 42.1, double 42.2, 2238 double 42.3, double 42.4>, 2239 i32 3, 2240 metadata !"round.dynamic", 2241 metadata !"fpexcept.strict") #1 2242 ret <4 x double> %powi 2243} 2244 2245define <1 x float> @constrained_vector_sin_v1f32() #0 { 2246; PC64LE-LABEL: constrained_vector_sin_v1f32: 2247; PC64LE: # %bb.0: # %entry 2248; PC64LE-NEXT: mflr 0 2249; PC64LE-NEXT: std 0, 16(1) 2250; PC64LE-NEXT: stdu 1, -32(1) 2251; PC64LE-NEXT: addis 3, 2, .LCPI40_0@toc@ha 2252; PC64LE-NEXT: lfs 1, .LCPI40_0@toc@l(3) 2253; PC64LE-NEXT: bl sinf 2254; PC64LE-NEXT: nop 2255; PC64LE-NEXT: addi 1, 1, 32 2256; PC64LE-NEXT: ld 0, 16(1) 2257; PC64LE-NEXT: mtlr 0 2258; PC64LE-NEXT: blr 2259; 2260; PC64LE9-LABEL: constrained_vector_sin_v1f32: 2261; PC64LE9: # %bb.0: # %entry 2262; PC64LE9-NEXT: mflr 0 2263; PC64LE9-NEXT: std 0, 16(1) 2264; PC64LE9-NEXT: stdu 1, -32(1) 2265; PC64LE9-NEXT: addis 3, 2, .LCPI40_0@toc@ha 2266; PC64LE9-NEXT: lfs 1, .LCPI40_0@toc@l(3) 2267; PC64LE9-NEXT: bl sinf 2268; PC64LE9-NEXT: nop 2269; PC64LE9-NEXT: addi 1, 1, 32 2270; PC64LE9-NEXT: ld 0, 16(1) 2271; PC64LE9-NEXT: mtlr 0 2272; PC64LE9-NEXT: blr 2273entry: 2274 %sin = call <1 x float> @llvm.experimental.constrained.sin.v1f32( 2275 <1 x float> <float 42.0>, 2276 metadata !"round.dynamic", 2277 metadata !"fpexcept.strict") #1 2278 ret <1 x float> %sin 2279} 2280 2281define <2 x double> @constrained_vector_sin_v2f64() #0 { 2282; PC64LE-LABEL: constrained_vector_sin_v2f64: 2283; PC64LE: # %bb.0: # %entry 2284; PC64LE-NEXT: mflr 0 2285; PC64LE-NEXT: std 0, 16(1) 2286; PC64LE-NEXT: stdu 1, -64(1) 2287; PC64LE-NEXT: addis 3, 2, .LCPI41_0@toc@ha 2288; PC64LE-NEXT: lfd 1, .LCPI41_0@toc@l(3) 2289; PC64LE-NEXT: bl sin 2290; PC64LE-NEXT: nop 2291; PC64LE-NEXT: li 3, 48 2292; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2293; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2294; PC64LE-NEXT: addis 3, 2, .LCPI41_1@toc@ha 2295; PC64LE-NEXT: lfs 1, .LCPI41_1@toc@l(3) 2296; PC64LE-NEXT: bl sin 2297; PC64LE-NEXT: nop 2298; PC64LE-NEXT: li 3, 48 2299; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2300; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2301; PC64LE-NEXT: xxmrghd 34, 0, 1 2302; PC64LE-NEXT: addi 1, 1, 64 2303; PC64LE-NEXT: ld 0, 16(1) 2304; PC64LE-NEXT: mtlr 0 2305; PC64LE-NEXT: blr 2306; 2307; PC64LE9-LABEL: constrained_vector_sin_v2f64: 2308; PC64LE9: # %bb.0: # %entry 2309; PC64LE9-NEXT: mflr 0 2310; PC64LE9-NEXT: std 0, 16(1) 2311; PC64LE9-NEXT: stdu 1, -48(1) 2312; PC64LE9-NEXT: addis 3, 2, .LCPI41_0@toc@ha 2313; PC64LE9-NEXT: lfd 1, .LCPI41_0@toc@l(3) 2314; PC64LE9-NEXT: bl sin 2315; PC64LE9-NEXT: nop 2316; PC64LE9-NEXT: addis 3, 2, .LCPI41_1@toc@ha 2317; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2318; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2319; PC64LE9-NEXT: lfs 1, .LCPI41_1@toc@l(3) 2320; PC64LE9-NEXT: bl sin 2321; PC64LE9-NEXT: nop 2322; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2323; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2324; PC64LE9-NEXT: xxmrghd 34, 0, 1 2325; PC64LE9-NEXT: addi 1, 1, 48 2326; PC64LE9-NEXT: ld 0, 16(1) 2327; PC64LE9-NEXT: mtlr 0 2328; PC64LE9-NEXT: blr 2329entry: 2330 %sin = call <2 x double> @llvm.experimental.constrained.sin.v2f64( 2331 <2 x double> <double 42.0, double 42.1>, 2332 metadata !"round.dynamic", 2333 metadata !"fpexcept.strict") #1 2334 ret <2 x double> %sin 2335} 2336 2337define <3 x float> @constrained_vector_sin_v3f32() #0 { 2338; PC64LE-LABEL: constrained_vector_sin_v3f32: 2339; PC64LE: # %bb.0: # %entry 2340; PC64LE-NEXT: mflr 0 2341; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 2342; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 2343; PC64LE-NEXT: std 0, 16(1) 2344; PC64LE-NEXT: stdu 1, -48(1) 2345; PC64LE-NEXT: addis 3, 2, .LCPI42_0@toc@ha 2346; PC64LE-NEXT: lfs 1, .LCPI42_0@toc@l(3) 2347; PC64LE-NEXT: bl sinf 2348; PC64LE-NEXT: nop 2349; PC64LE-NEXT: addis 3, 2, .LCPI42_1@toc@ha 2350; PC64LE-NEXT: fmr 31, 1 2351; PC64LE-NEXT: lfs 1, .LCPI42_1@toc@l(3) 2352; PC64LE-NEXT: bl sinf 2353; PC64LE-NEXT: nop 2354; PC64LE-NEXT: addis 3, 2, .LCPI42_2@toc@ha 2355; PC64LE-NEXT: fmr 30, 1 2356; PC64LE-NEXT: lfs 1, .LCPI42_2@toc@l(3) 2357; PC64LE-NEXT: bl sinf 2358; PC64LE-NEXT: nop 2359; PC64LE-NEXT: xscvdpspn 0, 30 2360; PC64LE-NEXT: addis 3, 2, .LCPI42_3@toc@ha 2361; PC64LE-NEXT: xscvdpspn 1, 1 2362; PC64LE-NEXT: addi 3, 3, .LCPI42_3@toc@l 2363; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 2364; PC64LE-NEXT: xscvdpspn 0, 31 2365; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 2366; PC64LE-NEXT: vmrghw 2, 2, 3 2367; PC64LE-NEXT: lvx 3, 0, 3 2368; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 2369; PC64LE-NEXT: vperm 2, 4, 2, 3 2370; PC64LE-NEXT: addi 1, 1, 48 2371; PC64LE-NEXT: ld 0, 16(1) 2372; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2373; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2374; PC64LE-NEXT: mtlr 0 2375; PC64LE-NEXT: blr 2376; 2377; PC64LE9-LABEL: constrained_vector_sin_v3f32: 2378; PC64LE9: # %bb.0: # %entry 2379; PC64LE9-NEXT: mflr 0 2380; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 2381; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 2382; PC64LE9-NEXT: std 0, 16(1) 2383; PC64LE9-NEXT: stdu 1, -48(1) 2384; PC64LE9-NEXT: addis 3, 2, .LCPI42_0@toc@ha 2385; PC64LE9-NEXT: lfs 1, .LCPI42_0@toc@l(3) 2386; PC64LE9-NEXT: bl sinf 2387; PC64LE9-NEXT: nop 2388; PC64LE9-NEXT: addis 3, 2, .LCPI42_1@toc@ha 2389; PC64LE9-NEXT: fmr 31, 1 2390; PC64LE9-NEXT: lfs 1, .LCPI42_1@toc@l(3) 2391; PC64LE9-NEXT: bl sinf 2392; PC64LE9-NEXT: nop 2393; PC64LE9-NEXT: addis 3, 2, .LCPI42_2@toc@ha 2394; PC64LE9-NEXT: fmr 30, 1 2395; PC64LE9-NEXT: lfs 1, .LCPI42_2@toc@l(3) 2396; PC64LE9-NEXT: bl sinf 2397; PC64LE9-NEXT: nop 2398; PC64LE9-NEXT: xscvdpspn 0, 1 2399; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 2400; PC64LE9-NEXT: xscvdpspn 0, 30 2401; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 2402; PC64LE9-NEXT: xscvdpspn 0, 31 2403; PC64LE9-NEXT: addis 3, 2, .LCPI42_3@toc@ha 2404; PC64LE9-NEXT: addi 3, 3, .LCPI42_3@toc@l 2405; PC64LE9-NEXT: vmrghw 2, 3, 2 2406; PC64LE9-NEXT: lxvx 35, 0, 3 2407; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 2408; PC64LE9-NEXT: vperm 2, 4, 2, 3 2409; PC64LE9-NEXT: addi 1, 1, 48 2410; PC64LE9-NEXT: ld 0, 16(1) 2411; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2412; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2413; PC64LE9-NEXT: mtlr 0 2414; PC64LE9-NEXT: blr 2415entry: 2416 %sin = call <3 x float> @llvm.experimental.constrained.sin.v3f32( 2417 <3 x float> <float 42.0, float 43.0, float 44.0>, 2418 metadata !"round.dynamic", 2419 metadata !"fpexcept.strict") #1 2420 ret <3 x float> %sin 2421} 2422 2423define <3 x double> @constrained_vector_sin_v3f64() #0 { 2424; PC64LE-LABEL: constrained_vector_sin_v3f64: 2425; PC64LE: # %bb.0: # %entry 2426; PC64LE-NEXT: mflr 0 2427; PC64LE-NEXT: std 0, 16(1) 2428; PC64LE-NEXT: stdu 1, -80(1) 2429; PC64LE-NEXT: li 3, 64 2430; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2431; PC64LE-NEXT: addis 3, 2, .LCPI43_0@toc@ha 2432; PC64LE-NEXT: lfd 1, .LCPI43_0@toc@l(3) 2433; PC64LE-NEXT: bl sin 2434; PC64LE-NEXT: nop 2435; PC64LE-NEXT: li 3, 48 2436; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2437; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2438; PC64LE-NEXT: addis 3, 2, .LCPI43_1@toc@ha 2439; PC64LE-NEXT: lfs 1, .LCPI43_1@toc@l(3) 2440; PC64LE-NEXT: bl sin 2441; PC64LE-NEXT: nop 2442; PC64LE-NEXT: li 3, 48 2443; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2444; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2445; PC64LE-NEXT: addis 3, 2, .LCPI43_2@toc@ha 2446; PC64LE-NEXT: xxmrghd 63, 0, 1 2447; PC64LE-NEXT: lfd 1, .LCPI43_2@toc@l(3) 2448; PC64LE-NEXT: bl sin 2449; PC64LE-NEXT: nop 2450; PC64LE-NEXT: xxswapd 0, 63 2451; PC64LE-NEXT: li 3, 64 2452; PC64LE-NEXT: xxlor 2, 63, 63 2453; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2454; PC64LE-NEXT: fmr 3, 1 2455; PC64LE-NEXT: fmr 1, 0 2456; PC64LE-NEXT: addi 1, 1, 80 2457; PC64LE-NEXT: ld 0, 16(1) 2458; PC64LE-NEXT: mtlr 0 2459; PC64LE-NEXT: blr 2460; 2461; PC64LE9-LABEL: constrained_vector_sin_v3f64: 2462; PC64LE9: # %bb.0: # %entry 2463; PC64LE9-NEXT: mflr 0 2464; PC64LE9-NEXT: std 0, 16(1) 2465; PC64LE9-NEXT: stdu 1, -64(1) 2466; PC64LE9-NEXT: addis 3, 2, .LCPI43_0@toc@ha 2467; PC64LE9-NEXT: lfd 1, .LCPI43_0@toc@l(3) 2468; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2469; PC64LE9-NEXT: bl sin 2470; PC64LE9-NEXT: nop 2471; PC64LE9-NEXT: addis 3, 2, .LCPI43_1@toc@ha 2472; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2473; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2474; PC64LE9-NEXT: lfs 1, .LCPI43_1@toc@l(3) 2475; PC64LE9-NEXT: bl sin 2476; PC64LE9-NEXT: nop 2477; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2478; PC64LE9-NEXT: addis 3, 2, .LCPI43_2@toc@ha 2479; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2480; PC64LE9-NEXT: xxmrghd 63, 0, 1 2481; PC64LE9-NEXT: lfd 1, .LCPI43_2@toc@l(3) 2482; PC64LE9-NEXT: bl sin 2483; PC64LE9-NEXT: nop 2484; PC64LE9-NEXT: fmr 3, 1 2485; PC64LE9-NEXT: xxswapd 1, 63 2486; PC64LE9-NEXT: xscpsgndp 2, 63, 63 2487; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2488; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2489; PC64LE9-NEXT: addi 1, 1, 64 2490; PC64LE9-NEXT: ld 0, 16(1) 2491; PC64LE9-NEXT: mtlr 0 2492; PC64LE9-NEXT: blr 2493entry: 2494 %sin = call <3 x double> @llvm.experimental.constrained.sin.v3f64( 2495 <3 x double> <double 42.0, double 42.1, double 42.2>, 2496 metadata !"round.dynamic", 2497 metadata !"fpexcept.strict") #1 2498 ret <3 x double> %sin 2499} 2500 2501define <4 x double> @constrained_vector_sin_v4f64() #0 { 2502; PC64LE-LABEL: constrained_vector_sin_v4f64: 2503; PC64LE: # %bb.0: # %entry 2504; PC64LE-NEXT: mflr 0 2505; PC64LE-NEXT: std 0, 16(1) 2506; PC64LE-NEXT: stdu 1, -80(1) 2507; PC64LE-NEXT: li 3, 64 2508; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2509; PC64LE-NEXT: addis 3, 2, .LCPI44_0@toc@ha 2510; PC64LE-NEXT: lfd 1, .LCPI44_0@toc@l(3) 2511; PC64LE-NEXT: bl sin 2512; PC64LE-NEXT: nop 2513; PC64LE-NEXT: li 3, 48 2514; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2515; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2516; PC64LE-NEXT: addis 3, 2, .LCPI44_1@toc@ha 2517; PC64LE-NEXT: lfd 1, .LCPI44_1@toc@l(3) 2518; PC64LE-NEXT: bl sin 2519; PC64LE-NEXT: nop 2520; PC64LE-NEXT: li 3, 48 2521; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2522; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2523; PC64LE-NEXT: addis 3, 2, .LCPI44_2@toc@ha 2524; PC64LE-NEXT: xxmrghd 63, 1, 0 2525; PC64LE-NEXT: lfd 1, .LCPI44_2@toc@l(3) 2526; PC64LE-NEXT: bl sin 2527; PC64LE-NEXT: nop 2528; PC64LE-NEXT: li 3, 48 2529; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2530; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2531; PC64LE-NEXT: addis 3, 2, .LCPI44_3@toc@ha 2532; PC64LE-NEXT: lfs 1, .LCPI44_3@toc@l(3) 2533; PC64LE-NEXT: bl sin 2534; PC64LE-NEXT: nop 2535; PC64LE-NEXT: li 3, 48 2536; PC64LE-NEXT: vmr 3, 31 2537; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2538; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2539; PC64LE-NEXT: li 3, 64 2540; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2541; PC64LE-NEXT: xxmrghd 34, 0, 1 2542; PC64LE-NEXT: addi 1, 1, 80 2543; PC64LE-NEXT: ld 0, 16(1) 2544; PC64LE-NEXT: mtlr 0 2545; PC64LE-NEXT: blr 2546; 2547; PC64LE9-LABEL: constrained_vector_sin_v4f64: 2548; PC64LE9: # %bb.0: # %entry 2549; PC64LE9-NEXT: mflr 0 2550; PC64LE9-NEXT: std 0, 16(1) 2551; PC64LE9-NEXT: stdu 1, -64(1) 2552; PC64LE9-NEXT: addis 3, 2, .LCPI44_0@toc@ha 2553; PC64LE9-NEXT: lfd 1, .LCPI44_0@toc@l(3) 2554; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2555; PC64LE9-NEXT: bl sin 2556; PC64LE9-NEXT: nop 2557; PC64LE9-NEXT: addis 3, 2, .LCPI44_1@toc@ha 2558; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2559; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2560; PC64LE9-NEXT: lfd 1, .LCPI44_1@toc@l(3) 2561; PC64LE9-NEXT: bl sin 2562; PC64LE9-NEXT: nop 2563; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2564; PC64LE9-NEXT: addis 3, 2, .LCPI44_2@toc@ha 2565; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2566; PC64LE9-NEXT: xxmrghd 63, 1, 0 2567; PC64LE9-NEXT: lfd 1, .LCPI44_2@toc@l(3) 2568; PC64LE9-NEXT: bl sin 2569; PC64LE9-NEXT: nop 2570; PC64LE9-NEXT: addis 3, 2, .LCPI44_3@toc@ha 2571; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2572; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2573; PC64LE9-NEXT: lfs 1, .LCPI44_3@toc@l(3) 2574; PC64LE9-NEXT: bl sin 2575; PC64LE9-NEXT: nop 2576; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2577; PC64LE9-NEXT: vmr 3, 31 2578; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2579; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2580; PC64LE9-NEXT: xxmrghd 34, 0, 1 2581; PC64LE9-NEXT: addi 1, 1, 64 2582; PC64LE9-NEXT: ld 0, 16(1) 2583; PC64LE9-NEXT: mtlr 0 2584; PC64LE9-NEXT: blr 2585entry: 2586 %sin = call <4 x double> @llvm.experimental.constrained.sin.v4f64( 2587 <4 x double> <double 42.0, double 42.1, 2588 double 42.2, double 42.3>, 2589 metadata !"round.dynamic", 2590 metadata !"fpexcept.strict") #1 2591 ret <4 x double> %sin 2592} 2593 2594define <1 x float> @constrained_vector_cos_v1f32() #0 { 2595; PC64LE-LABEL: constrained_vector_cos_v1f32: 2596; PC64LE: # %bb.0: # %entry 2597; PC64LE-NEXT: mflr 0 2598; PC64LE-NEXT: std 0, 16(1) 2599; PC64LE-NEXT: stdu 1, -32(1) 2600; PC64LE-NEXT: addis 3, 2, .LCPI45_0@toc@ha 2601; PC64LE-NEXT: lfs 1, .LCPI45_0@toc@l(3) 2602; PC64LE-NEXT: bl cosf 2603; PC64LE-NEXT: nop 2604; PC64LE-NEXT: addi 1, 1, 32 2605; PC64LE-NEXT: ld 0, 16(1) 2606; PC64LE-NEXT: mtlr 0 2607; PC64LE-NEXT: blr 2608; 2609; PC64LE9-LABEL: constrained_vector_cos_v1f32: 2610; PC64LE9: # %bb.0: # %entry 2611; PC64LE9-NEXT: mflr 0 2612; PC64LE9-NEXT: std 0, 16(1) 2613; PC64LE9-NEXT: stdu 1, -32(1) 2614; PC64LE9-NEXT: addis 3, 2, .LCPI45_0@toc@ha 2615; PC64LE9-NEXT: lfs 1, .LCPI45_0@toc@l(3) 2616; PC64LE9-NEXT: bl cosf 2617; PC64LE9-NEXT: nop 2618; PC64LE9-NEXT: addi 1, 1, 32 2619; PC64LE9-NEXT: ld 0, 16(1) 2620; PC64LE9-NEXT: mtlr 0 2621; PC64LE9-NEXT: blr 2622entry: 2623 %cos = call <1 x float> @llvm.experimental.constrained.cos.v1f32( 2624 <1 x float> <float 42.0>, 2625 metadata !"round.dynamic", 2626 metadata !"fpexcept.strict") #1 2627 ret <1 x float> %cos 2628} 2629 2630define <2 x double> @constrained_vector_cos_v2f64() #0 { 2631; PC64LE-LABEL: constrained_vector_cos_v2f64: 2632; PC64LE: # %bb.0: # %entry 2633; PC64LE-NEXT: mflr 0 2634; PC64LE-NEXT: std 0, 16(1) 2635; PC64LE-NEXT: stdu 1, -64(1) 2636; PC64LE-NEXT: addis 3, 2, .LCPI46_0@toc@ha 2637; PC64LE-NEXT: lfd 1, .LCPI46_0@toc@l(3) 2638; PC64LE-NEXT: bl cos 2639; PC64LE-NEXT: nop 2640; PC64LE-NEXT: li 3, 48 2641; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2642; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2643; PC64LE-NEXT: addis 3, 2, .LCPI46_1@toc@ha 2644; PC64LE-NEXT: lfs 1, .LCPI46_1@toc@l(3) 2645; PC64LE-NEXT: bl cos 2646; PC64LE-NEXT: nop 2647; PC64LE-NEXT: li 3, 48 2648; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2649; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2650; PC64LE-NEXT: xxmrghd 34, 0, 1 2651; PC64LE-NEXT: addi 1, 1, 64 2652; PC64LE-NEXT: ld 0, 16(1) 2653; PC64LE-NEXT: mtlr 0 2654; PC64LE-NEXT: blr 2655; 2656; PC64LE9-LABEL: constrained_vector_cos_v2f64: 2657; PC64LE9: # %bb.0: # %entry 2658; PC64LE9-NEXT: mflr 0 2659; PC64LE9-NEXT: std 0, 16(1) 2660; PC64LE9-NEXT: stdu 1, -48(1) 2661; PC64LE9-NEXT: addis 3, 2, .LCPI46_0@toc@ha 2662; PC64LE9-NEXT: lfd 1, .LCPI46_0@toc@l(3) 2663; PC64LE9-NEXT: bl cos 2664; PC64LE9-NEXT: nop 2665; PC64LE9-NEXT: addis 3, 2, .LCPI46_1@toc@ha 2666; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2667; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2668; PC64LE9-NEXT: lfs 1, .LCPI46_1@toc@l(3) 2669; PC64LE9-NEXT: bl cos 2670; PC64LE9-NEXT: nop 2671; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2672; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2673; PC64LE9-NEXT: xxmrghd 34, 0, 1 2674; PC64LE9-NEXT: addi 1, 1, 48 2675; PC64LE9-NEXT: ld 0, 16(1) 2676; PC64LE9-NEXT: mtlr 0 2677; PC64LE9-NEXT: blr 2678entry: 2679 %cos = call <2 x double> @llvm.experimental.constrained.cos.v2f64( 2680 <2 x double> <double 42.0, double 42.1>, 2681 metadata !"round.dynamic", 2682 metadata !"fpexcept.strict") #1 2683 ret <2 x double> %cos 2684} 2685 2686define <3 x float> @constrained_vector_cos_v3f32() #0 { 2687; PC64LE-LABEL: constrained_vector_cos_v3f32: 2688; PC64LE: # %bb.0: # %entry 2689; PC64LE-NEXT: mflr 0 2690; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 2691; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 2692; PC64LE-NEXT: std 0, 16(1) 2693; PC64LE-NEXT: stdu 1, -48(1) 2694; PC64LE-NEXT: addis 3, 2, .LCPI47_0@toc@ha 2695; PC64LE-NEXT: lfs 1, .LCPI47_0@toc@l(3) 2696; PC64LE-NEXT: bl cosf 2697; PC64LE-NEXT: nop 2698; PC64LE-NEXT: addis 3, 2, .LCPI47_1@toc@ha 2699; PC64LE-NEXT: fmr 31, 1 2700; PC64LE-NEXT: lfs 1, .LCPI47_1@toc@l(3) 2701; PC64LE-NEXT: bl cosf 2702; PC64LE-NEXT: nop 2703; PC64LE-NEXT: addis 3, 2, .LCPI47_2@toc@ha 2704; PC64LE-NEXT: fmr 30, 1 2705; PC64LE-NEXT: lfs 1, .LCPI47_2@toc@l(3) 2706; PC64LE-NEXT: bl cosf 2707; PC64LE-NEXT: nop 2708; PC64LE-NEXT: xscvdpspn 0, 30 2709; PC64LE-NEXT: addis 3, 2, .LCPI47_3@toc@ha 2710; PC64LE-NEXT: xscvdpspn 1, 1 2711; PC64LE-NEXT: addi 3, 3, .LCPI47_3@toc@l 2712; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 2713; PC64LE-NEXT: xscvdpspn 0, 31 2714; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 2715; PC64LE-NEXT: vmrghw 2, 2, 3 2716; PC64LE-NEXT: lvx 3, 0, 3 2717; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 2718; PC64LE-NEXT: vperm 2, 4, 2, 3 2719; PC64LE-NEXT: addi 1, 1, 48 2720; PC64LE-NEXT: ld 0, 16(1) 2721; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2722; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2723; PC64LE-NEXT: mtlr 0 2724; PC64LE-NEXT: blr 2725; 2726; PC64LE9-LABEL: constrained_vector_cos_v3f32: 2727; PC64LE9: # %bb.0: # %entry 2728; PC64LE9-NEXT: mflr 0 2729; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 2730; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 2731; PC64LE9-NEXT: std 0, 16(1) 2732; PC64LE9-NEXT: stdu 1, -48(1) 2733; PC64LE9-NEXT: addis 3, 2, .LCPI47_0@toc@ha 2734; PC64LE9-NEXT: lfs 1, .LCPI47_0@toc@l(3) 2735; PC64LE9-NEXT: bl cosf 2736; PC64LE9-NEXT: nop 2737; PC64LE9-NEXT: addis 3, 2, .LCPI47_1@toc@ha 2738; PC64LE9-NEXT: fmr 31, 1 2739; PC64LE9-NEXT: lfs 1, .LCPI47_1@toc@l(3) 2740; PC64LE9-NEXT: bl cosf 2741; PC64LE9-NEXT: nop 2742; PC64LE9-NEXT: addis 3, 2, .LCPI47_2@toc@ha 2743; PC64LE9-NEXT: fmr 30, 1 2744; PC64LE9-NEXT: lfs 1, .LCPI47_2@toc@l(3) 2745; PC64LE9-NEXT: bl cosf 2746; PC64LE9-NEXT: nop 2747; PC64LE9-NEXT: xscvdpspn 0, 1 2748; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 2749; PC64LE9-NEXT: xscvdpspn 0, 30 2750; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 2751; PC64LE9-NEXT: xscvdpspn 0, 31 2752; PC64LE9-NEXT: addis 3, 2, .LCPI47_3@toc@ha 2753; PC64LE9-NEXT: addi 3, 3, .LCPI47_3@toc@l 2754; PC64LE9-NEXT: vmrghw 2, 3, 2 2755; PC64LE9-NEXT: lxvx 35, 0, 3 2756; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 2757; PC64LE9-NEXT: vperm 2, 4, 2, 3 2758; PC64LE9-NEXT: addi 1, 1, 48 2759; PC64LE9-NEXT: ld 0, 16(1) 2760; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 2761; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 2762; PC64LE9-NEXT: mtlr 0 2763; PC64LE9-NEXT: blr 2764entry: 2765 %cos = call <3 x float> @llvm.experimental.constrained.cos.v3f32( 2766 <3 x float> <float 42.0, float 43.0, float 44.0>, 2767 metadata !"round.dynamic", 2768 metadata !"fpexcept.strict") #1 2769 ret <3 x float> %cos 2770} 2771 2772define <3 x double> @constrained_vector_cos_v3f64() #0 { 2773; PC64LE-LABEL: constrained_vector_cos_v3f64: 2774; PC64LE: # %bb.0: # %entry 2775; PC64LE-NEXT: mflr 0 2776; PC64LE-NEXT: std 0, 16(1) 2777; PC64LE-NEXT: stdu 1, -80(1) 2778; PC64LE-NEXT: li 3, 64 2779; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2780; PC64LE-NEXT: addis 3, 2, .LCPI48_0@toc@ha 2781; PC64LE-NEXT: lfd 1, .LCPI48_0@toc@l(3) 2782; PC64LE-NEXT: bl cos 2783; PC64LE-NEXT: nop 2784; PC64LE-NEXT: li 3, 48 2785; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2786; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2787; PC64LE-NEXT: addis 3, 2, .LCPI48_1@toc@ha 2788; PC64LE-NEXT: lfs 1, .LCPI48_1@toc@l(3) 2789; PC64LE-NEXT: bl cos 2790; PC64LE-NEXT: nop 2791; PC64LE-NEXT: li 3, 48 2792; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2793; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2794; PC64LE-NEXT: addis 3, 2, .LCPI48_2@toc@ha 2795; PC64LE-NEXT: xxmrghd 63, 0, 1 2796; PC64LE-NEXT: lfd 1, .LCPI48_2@toc@l(3) 2797; PC64LE-NEXT: bl cos 2798; PC64LE-NEXT: nop 2799; PC64LE-NEXT: xxswapd 0, 63 2800; PC64LE-NEXT: li 3, 64 2801; PC64LE-NEXT: xxlor 2, 63, 63 2802; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2803; PC64LE-NEXT: fmr 3, 1 2804; PC64LE-NEXT: fmr 1, 0 2805; PC64LE-NEXT: addi 1, 1, 80 2806; PC64LE-NEXT: ld 0, 16(1) 2807; PC64LE-NEXT: mtlr 0 2808; PC64LE-NEXT: blr 2809; 2810; PC64LE9-LABEL: constrained_vector_cos_v3f64: 2811; PC64LE9: # %bb.0: # %entry 2812; PC64LE9-NEXT: mflr 0 2813; PC64LE9-NEXT: std 0, 16(1) 2814; PC64LE9-NEXT: stdu 1, -64(1) 2815; PC64LE9-NEXT: addis 3, 2, .LCPI48_0@toc@ha 2816; PC64LE9-NEXT: lfd 1, .LCPI48_0@toc@l(3) 2817; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2818; PC64LE9-NEXT: bl cos 2819; PC64LE9-NEXT: nop 2820; PC64LE9-NEXT: addis 3, 2, .LCPI48_1@toc@ha 2821; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2822; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2823; PC64LE9-NEXT: lfs 1, .LCPI48_1@toc@l(3) 2824; PC64LE9-NEXT: bl cos 2825; PC64LE9-NEXT: nop 2826; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2827; PC64LE9-NEXT: addis 3, 2, .LCPI48_2@toc@ha 2828; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2829; PC64LE9-NEXT: xxmrghd 63, 0, 1 2830; PC64LE9-NEXT: lfd 1, .LCPI48_2@toc@l(3) 2831; PC64LE9-NEXT: bl cos 2832; PC64LE9-NEXT: nop 2833; PC64LE9-NEXT: fmr 3, 1 2834; PC64LE9-NEXT: xxswapd 1, 63 2835; PC64LE9-NEXT: xscpsgndp 2, 63, 63 2836; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2837; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2838; PC64LE9-NEXT: addi 1, 1, 64 2839; PC64LE9-NEXT: ld 0, 16(1) 2840; PC64LE9-NEXT: mtlr 0 2841; PC64LE9-NEXT: blr 2842entry: 2843 %cos = call <3 x double> @llvm.experimental.constrained.cos.v3f64( 2844 <3 x double> <double 42.0, double 42.1, double 42.2>, 2845 metadata !"round.dynamic", 2846 metadata !"fpexcept.strict") #1 2847 ret <3 x double> %cos 2848} 2849 2850define <4 x double> @constrained_vector_cos_v4f64() #0 { 2851; PC64LE-LABEL: constrained_vector_cos_v4f64: 2852; PC64LE: # %bb.0: # %entry 2853; PC64LE-NEXT: mflr 0 2854; PC64LE-NEXT: std 0, 16(1) 2855; PC64LE-NEXT: stdu 1, -80(1) 2856; PC64LE-NEXT: li 3, 64 2857; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2858; PC64LE-NEXT: addis 3, 2, .LCPI49_0@toc@ha 2859; PC64LE-NEXT: lfd 1, .LCPI49_0@toc@l(3) 2860; PC64LE-NEXT: bl cos 2861; PC64LE-NEXT: nop 2862; PC64LE-NEXT: li 3, 48 2863; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2864; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2865; PC64LE-NEXT: addis 3, 2, .LCPI49_1@toc@ha 2866; PC64LE-NEXT: lfd 1, .LCPI49_1@toc@l(3) 2867; PC64LE-NEXT: bl cos 2868; PC64LE-NEXT: nop 2869; PC64LE-NEXT: li 3, 48 2870; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2871; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2872; PC64LE-NEXT: addis 3, 2, .LCPI49_2@toc@ha 2873; PC64LE-NEXT: xxmrghd 63, 1, 0 2874; PC64LE-NEXT: lfd 1, .LCPI49_2@toc@l(3) 2875; PC64LE-NEXT: bl cos 2876; PC64LE-NEXT: nop 2877; PC64LE-NEXT: li 3, 48 2878; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2879; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2880; PC64LE-NEXT: addis 3, 2, .LCPI49_3@toc@ha 2881; PC64LE-NEXT: lfs 1, .LCPI49_3@toc@l(3) 2882; PC64LE-NEXT: bl cos 2883; PC64LE-NEXT: nop 2884; PC64LE-NEXT: li 3, 48 2885; PC64LE-NEXT: vmr 3, 31 2886; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2887; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2888; PC64LE-NEXT: li 3, 64 2889; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2890; PC64LE-NEXT: xxmrghd 34, 0, 1 2891; PC64LE-NEXT: addi 1, 1, 80 2892; PC64LE-NEXT: ld 0, 16(1) 2893; PC64LE-NEXT: mtlr 0 2894; PC64LE-NEXT: blr 2895; 2896; PC64LE9-LABEL: constrained_vector_cos_v4f64: 2897; PC64LE9: # %bb.0: # %entry 2898; PC64LE9-NEXT: mflr 0 2899; PC64LE9-NEXT: std 0, 16(1) 2900; PC64LE9-NEXT: stdu 1, -64(1) 2901; PC64LE9-NEXT: addis 3, 2, .LCPI49_0@toc@ha 2902; PC64LE9-NEXT: lfd 1, .LCPI49_0@toc@l(3) 2903; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2904; PC64LE9-NEXT: bl cos 2905; PC64LE9-NEXT: nop 2906; PC64LE9-NEXT: addis 3, 2, .LCPI49_1@toc@ha 2907; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2908; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2909; PC64LE9-NEXT: lfd 1, .LCPI49_1@toc@l(3) 2910; PC64LE9-NEXT: bl cos 2911; PC64LE9-NEXT: nop 2912; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2913; PC64LE9-NEXT: addis 3, 2, .LCPI49_2@toc@ha 2914; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2915; PC64LE9-NEXT: xxmrghd 63, 1, 0 2916; PC64LE9-NEXT: lfd 1, .LCPI49_2@toc@l(3) 2917; PC64LE9-NEXT: bl cos 2918; PC64LE9-NEXT: nop 2919; PC64LE9-NEXT: addis 3, 2, .LCPI49_3@toc@ha 2920; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2921; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 2922; PC64LE9-NEXT: lfs 1, .LCPI49_3@toc@l(3) 2923; PC64LE9-NEXT: bl cos 2924; PC64LE9-NEXT: nop 2925; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 2926; PC64LE9-NEXT: vmr 3, 31 2927; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2928; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2929; PC64LE9-NEXT: xxmrghd 34, 0, 1 2930; PC64LE9-NEXT: addi 1, 1, 64 2931; PC64LE9-NEXT: ld 0, 16(1) 2932; PC64LE9-NEXT: mtlr 0 2933; PC64LE9-NEXT: blr 2934entry: 2935 %cos = call <4 x double> @llvm.experimental.constrained.cos.v4f64( 2936 <4 x double> <double 42.0, double 42.1, 2937 double 42.2, double 42.3>, 2938 metadata !"round.dynamic", 2939 metadata !"fpexcept.strict") #1 2940 ret <4 x double> %cos 2941} 2942 2943define <1 x float> @constrained_vector_exp_v1f32() #0 { 2944; PC64LE-LABEL: constrained_vector_exp_v1f32: 2945; PC64LE: # %bb.0: # %entry 2946; PC64LE-NEXT: mflr 0 2947; PC64LE-NEXT: std 0, 16(1) 2948; PC64LE-NEXT: stdu 1, -32(1) 2949; PC64LE-NEXT: addis 3, 2, .LCPI50_0@toc@ha 2950; PC64LE-NEXT: lfs 1, .LCPI50_0@toc@l(3) 2951; PC64LE-NEXT: bl expf 2952; PC64LE-NEXT: nop 2953; PC64LE-NEXT: addi 1, 1, 32 2954; PC64LE-NEXT: ld 0, 16(1) 2955; PC64LE-NEXT: mtlr 0 2956; PC64LE-NEXT: blr 2957; 2958; PC64LE9-LABEL: constrained_vector_exp_v1f32: 2959; PC64LE9: # %bb.0: # %entry 2960; PC64LE9-NEXT: mflr 0 2961; PC64LE9-NEXT: std 0, 16(1) 2962; PC64LE9-NEXT: stdu 1, -32(1) 2963; PC64LE9-NEXT: addis 3, 2, .LCPI50_0@toc@ha 2964; PC64LE9-NEXT: lfs 1, .LCPI50_0@toc@l(3) 2965; PC64LE9-NEXT: bl expf 2966; PC64LE9-NEXT: nop 2967; PC64LE9-NEXT: addi 1, 1, 32 2968; PC64LE9-NEXT: ld 0, 16(1) 2969; PC64LE9-NEXT: mtlr 0 2970; PC64LE9-NEXT: blr 2971entry: 2972 %exp = call <1 x float> @llvm.experimental.constrained.exp.v1f32( 2973 <1 x float> <float 42.0>, 2974 metadata !"round.dynamic", 2975 metadata !"fpexcept.strict") #1 2976 ret <1 x float> %exp 2977} 2978 2979define <2 x double> @constrained_vector_exp_v2f64() #0 { 2980; PC64LE-LABEL: constrained_vector_exp_v2f64: 2981; PC64LE: # %bb.0: # %entry 2982; PC64LE-NEXT: mflr 0 2983; PC64LE-NEXT: std 0, 16(1) 2984; PC64LE-NEXT: stdu 1, -64(1) 2985; PC64LE-NEXT: addis 3, 2, .LCPI51_0@toc@ha 2986; PC64LE-NEXT: lfd 1, .LCPI51_0@toc@l(3) 2987; PC64LE-NEXT: bl exp 2988; PC64LE-NEXT: nop 2989; PC64LE-NEXT: li 3, 48 2990; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2991; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 2992; PC64LE-NEXT: addis 3, 2, .LCPI51_1@toc@ha 2993; PC64LE-NEXT: lfs 1, .LCPI51_1@toc@l(3) 2994; PC64LE-NEXT: bl exp 2995; PC64LE-NEXT: nop 2996; PC64LE-NEXT: li 3, 48 2997; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2998; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 2999; PC64LE-NEXT: xxmrghd 34, 0, 1 3000; PC64LE-NEXT: addi 1, 1, 64 3001; PC64LE-NEXT: ld 0, 16(1) 3002; PC64LE-NEXT: mtlr 0 3003; PC64LE-NEXT: blr 3004; 3005; PC64LE9-LABEL: constrained_vector_exp_v2f64: 3006; PC64LE9: # %bb.0: # %entry 3007; PC64LE9-NEXT: mflr 0 3008; PC64LE9-NEXT: std 0, 16(1) 3009; PC64LE9-NEXT: stdu 1, -48(1) 3010; PC64LE9-NEXT: addis 3, 2, .LCPI51_0@toc@ha 3011; PC64LE9-NEXT: lfd 1, .LCPI51_0@toc@l(3) 3012; PC64LE9-NEXT: bl exp 3013; PC64LE9-NEXT: nop 3014; PC64LE9-NEXT: addis 3, 2, .LCPI51_1@toc@ha 3015; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3016; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3017; PC64LE9-NEXT: lfs 1, .LCPI51_1@toc@l(3) 3018; PC64LE9-NEXT: bl exp 3019; PC64LE9-NEXT: nop 3020; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3021; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3022; PC64LE9-NEXT: xxmrghd 34, 0, 1 3023; PC64LE9-NEXT: addi 1, 1, 48 3024; PC64LE9-NEXT: ld 0, 16(1) 3025; PC64LE9-NEXT: mtlr 0 3026; PC64LE9-NEXT: blr 3027entry: 3028 %exp = call <2 x double> @llvm.experimental.constrained.exp.v2f64( 3029 <2 x double> <double 42.0, double 42.1>, 3030 metadata !"round.dynamic", 3031 metadata !"fpexcept.strict") #1 3032 ret <2 x double> %exp 3033} 3034 3035define <3 x float> @constrained_vector_exp_v3f32() #0 { 3036; PC64LE-LABEL: constrained_vector_exp_v3f32: 3037; PC64LE: # %bb.0: # %entry 3038; PC64LE-NEXT: mflr 0 3039; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3040; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3041; PC64LE-NEXT: std 0, 16(1) 3042; PC64LE-NEXT: stdu 1, -48(1) 3043; PC64LE-NEXT: addis 3, 2, .LCPI52_0@toc@ha 3044; PC64LE-NEXT: lfs 1, .LCPI52_0@toc@l(3) 3045; PC64LE-NEXT: bl expf 3046; PC64LE-NEXT: nop 3047; PC64LE-NEXT: addis 3, 2, .LCPI52_1@toc@ha 3048; PC64LE-NEXT: fmr 31, 1 3049; PC64LE-NEXT: lfs 1, .LCPI52_1@toc@l(3) 3050; PC64LE-NEXT: bl expf 3051; PC64LE-NEXT: nop 3052; PC64LE-NEXT: addis 3, 2, .LCPI52_2@toc@ha 3053; PC64LE-NEXT: fmr 30, 1 3054; PC64LE-NEXT: lfs 1, .LCPI52_2@toc@l(3) 3055; PC64LE-NEXT: bl expf 3056; PC64LE-NEXT: nop 3057; PC64LE-NEXT: xscvdpspn 0, 30 3058; PC64LE-NEXT: addis 3, 2, .LCPI52_3@toc@ha 3059; PC64LE-NEXT: xscvdpspn 1, 1 3060; PC64LE-NEXT: addi 3, 3, .LCPI52_3@toc@l 3061; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 3062; PC64LE-NEXT: xscvdpspn 0, 31 3063; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 3064; PC64LE-NEXT: vmrghw 2, 2, 3 3065; PC64LE-NEXT: lvx 3, 0, 3 3066; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 3067; PC64LE-NEXT: vperm 2, 4, 2, 3 3068; PC64LE-NEXT: addi 1, 1, 48 3069; PC64LE-NEXT: ld 0, 16(1) 3070; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3071; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3072; PC64LE-NEXT: mtlr 0 3073; PC64LE-NEXT: blr 3074; 3075; PC64LE9-LABEL: constrained_vector_exp_v3f32: 3076; PC64LE9: # %bb.0: # %entry 3077; PC64LE9-NEXT: mflr 0 3078; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3079; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3080; PC64LE9-NEXT: std 0, 16(1) 3081; PC64LE9-NEXT: stdu 1, -48(1) 3082; PC64LE9-NEXT: addis 3, 2, .LCPI52_0@toc@ha 3083; PC64LE9-NEXT: lfs 1, .LCPI52_0@toc@l(3) 3084; PC64LE9-NEXT: bl expf 3085; PC64LE9-NEXT: nop 3086; PC64LE9-NEXT: addis 3, 2, .LCPI52_1@toc@ha 3087; PC64LE9-NEXT: fmr 31, 1 3088; PC64LE9-NEXT: lfs 1, .LCPI52_1@toc@l(3) 3089; PC64LE9-NEXT: bl expf 3090; PC64LE9-NEXT: nop 3091; PC64LE9-NEXT: addis 3, 2, .LCPI52_2@toc@ha 3092; PC64LE9-NEXT: fmr 30, 1 3093; PC64LE9-NEXT: lfs 1, .LCPI52_2@toc@l(3) 3094; PC64LE9-NEXT: bl expf 3095; PC64LE9-NEXT: nop 3096; PC64LE9-NEXT: xscvdpspn 0, 1 3097; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 3098; PC64LE9-NEXT: xscvdpspn 0, 30 3099; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 3100; PC64LE9-NEXT: xscvdpspn 0, 31 3101; PC64LE9-NEXT: addis 3, 2, .LCPI52_3@toc@ha 3102; PC64LE9-NEXT: addi 3, 3, .LCPI52_3@toc@l 3103; PC64LE9-NEXT: vmrghw 2, 3, 2 3104; PC64LE9-NEXT: lxvx 35, 0, 3 3105; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 3106; PC64LE9-NEXT: vperm 2, 4, 2, 3 3107; PC64LE9-NEXT: addi 1, 1, 48 3108; PC64LE9-NEXT: ld 0, 16(1) 3109; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3110; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3111; PC64LE9-NEXT: mtlr 0 3112; PC64LE9-NEXT: blr 3113entry: 3114 %exp = call <3 x float> @llvm.experimental.constrained.exp.v3f32( 3115 <3 x float> <float 42.0, float 43.0, float 44.0>, 3116 metadata !"round.dynamic", 3117 metadata !"fpexcept.strict") #1 3118 ret <3 x float> %exp 3119} 3120 3121define <3 x double> @constrained_vector_exp_v3f64() #0 { 3122; PC64LE-LABEL: constrained_vector_exp_v3f64: 3123; PC64LE: # %bb.0: # %entry 3124; PC64LE-NEXT: mflr 0 3125; PC64LE-NEXT: std 0, 16(1) 3126; PC64LE-NEXT: stdu 1, -80(1) 3127; PC64LE-NEXT: li 3, 64 3128; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3129; PC64LE-NEXT: addis 3, 2, .LCPI53_0@toc@ha 3130; PC64LE-NEXT: lfd 1, .LCPI53_0@toc@l(3) 3131; PC64LE-NEXT: bl exp 3132; PC64LE-NEXT: nop 3133; PC64LE-NEXT: li 3, 48 3134; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3135; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3136; PC64LE-NEXT: addis 3, 2, .LCPI53_1@toc@ha 3137; PC64LE-NEXT: lfs 1, .LCPI53_1@toc@l(3) 3138; PC64LE-NEXT: bl exp 3139; PC64LE-NEXT: nop 3140; PC64LE-NEXT: li 3, 48 3141; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3142; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3143; PC64LE-NEXT: addis 3, 2, .LCPI53_2@toc@ha 3144; PC64LE-NEXT: xxmrghd 63, 0, 1 3145; PC64LE-NEXT: lfd 1, .LCPI53_2@toc@l(3) 3146; PC64LE-NEXT: bl exp 3147; PC64LE-NEXT: nop 3148; PC64LE-NEXT: xxswapd 0, 63 3149; PC64LE-NEXT: li 3, 64 3150; PC64LE-NEXT: xxlor 2, 63, 63 3151; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3152; PC64LE-NEXT: fmr 3, 1 3153; PC64LE-NEXT: fmr 1, 0 3154; PC64LE-NEXT: addi 1, 1, 80 3155; PC64LE-NEXT: ld 0, 16(1) 3156; PC64LE-NEXT: mtlr 0 3157; PC64LE-NEXT: blr 3158; 3159; PC64LE9-LABEL: constrained_vector_exp_v3f64: 3160; PC64LE9: # %bb.0: # %entry 3161; PC64LE9-NEXT: mflr 0 3162; PC64LE9-NEXT: std 0, 16(1) 3163; PC64LE9-NEXT: stdu 1, -64(1) 3164; PC64LE9-NEXT: addis 3, 2, .LCPI53_0@toc@ha 3165; PC64LE9-NEXT: lfd 1, .LCPI53_0@toc@l(3) 3166; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3167; PC64LE9-NEXT: bl exp 3168; PC64LE9-NEXT: nop 3169; PC64LE9-NEXT: addis 3, 2, .LCPI53_1@toc@ha 3170; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3171; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3172; PC64LE9-NEXT: lfs 1, .LCPI53_1@toc@l(3) 3173; PC64LE9-NEXT: bl exp 3174; PC64LE9-NEXT: nop 3175; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3176; PC64LE9-NEXT: addis 3, 2, .LCPI53_2@toc@ha 3177; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3178; PC64LE9-NEXT: xxmrghd 63, 0, 1 3179; PC64LE9-NEXT: lfd 1, .LCPI53_2@toc@l(3) 3180; PC64LE9-NEXT: bl exp 3181; PC64LE9-NEXT: nop 3182; PC64LE9-NEXT: fmr 3, 1 3183; PC64LE9-NEXT: xxswapd 1, 63 3184; PC64LE9-NEXT: xscpsgndp 2, 63, 63 3185; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3186; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3187; PC64LE9-NEXT: addi 1, 1, 64 3188; PC64LE9-NEXT: ld 0, 16(1) 3189; PC64LE9-NEXT: mtlr 0 3190; PC64LE9-NEXT: blr 3191entry: 3192 %exp = call <3 x double> @llvm.experimental.constrained.exp.v3f64( 3193 <3 x double> <double 42.0, double 42.1, double 42.2>, 3194 metadata !"round.dynamic", 3195 metadata !"fpexcept.strict") #1 3196 ret <3 x double> %exp 3197} 3198 3199define <4 x double> @constrained_vector_exp_v4f64() #0 { 3200; PC64LE-LABEL: constrained_vector_exp_v4f64: 3201; PC64LE: # %bb.0: # %entry 3202; PC64LE-NEXT: mflr 0 3203; PC64LE-NEXT: std 0, 16(1) 3204; PC64LE-NEXT: stdu 1, -80(1) 3205; PC64LE-NEXT: li 3, 64 3206; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3207; PC64LE-NEXT: addis 3, 2, .LCPI54_0@toc@ha 3208; PC64LE-NEXT: lfd 1, .LCPI54_0@toc@l(3) 3209; PC64LE-NEXT: bl exp 3210; PC64LE-NEXT: nop 3211; PC64LE-NEXT: li 3, 48 3212; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3213; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3214; PC64LE-NEXT: addis 3, 2, .LCPI54_1@toc@ha 3215; PC64LE-NEXT: lfd 1, .LCPI54_1@toc@l(3) 3216; PC64LE-NEXT: bl exp 3217; PC64LE-NEXT: nop 3218; PC64LE-NEXT: li 3, 48 3219; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3220; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3221; PC64LE-NEXT: addis 3, 2, .LCPI54_2@toc@ha 3222; PC64LE-NEXT: xxmrghd 63, 1, 0 3223; PC64LE-NEXT: lfd 1, .LCPI54_2@toc@l(3) 3224; PC64LE-NEXT: bl exp 3225; PC64LE-NEXT: nop 3226; PC64LE-NEXT: li 3, 48 3227; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3228; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3229; PC64LE-NEXT: addis 3, 2, .LCPI54_3@toc@ha 3230; PC64LE-NEXT: lfs 1, .LCPI54_3@toc@l(3) 3231; PC64LE-NEXT: bl exp 3232; PC64LE-NEXT: nop 3233; PC64LE-NEXT: li 3, 48 3234; PC64LE-NEXT: vmr 3, 31 3235; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3236; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3237; PC64LE-NEXT: li 3, 64 3238; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3239; PC64LE-NEXT: xxmrghd 34, 0, 1 3240; PC64LE-NEXT: addi 1, 1, 80 3241; PC64LE-NEXT: ld 0, 16(1) 3242; PC64LE-NEXT: mtlr 0 3243; PC64LE-NEXT: blr 3244; 3245; PC64LE9-LABEL: constrained_vector_exp_v4f64: 3246; PC64LE9: # %bb.0: # %entry 3247; PC64LE9-NEXT: mflr 0 3248; PC64LE9-NEXT: std 0, 16(1) 3249; PC64LE9-NEXT: stdu 1, -64(1) 3250; PC64LE9-NEXT: addis 3, 2, .LCPI54_0@toc@ha 3251; PC64LE9-NEXT: lfd 1, .LCPI54_0@toc@l(3) 3252; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3253; PC64LE9-NEXT: bl exp 3254; PC64LE9-NEXT: nop 3255; PC64LE9-NEXT: addis 3, 2, .LCPI54_1@toc@ha 3256; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3257; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3258; PC64LE9-NEXT: lfd 1, .LCPI54_1@toc@l(3) 3259; PC64LE9-NEXT: bl exp 3260; PC64LE9-NEXT: nop 3261; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3262; PC64LE9-NEXT: addis 3, 2, .LCPI54_2@toc@ha 3263; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3264; PC64LE9-NEXT: xxmrghd 63, 1, 0 3265; PC64LE9-NEXT: lfd 1, .LCPI54_2@toc@l(3) 3266; PC64LE9-NEXT: bl exp 3267; PC64LE9-NEXT: nop 3268; PC64LE9-NEXT: addis 3, 2, .LCPI54_3@toc@ha 3269; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3270; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3271; PC64LE9-NEXT: lfs 1, .LCPI54_3@toc@l(3) 3272; PC64LE9-NEXT: bl exp 3273; PC64LE9-NEXT: nop 3274; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3275; PC64LE9-NEXT: vmr 3, 31 3276; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3277; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3278; PC64LE9-NEXT: xxmrghd 34, 0, 1 3279; PC64LE9-NEXT: addi 1, 1, 64 3280; PC64LE9-NEXT: ld 0, 16(1) 3281; PC64LE9-NEXT: mtlr 0 3282; PC64LE9-NEXT: blr 3283entry: 3284 %exp = call <4 x double> @llvm.experimental.constrained.exp.v4f64( 3285 <4 x double> <double 42.0, double 42.1, 3286 double 42.2, double 42.3>, 3287 metadata !"round.dynamic", 3288 metadata !"fpexcept.strict") #1 3289 ret <4 x double> %exp 3290} 3291 3292define <1 x float> @constrained_vector_exp2_v1f32() #0 { 3293; PC64LE-LABEL: constrained_vector_exp2_v1f32: 3294; PC64LE: # %bb.0: # %entry 3295; PC64LE-NEXT: mflr 0 3296; PC64LE-NEXT: std 0, 16(1) 3297; PC64LE-NEXT: stdu 1, -32(1) 3298; PC64LE-NEXT: addis 3, 2, .LCPI55_0@toc@ha 3299; PC64LE-NEXT: lfs 1, .LCPI55_0@toc@l(3) 3300; PC64LE-NEXT: bl exp2f 3301; PC64LE-NEXT: nop 3302; PC64LE-NEXT: addi 1, 1, 32 3303; PC64LE-NEXT: ld 0, 16(1) 3304; PC64LE-NEXT: mtlr 0 3305; PC64LE-NEXT: blr 3306; 3307; PC64LE9-LABEL: constrained_vector_exp2_v1f32: 3308; PC64LE9: # %bb.0: # %entry 3309; PC64LE9-NEXT: mflr 0 3310; PC64LE9-NEXT: std 0, 16(1) 3311; PC64LE9-NEXT: stdu 1, -32(1) 3312; PC64LE9-NEXT: addis 3, 2, .LCPI55_0@toc@ha 3313; PC64LE9-NEXT: lfs 1, .LCPI55_0@toc@l(3) 3314; PC64LE9-NEXT: bl exp2f 3315; PC64LE9-NEXT: nop 3316; PC64LE9-NEXT: addi 1, 1, 32 3317; PC64LE9-NEXT: ld 0, 16(1) 3318; PC64LE9-NEXT: mtlr 0 3319; PC64LE9-NEXT: blr 3320entry: 3321 %exp2 = call <1 x float> @llvm.experimental.constrained.exp2.v1f32( 3322 <1 x float> <float 42.0>, 3323 metadata !"round.dynamic", 3324 metadata !"fpexcept.strict") #1 3325 ret <1 x float> %exp2 3326} 3327 3328define <2 x double> @constrained_vector_exp2_v2f64() #0 { 3329; PC64LE-LABEL: constrained_vector_exp2_v2f64: 3330; PC64LE: # %bb.0: # %entry 3331; PC64LE-NEXT: mflr 0 3332; PC64LE-NEXT: std 0, 16(1) 3333; PC64LE-NEXT: stdu 1, -64(1) 3334; PC64LE-NEXT: addis 3, 2, .LCPI56_0@toc@ha 3335; PC64LE-NEXT: lfd 1, .LCPI56_0@toc@l(3) 3336; PC64LE-NEXT: bl exp2 3337; PC64LE-NEXT: nop 3338; PC64LE-NEXT: li 3, 48 3339; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3340; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3341; PC64LE-NEXT: addis 3, 2, .LCPI56_1@toc@ha 3342; PC64LE-NEXT: lfs 1, .LCPI56_1@toc@l(3) 3343; PC64LE-NEXT: bl exp2 3344; PC64LE-NEXT: nop 3345; PC64LE-NEXT: li 3, 48 3346; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3347; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3348; PC64LE-NEXT: xxmrghd 34, 1, 0 3349; PC64LE-NEXT: addi 1, 1, 64 3350; PC64LE-NEXT: ld 0, 16(1) 3351; PC64LE-NEXT: mtlr 0 3352; PC64LE-NEXT: blr 3353; 3354; PC64LE9-LABEL: constrained_vector_exp2_v2f64: 3355; PC64LE9: # %bb.0: # %entry 3356; PC64LE9-NEXT: mflr 0 3357; PC64LE9-NEXT: std 0, 16(1) 3358; PC64LE9-NEXT: stdu 1, -48(1) 3359; PC64LE9-NEXT: addis 3, 2, .LCPI56_0@toc@ha 3360; PC64LE9-NEXT: lfd 1, .LCPI56_0@toc@l(3) 3361; PC64LE9-NEXT: bl exp2 3362; PC64LE9-NEXT: nop 3363; PC64LE9-NEXT: addis 3, 2, .LCPI56_1@toc@ha 3364; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3365; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3366; PC64LE9-NEXT: lfs 1, .LCPI56_1@toc@l(3) 3367; PC64LE9-NEXT: bl exp2 3368; PC64LE9-NEXT: nop 3369; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3370; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3371; PC64LE9-NEXT: xxmrghd 34, 1, 0 3372; PC64LE9-NEXT: addi 1, 1, 48 3373; PC64LE9-NEXT: ld 0, 16(1) 3374; PC64LE9-NEXT: mtlr 0 3375; PC64LE9-NEXT: blr 3376entry: 3377 %exp2 = call <2 x double> @llvm.experimental.constrained.exp2.v2f64( 3378 <2 x double> <double 42.1, double 42.0>, 3379 metadata !"round.dynamic", 3380 metadata !"fpexcept.strict") #1 3381 ret <2 x double> %exp2 3382} 3383 3384define <3 x float> @constrained_vector_exp2_v3f32() #0 { 3385; PC64LE-LABEL: constrained_vector_exp2_v3f32: 3386; PC64LE: # %bb.0: # %entry 3387; PC64LE-NEXT: mflr 0 3388; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3389; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3390; PC64LE-NEXT: std 0, 16(1) 3391; PC64LE-NEXT: stdu 1, -48(1) 3392; PC64LE-NEXT: addis 3, 2, .LCPI57_0@toc@ha 3393; PC64LE-NEXT: lfs 1, .LCPI57_0@toc@l(3) 3394; PC64LE-NEXT: bl exp2f 3395; PC64LE-NEXT: nop 3396; PC64LE-NEXT: addis 3, 2, .LCPI57_1@toc@ha 3397; PC64LE-NEXT: fmr 31, 1 3398; PC64LE-NEXT: lfs 1, .LCPI57_1@toc@l(3) 3399; PC64LE-NEXT: bl exp2f 3400; PC64LE-NEXT: nop 3401; PC64LE-NEXT: addis 3, 2, .LCPI57_2@toc@ha 3402; PC64LE-NEXT: fmr 30, 1 3403; PC64LE-NEXT: lfs 1, .LCPI57_2@toc@l(3) 3404; PC64LE-NEXT: bl exp2f 3405; PC64LE-NEXT: nop 3406; PC64LE-NEXT: xscvdpspn 0, 30 3407; PC64LE-NEXT: addis 3, 2, .LCPI57_3@toc@ha 3408; PC64LE-NEXT: xscvdpspn 1, 1 3409; PC64LE-NEXT: addi 3, 3, .LCPI57_3@toc@l 3410; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 3411; PC64LE-NEXT: xscvdpspn 0, 31 3412; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 3413; PC64LE-NEXT: vmrghw 2, 2, 3 3414; PC64LE-NEXT: lvx 3, 0, 3 3415; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 3416; PC64LE-NEXT: vperm 2, 4, 2, 3 3417; PC64LE-NEXT: addi 1, 1, 48 3418; PC64LE-NEXT: ld 0, 16(1) 3419; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3420; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3421; PC64LE-NEXT: mtlr 0 3422; PC64LE-NEXT: blr 3423; 3424; PC64LE9-LABEL: constrained_vector_exp2_v3f32: 3425; PC64LE9: # %bb.0: # %entry 3426; PC64LE9-NEXT: mflr 0 3427; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3428; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3429; PC64LE9-NEXT: std 0, 16(1) 3430; PC64LE9-NEXT: stdu 1, -48(1) 3431; PC64LE9-NEXT: addis 3, 2, .LCPI57_0@toc@ha 3432; PC64LE9-NEXT: lfs 1, .LCPI57_0@toc@l(3) 3433; PC64LE9-NEXT: bl exp2f 3434; PC64LE9-NEXT: nop 3435; PC64LE9-NEXT: addis 3, 2, .LCPI57_1@toc@ha 3436; PC64LE9-NEXT: fmr 31, 1 3437; PC64LE9-NEXT: lfs 1, .LCPI57_1@toc@l(3) 3438; PC64LE9-NEXT: bl exp2f 3439; PC64LE9-NEXT: nop 3440; PC64LE9-NEXT: addis 3, 2, .LCPI57_2@toc@ha 3441; PC64LE9-NEXT: fmr 30, 1 3442; PC64LE9-NEXT: lfs 1, .LCPI57_2@toc@l(3) 3443; PC64LE9-NEXT: bl exp2f 3444; PC64LE9-NEXT: nop 3445; PC64LE9-NEXT: xscvdpspn 0, 1 3446; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 3447; PC64LE9-NEXT: xscvdpspn 0, 30 3448; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 3449; PC64LE9-NEXT: xscvdpspn 0, 31 3450; PC64LE9-NEXT: addis 3, 2, .LCPI57_3@toc@ha 3451; PC64LE9-NEXT: addi 3, 3, .LCPI57_3@toc@l 3452; PC64LE9-NEXT: vmrghw 2, 3, 2 3453; PC64LE9-NEXT: lxvx 35, 0, 3 3454; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 3455; PC64LE9-NEXT: vperm 2, 4, 2, 3 3456; PC64LE9-NEXT: addi 1, 1, 48 3457; PC64LE9-NEXT: ld 0, 16(1) 3458; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3459; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3460; PC64LE9-NEXT: mtlr 0 3461; PC64LE9-NEXT: blr 3462entry: 3463 %exp2 = call <3 x float> @llvm.experimental.constrained.exp2.v3f32( 3464 <3 x float> <float 42.0, float 43.0, float 44.0>, 3465 metadata !"round.dynamic", 3466 metadata !"fpexcept.strict") #1 3467 ret <3 x float> %exp2 3468} 3469 3470define <3 x double> @constrained_vector_exp2_v3f64() #0 { 3471; PC64LE-LABEL: constrained_vector_exp2_v3f64: 3472; PC64LE: # %bb.0: # %entry 3473; PC64LE-NEXT: mflr 0 3474; PC64LE-NEXT: std 0, 16(1) 3475; PC64LE-NEXT: stdu 1, -80(1) 3476; PC64LE-NEXT: li 3, 64 3477; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3478; PC64LE-NEXT: addis 3, 2, .LCPI58_0@toc@ha 3479; PC64LE-NEXT: lfd 1, .LCPI58_0@toc@l(3) 3480; PC64LE-NEXT: bl exp2 3481; PC64LE-NEXT: nop 3482; PC64LE-NEXT: li 3, 48 3483; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3484; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3485; PC64LE-NEXT: addis 3, 2, .LCPI58_1@toc@ha 3486; PC64LE-NEXT: lfs 1, .LCPI58_1@toc@l(3) 3487; PC64LE-NEXT: bl exp2 3488; PC64LE-NEXT: nop 3489; PC64LE-NEXT: li 3, 48 3490; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3491; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3492; PC64LE-NEXT: addis 3, 2, .LCPI58_2@toc@ha 3493; PC64LE-NEXT: xxmrghd 63, 0, 1 3494; PC64LE-NEXT: lfd 1, .LCPI58_2@toc@l(3) 3495; PC64LE-NEXT: bl exp2 3496; PC64LE-NEXT: nop 3497; PC64LE-NEXT: xxswapd 0, 63 3498; PC64LE-NEXT: li 3, 64 3499; PC64LE-NEXT: xxlor 2, 63, 63 3500; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3501; PC64LE-NEXT: fmr 3, 1 3502; PC64LE-NEXT: fmr 1, 0 3503; PC64LE-NEXT: addi 1, 1, 80 3504; PC64LE-NEXT: ld 0, 16(1) 3505; PC64LE-NEXT: mtlr 0 3506; PC64LE-NEXT: blr 3507; 3508; PC64LE9-LABEL: constrained_vector_exp2_v3f64: 3509; PC64LE9: # %bb.0: # %entry 3510; PC64LE9-NEXT: mflr 0 3511; PC64LE9-NEXT: std 0, 16(1) 3512; PC64LE9-NEXT: stdu 1, -64(1) 3513; PC64LE9-NEXT: addis 3, 2, .LCPI58_0@toc@ha 3514; PC64LE9-NEXT: lfd 1, .LCPI58_0@toc@l(3) 3515; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3516; PC64LE9-NEXT: bl exp2 3517; PC64LE9-NEXT: nop 3518; PC64LE9-NEXT: addis 3, 2, .LCPI58_1@toc@ha 3519; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3520; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3521; PC64LE9-NEXT: lfs 1, .LCPI58_1@toc@l(3) 3522; PC64LE9-NEXT: bl exp2 3523; PC64LE9-NEXT: nop 3524; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3525; PC64LE9-NEXT: addis 3, 2, .LCPI58_2@toc@ha 3526; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3527; PC64LE9-NEXT: xxmrghd 63, 0, 1 3528; PC64LE9-NEXT: lfd 1, .LCPI58_2@toc@l(3) 3529; PC64LE9-NEXT: bl exp2 3530; PC64LE9-NEXT: nop 3531; PC64LE9-NEXT: fmr 3, 1 3532; PC64LE9-NEXT: xxswapd 1, 63 3533; PC64LE9-NEXT: xscpsgndp 2, 63, 63 3534; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3535; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3536; PC64LE9-NEXT: addi 1, 1, 64 3537; PC64LE9-NEXT: ld 0, 16(1) 3538; PC64LE9-NEXT: mtlr 0 3539; PC64LE9-NEXT: blr 3540entry: 3541 %exp2 = call <3 x double> @llvm.experimental.constrained.exp2.v3f64( 3542 <3 x double> <double 42.0, double 42.1, double 42.2>, 3543 metadata !"round.dynamic", 3544 metadata !"fpexcept.strict") #1 3545 ret <3 x double> %exp2 3546} 3547 3548define <4 x double> @constrained_vector_exp2_v4f64() #0 { 3549; PC64LE-LABEL: constrained_vector_exp2_v4f64: 3550; PC64LE: # %bb.0: # %entry 3551; PC64LE-NEXT: mflr 0 3552; PC64LE-NEXT: std 0, 16(1) 3553; PC64LE-NEXT: stdu 1, -80(1) 3554; PC64LE-NEXT: li 3, 64 3555; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3556; PC64LE-NEXT: addis 3, 2, .LCPI59_0@toc@ha 3557; PC64LE-NEXT: lfd 1, .LCPI59_0@toc@l(3) 3558; PC64LE-NEXT: bl exp2 3559; PC64LE-NEXT: nop 3560; PC64LE-NEXT: li 3, 48 3561; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3562; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3563; PC64LE-NEXT: addis 3, 2, .LCPI59_1@toc@ha 3564; PC64LE-NEXT: lfd 1, .LCPI59_1@toc@l(3) 3565; PC64LE-NEXT: bl exp2 3566; PC64LE-NEXT: nop 3567; PC64LE-NEXT: li 3, 48 3568; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3569; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3570; PC64LE-NEXT: addis 3, 2, .LCPI59_2@toc@ha 3571; PC64LE-NEXT: xxmrghd 63, 1, 0 3572; PC64LE-NEXT: lfd 1, .LCPI59_2@toc@l(3) 3573; PC64LE-NEXT: bl exp2 3574; PC64LE-NEXT: nop 3575; PC64LE-NEXT: li 3, 48 3576; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3577; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3578; PC64LE-NEXT: addis 3, 2, .LCPI59_3@toc@ha 3579; PC64LE-NEXT: lfd 1, .LCPI59_3@toc@l(3) 3580; PC64LE-NEXT: bl exp2 3581; PC64LE-NEXT: nop 3582; PC64LE-NEXT: li 3, 48 3583; PC64LE-NEXT: vmr 2, 31 3584; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3585; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3586; PC64LE-NEXT: li 3, 64 3587; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3588; PC64LE-NEXT: xxmrghd 35, 1, 0 3589; PC64LE-NEXT: addi 1, 1, 80 3590; PC64LE-NEXT: ld 0, 16(1) 3591; PC64LE-NEXT: mtlr 0 3592; PC64LE-NEXT: blr 3593; 3594; PC64LE9-LABEL: constrained_vector_exp2_v4f64: 3595; PC64LE9: # %bb.0: # %entry 3596; PC64LE9-NEXT: mflr 0 3597; PC64LE9-NEXT: std 0, 16(1) 3598; PC64LE9-NEXT: stdu 1, -64(1) 3599; PC64LE9-NEXT: addis 3, 2, .LCPI59_0@toc@ha 3600; PC64LE9-NEXT: lfd 1, .LCPI59_0@toc@l(3) 3601; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3602; PC64LE9-NEXT: bl exp2 3603; PC64LE9-NEXT: nop 3604; PC64LE9-NEXT: addis 3, 2, .LCPI59_1@toc@ha 3605; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3606; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3607; PC64LE9-NEXT: lfd 1, .LCPI59_1@toc@l(3) 3608; PC64LE9-NEXT: bl exp2 3609; PC64LE9-NEXT: nop 3610; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3611; PC64LE9-NEXT: addis 3, 2, .LCPI59_2@toc@ha 3612; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3613; PC64LE9-NEXT: xxmrghd 63, 1, 0 3614; PC64LE9-NEXT: lfd 1, .LCPI59_2@toc@l(3) 3615; PC64LE9-NEXT: bl exp2 3616; PC64LE9-NEXT: nop 3617; PC64LE9-NEXT: addis 3, 2, .LCPI59_3@toc@ha 3618; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3619; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3620; PC64LE9-NEXT: lfd 1, .LCPI59_3@toc@l(3) 3621; PC64LE9-NEXT: bl exp2 3622; PC64LE9-NEXT: nop 3623; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3624; PC64LE9-NEXT: vmr 2, 31 3625; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3626; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3627; PC64LE9-NEXT: xxmrghd 35, 1, 0 3628; PC64LE9-NEXT: addi 1, 1, 64 3629; PC64LE9-NEXT: ld 0, 16(1) 3630; PC64LE9-NEXT: mtlr 0 3631; PC64LE9-NEXT: blr 3632entry: 3633 %exp2 = call <4 x double> @llvm.experimental.constrained.exp2.v4f64( 3634 <4 x double> <double 42.1, double 42.2, 3635 double 42.3, double 42.4>, 3636 metadata !"round.dynamic", 3637 metadata !"fpexcept.strict") #1 3638 ret <4 x double> %exp2 3639} 3640 3641define <1 x float> @constrained_vector_log_v1f32() #0 { 3642; PC64LE-LABEL: constrained_vector_log_v1f32: 3643; PC64LE: # %bb.0: # %entry 3644; PC64LE-NEXT: mflr 0 3645; PC64LE-NEXT: std 0, 16(1) 3646; PC64LE-NEXT: stdu 1, -32(1) 3647; PC64LE-NEXT: addis 3, 2, .LCPI60_0@toc@ha 3648; PC64LE-NEXT: lfs 1, .LCPI60_0@toc@l(3) 3649; PC64LE-NEXT: bl logf 3650; PC64LE-NEXT: nop 3651; PC64LE-NEXT: addi 1, 1, 32 3652; PC64LE-NEXT: ld 0, 16(1) 3653; PC64LE-NEXT: mtlr 0 3654; PC64LE-NEXT: blr 3655; 3656; PC64LE9-LABEL: constrained_vector_log_v1f32: 3657; PC64LE9: # %bb.0: # %entry 3658; PC64LE9-NEXT: mflr 0 3659; PC64LE9-NEXT: std 0, 16(1) 3660; PC64LE9-NEXT: stdu 1, -32(1) 3661; PC64LE9-NEXT: addis 3, 2, .LCPI60_0@toc@ha 3662; PC64LE9-NEXT: lfs 1, .LCPI60_0@toc@l(3) 3663; PC64LE9-NEXT: bl logf 3664; PC64LE9-NEXT: nop 3665; PC64LE9-NEXT: addi 1, 1, 32 3666; PC64LE9-NEXT: ld 0, 16(1) 3667; PC64LE9-NEXT: mtlr 0 3668; PC64LE9-NEXT: blr 3669entry: 3670 %log = call <1 x float> @llvm.experimental.constrained.log.v1f32( 3671 <1 x float> <float 42.0>, 3672 metadata !"round.dynamic", 3673 metadata !"fpexcept.strict") #1 3674 ret <1 x float> %log 3675} 3676 3677define <2 x double> @constrained_vector_log_v2f64() #0 { 3678; PC64LE-LABEL: constrained_vector_log_v2f64: 3679; PC64LE: # %bb.0: # %entry 3680; PC64LE-NEXT: mflr 0 3681; PC64LE-NEXT: std 0, 16(1) 3682; PC64LE-NEXT: stdu 1, -64(1) 3683; PC64LE-NEXT: addis 3, 2, .LCPI61_0@toc@ha 3684; PC64LE-NEXT: lfd 1, .LCPI61_0@toc@l(3) 3685; PC64LE-NEXT: bl log 3686; PC64LE-NEXT: nop 3687; PC64LE-NEXT: li 3, 48 3688; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3689; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3690; PC64LE-NEXT: addis 3, 2, .LCPI61_1@toc@ha 3691; PC64LE-NEXT: lfs 1, .LCPI61_1@toc@l(3) 3692; PC64LE-NEXT: bl log 3693; PC64LE-NEXT: nop 3694; PC64LE-NEXT: li 3, 48 3695; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3696; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3697; PC64LE-NEXT: xxmrghd 34, 0, 1 3698; PC64LE-NEXT: addi 1, 1, 64 3699; PC64LE-NEXT: ld 0, 16(1) 3700; PC64LE-NEXT: mtlr 0 3701; PC64LE-NEXT: blr 3702; 3703; PC64LE9-LABEL: constrained_vector_log_v2f64: 3704; PC64LE9: # %bb.0: # %entry 3705; PC64LE9-NEXT: mflr 0 3706; PC64LE9-NEXT: std 0, 16(1) 3707; PC64LE9-NEXT: stdu 1, -48(1) 3708; PC64LE9-NEXT: addis 3, 2, .LCPI61_0@toc@ha 3709; PC64LE9-NEXT: lfd 1, .LCPI61_0@toc@l(3) 3710; PC64LE9-NEXT: bl log 3711; PC64LE9-NEXT: nop 3712; PC64LE9-NEXT: addis 3, 2, .LCPI61_1@toc@ha 3713; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3714; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3715; PC64LE9-NEXT: lfs 1, .LCPI61_1@toc@l(3) 3716; PC64LE9-NEXT: bl log 3717; PC64LE9-NEXT: nop 3718; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3719; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3720; PC64LE9-NEXT: xxmrghd 34, 0, 1 3721; PC64LE9-NEXT: addi 1, 1, 48 3722; PC64LE9-NEXT: ld 0, 16(1) 3723; PC64LE9-NEXT: mtlr 0 3724; PC64LE9-NEXT: blr 3725entry: 3726 %log = call <2 x double> @llvm.experimental.constrained.log.v2f64( 3727 <2 x double> <double 42.0, double 42.1>, 3728 metadata !"round.dynamic", 3729 metadata !"fpexcept.strict") #1 3730 ret <2 x double> %log 3731} 3732 3733define <3 x float> @constrained_vector_log_v3f32() #0 { 3734; PC64LE-LABEL: constrained_vector_log_v3f32: 3735; PC64LE: # %bb.0: # %entry 3736; PC64LE-NEXT: mflr 0 3737; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3738; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3739; PC64LE-NEXT: std 0, 16(1) 3740; PC64LE-NEXT: stdu 1, -48(1) 3741; PC64LE-NEXT: addis 3, 2, .LCPI62_0@toc@ha 3742; PC64LE-NEXT: lfs 1, .LCPI62_0@toc@l(3) 3743; PC64LE-NEXT: bl logf 3744; PC64LE-NEXT: nop 3745; PC64LE-NEXT: addis 3, 2, .LCPI62_1@toc@ha 3746; PC64LE-NEXT: fmr 31, 1 3747; PC64LE-NEXT: lfs 1, .LCPI62_1@toc@l(3) 3748; PC64LE-NEXT: bl logf 3749; PC64LE-NEXT: nop 3750; PC64LE-NEXT: addis 3, 2, .LCPI62_2@toc@ha 3751; PC64LE-NEXT: fmr 30, 1 3752; PC64LE-NEXT: lfs 1, .LCPI62_2@toc@l(3) 3753; PC64LE-NEXT: bl logf 3754; PC64LE-NEXT: nop 3755; PC64LE-NEXT: xscvdpspn 0, 30 3756; PC64LE-NEXT: addis 3, 2, .LCPI62_3@toc@ha 3757; PC64LE-NEXT: xscvdpspn 1, 1 3758; PC64LE-NEXT: addi 3, 3, .LCPI62_3@toc@l 3759; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 3760; PC64LE-NEXT: xscvdpspn 0, 31 3761; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 3762; PC64LE-NEXT: vmrghw 2, 2, 3 3763; PC64LE-NEXT: lvx 3, 0, 3 3764; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 3765; PC64LE-NEXT: vperm 2, 4, 2, 3 3766; PC64LE-NEXT: addi 1, 1, 48 3767; PC64LE-NEXT: ld 0, 16(1) 3768; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3769; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3770; PC64LE-NEXT: mtlr 0 3771; PC64LE-NEXT: blr 3772; 3773; PC64LE9-LABEL: constrained_vector_log_v3f32: 3774; PC64LE9: # %bb.0: # %entry 3775; PC64LE9-NEXT: mflr 0 3776; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 3777; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 3778; PC64LE9-NEXT: std 0, 16(1) 3779; PC64LE9-NEXT: stdu 1, -48(1) 3780; PC64LE9-NEXT: addis 3, 2, .LCPI62_0@toc@ha 3781; PC64LE9-NEXT: lfs 1, .LCPI62_0@toc@l(3) 3782; PC64LE9-NEXT: bl logf 3783; PC64LE9-NEXT: nop 3784; PC64LE9-NEXT: addis 3, 2, .LCPI62_1@toc@ha 3785; PC64LE9-NEXT: fmr 31, 1 3786; PC64LE9-NEXT: lfs 1, .LCPI62_1@toc@l(3) 3787; PC64LE9-NEXT: bl logf 3788; PC64LE9-NEXT: nop 3789; PC64LE9-NEXT: addis 3, 2, .LCPI62_2@toc@ha 3790; PC64LE9-NEXT: fmr 30, 1 3791; PC64LE9-NEXT: lfs 1, .LCPI62_2@toc@l(3) 3792; PC64LE9-NEXT: bl logf 3793; PC64LE9-NEXT: nop 3794; PC64LE9-NEXT: xscvdpspn 0, 1 3795; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 3796; PC64LE9-NEXT: xscvdpspn 0, 30 3797; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 3798; PC64LE9-NEXT: xscvdpspn 0, 31 3799; PC64LE9-NEXT: addis 3, 2, .LCPI62_3@toc@ha 3800; PC64LE9-NEXT: addi 3, 3, .LCPI62_3@toc@l 3801; PC64LE9-NEXT: vmrghw 2, 3, 2 3802; PC64LE9-NEXT: lxvx 35, 0, 3 3803; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 3804; PC64LE9-NEXT: vperm 2, 4, 2, 3 3805; PC64LE9-NEXT: addi 1, 1, 48 3806; PC64LE9-NEXT: ld 0, 16(1) 3807; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 3808; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 3809; PC64LE9-NEXT: mtlr 0 3810; PC64LE9-NEXT: blr 3811entry: 3812 %log = call <3 x float> @llvm.experimental.constrained.log.v3f32( 3813 <3 x float> <float 42.0, float 43.0, float 44.0>, 3814 metadata !"round.dynamic", 3815 metadata !"fpexcept.strict") #1 3816 ret <3 x float> %log 3817} 3818 3819define <3 x double> @constrained_vector_log_v3f64() #0 { 3820; PC64LE-LABEL: constrained_vector_log_v3f64: 3821; PC64LE: # %bb.0: # %entry 3822; PC64LE-NEXT: mflr 0 3823; PC64LE-NEXT: std 0, 16(1) 3824; PC64LE-NEXT: stdu 1, -80(1) 3825; PC64LE-NEXT: li 3, 64 3826; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3827; PC64LE-NEXT: addis 3, 2, .LCPI63_0@toc@ha 3828; PC64LE-NEXT: lfd 1, .LCPI63_0@toc@l(3) 3829; PC64LE-NEXT: bl log 3830; PC64LE-NEXT: nop 3831; PC64LE-NEXT: li 3, 48 3832; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3833; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3834; PC64LE-NEXT: addis 3, 2, .LCPI63_1@toc@ha 3835; PC64LE-NEXT: lfs 1, .LCPI63_1@toc@l(3) 3836; PC64LE-NEXT: bl log 3837; PC64LE-NEXT: nop 3838; PC64LE-NEXT: li 3, 48 3839; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3840; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3841; PC64LE-NEXT: addis 3, 2, .LCPI63_2@toc@ha 3842; PC64LE-NEXT: xxmrghd 63, 0, 1 3843; PC64LE-NEXT: lfd 1, .LCPI63_2@toc@l(3) 3844; PC64LE-NEXT: bl log 3845; PC64LE-NEXT: nop 3846; PC64LE-NEXT: xxswapd 0, 63 3847; PC64LE-NEXT: li 3, 64 3848; PC64LE-NEXT: xxlor 2, 63, 63 3849; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3850; PC64LE-NEXT: fmr 3, 1 3851; PC64LE-NEXT: fmr 1, 0 3852; PC64LE-NEXT: addi 1, 1, 80 3853; PC64LE-NEXT: ld 0, 16(1) 3854; PC64LE-NEXT: mtlr 0 3855; PC64LE-NEXT: blr 3856; 3857; PC64LE9-LABEL: constrained_vector_log_v3f64: 3858; PC64LE9: # %bb.0: # %entry 3859; PC64LE9-NEXT: mflr 0 3860; PC64LE9-NEXT: std 0, 16(1) 3861; PC64LE9-NEXT: stdu 1, -64(1) 3862; PC64LE9-NEXT: addis 3, 2, .LCPI63_0@toc@ha 3863; PC64LE9-NEXT: lfd 1, .LCPI63_0@toc@l(3) 3864; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3865; PC64LE9-NEXT: bl log 3866; PC64LE9-NEXT: nop 3867; PC64LE9-NEXT: addis 3, 2, .LCPI63_1@toc@ha 3868; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3869; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3870; PC64LE9-NEXT: lfs 1, .LCPI63_1@toc@l(3) 3871; PC64LE9-NEXT: bl log 3872; PC64LE9-NEXT: nop 3873; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3874; PC64LE9-NEXT: addis 3, 2, .LCPI63_2@toc@ha 3875; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3876; PC64LE9-NEXT: xxmrghd 63, 0, 1 3877; PC64LE9-NEXT: lfd 1, .LCPI63_2@toc@l(3) 3878; PC64LE9-NEXT: bl log 3879; PC64LE9-NEXT: nop 3880; PC64LE9-NEXT: fmr 3, 1 3881; PC64LE9-NEXT: xxswapd 1, 63 3882; PC64LE9-NEXT: xscpsgndp 2, 63, 63 3883; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3884; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3885; PC64LE9-NEXT: addi 1, 1, 64 3886; PC64LE9-NEXT: ld 0, 16(1) 3887; PC64LE9-NEXT: mtlr 0 3888; PC64LE9-NEXT: blr 3889entry: 3890 %log = call <3 x double> @llvm.experimental.constrained.log.v3f64( 3891 <3 x double> <double 42.0, double 42.1, double 42.2>, 3892 metadata !"round.dynamic", 3893 metadata !"fpexcept.strict") #1 3894 ret <3 x double> %log 3895} 3896 3897define <4 x double> @constrained_vector_log_v4f64() #0 { 3898; PC64LE-LABEL: constrained_vector_log_v4f64: 3899; PC64LE: # %bb.0: # %entry 3900; PC64LE-NEXT: mflr 0 3901; PC64LE-NEXT: std 0, 16(1) 3902; PC64LE-NEXT: stdu 1, -80(1) 3903; PC64LE-NEXT: li 3, 64 3904; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3905; PC64LE-NEXT: addis 3, 2, .LCPI64_0@toc@ha 3906; PC64LE-NEXT: lfd 1, .LCPI64_0@toc@l(3) 3907; PC64LE-NEXT: bl log 3908; PC64LE-NEXT: nop 3909; PC64LE-NEXT: li 3, 48 3910; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3911; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3912; PC64LE-NEXT: addis 3, 2, .LCPI64_1@toc@ha 3913; PC64LE-NEXT: lfd 1, .LCPI64_1@toc@l(3) 3914; PC64LE-NEXT: bl log 3915; PC64LE-NEXT: nop 3916; PC64LE-NEXT: li 3, 48 3917; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3918; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3919; PC64LE-NEXT: addis 3, 2, .LCPI64_2@toc@ha 3920; PC64LE-NEXT: xxmrghd 63, 1, 0 3921; PC64LE-NEXT: lfd 1, .LCPI64_2@toc@l(3) 3922; PC64LE-NEXT: bl log 3923; PC64LE-NEXT: nop 3924; PC64LE-NEXT: li 3, 48 3925; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3926; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 3927; PC64LE-NEXT: addis 3, 2, .LCPI64_3@toc@ha 3928; PC64LE-NEXT: lfs 1, .LCPI64_3@toc@l(3) 3929; PC64LE-NEXT: bl log 3930; PC64LE-NEXT: nop 3931; PC64LE-NEXT: li 3, 48 3932; PC64LE-NEXT: vmr 3, 31 3933; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3934; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 3935; PC64LE-NEXT: li 3, 64 3936; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3937; PC64LE-NEXT: xxmrghd 34, 0, 1 3938; PC64LE-NEXT: addi 1, 1, 80 3939; PC64LE-NEXT: ld 0, 16(1) 3940; PC64LE-NEXT: mtlr 0 3941; PC64LE-NEXT: blr 3942; 3943; PC64LE9-LABEL: constrained_vector_log_v4f64: 3944; PC64LE9: # %bb.0: # %entry 3945; PC64LE9-NEXT: mflr 0 3946; PC64LE9-NEXT: std 0, 16(1) 3947; PC64LE9-NEXT: stdu 1, -64(1) 3948; PC64LE9-NEXT: addis 3, 2, .LCPI64_0@toc@ha 3949; PC64LE9-NEXT: lfd 1, .LCPI64_0@toc@l(3) 3950; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3951; PC64LE9-NEXT: bl log 3952; PC64LE9-NEXT: nop 3953; PC64LE9-NEXT: addis 3, 2, .LCPI64_1@toc@ha 3954; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3955; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3956; PC64LE9-NEXT: lfd 1, .LCPI64_1@toc@l(3) 3957; PC64LE9-NEXT: bl log 3958; PC64LE9-NEXT: nop 3959; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3960; PC64LE9-NEXT: addis 3, 2, .LCPI64_2@toc@ha 3961; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3962; PC64LE9-NEXT: xxmrghd 63, 1, 0 3963; PC64LE9-NEXT: lfd 1, .LCPI64_2@toc@l(3) 3964; PC64LE9-NEXT: bl log 3965; PC64LE9-NEXT: nop 3966; PC64LE9-NEXT: addis 3, 2, .LCPI64_3@toc@ha 3967; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3968; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 3969; PC64LE9-NEXT: lfs 1, .LCPI64_3@toc@l(3) 3970; PC64LE9-NEXT: bl log 3971; PC64LE9-NEXT: nop 3972; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 3973; PC64LE9-NEXT: vmr 3, 31 3974; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3975; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3976; PC64LE9-NEXT: xxmrghd 34, 0, 1 3977; PC64LE9-NEXT: addi 1, 1, 64 3978; PC64LE9-NEXT: ld 0, 16(1) 3979; PC64LE9-NEXT: mtlr 0 3980; PC64LE9-NEXT: blr 3981entry: 3982 %log = call <4 x double> @llvm.experimental.constrained.log.v4f64( 3983 <4 x double> <double 42.0, double 42.1, 3984 double 42.2, double 42.3>, 3985 metadata !"round.dynamic", 3986 metadata !"fpexcept.strict") #1 3987 ret <4 x double> %log 3988} 3989 3990define <1 x float> @constrained_vector_log10_v1f32() #0 { 3991; PC64LE-LABEL: constrained_vector_log10_v1f32: 3992; PC64LE: # %bb.0: # %entry 3993; PC64LE-NEXT: mflr 0 3994; PC64LE-NEXT: std 0, 16(1) 3995; PC64LE-NEXT: stdu 1, -32(1) 3996; PC64LE-NEXT: addis 3, 2, .LCPI65_0@toc@ha 3997; PC64LE-NEXT: lfs 1, .LCPI65_0@toc@l(3) 3998; PC64LE-NEXT: bl log10f 3999; PC64LE-NEXT: nop 4000; PC64LE-NEXT: addi 1, 1, 32 4001; PC64LE-NEXT: ld 0, 16(1) 4002; PC64LE-NEXT: mtlr 0 4003; PC64LE-NEXT: blr 4004; 4005; PC64LE9-LABEL: constrained_vector_log10_v1f32: 4006; PC64LE9: # %bb.0: # %entry 4007; PC64LE9-NEXT: mflr 0 4008; PC64LE9-NEXT: std 0, 16(1) 4009; PC64LE9-NEXT: stdu 1, -32(1) 4010; PC64LE9-NEXT: addis 3, 2, .LCPI65_0@toc@ha 4011; PC64LE9-NEXT: lfs 1, .LCPI65_0@toc@l(3) 4012; PC64LE9-NEXT: bl log10f 4013; PC64LE9-NEXT: nop 4014; PC64LE9-NEXT: addi 1, 1, 32 4015; PC64LE9-NEXT: ld 0, 16(1) 4016; PC64LE9-NEXT: mtlr 0 4017; PC64LE9-NEXT: blr 4018entry: 4019 %log10 = call <1 x float> @llvm.experimental.constrained.log10.v1f32( 4020 <1 x float> <float 42.0>, 4021 metadata !"round.dynamic", 4022 metadata !"fpexcept.strict") #1 4023 ret <1 x float> %log10 4024} 4025 4026define <2 x double> @constrained_vector_log10_v2f64() #0 { 4027; PC64LE-LABEL: constrained_vector_log10_v2f64: 4028; PC64LE: # %bb.0: # %entry 4029; PC64LE-NEXT: mflr 0 4030; PC64LE-NEXT: std 0, 16(1) 4031; PC64LE-NEXT: stdu 1, -64(1) 4032; PC64LE-NEXT: addis 3, 2, .LCPI66_0@toc@ha 4033; PC64LE-NEXT: lfd 1, .LCPI66_0@toc@l(3) 4034; PC64LE-NEXT: bl log10 4035; PC64LE-NEXT: nop 4036; PC64LE-NEXT: li 3, 48 4037; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4038; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 4039; PC64LE-NEXT: addis 3, 2, .LCPI66_1@toc@ha 4040; PC64LE-NEXT: lfs 1, .LCPI66_1@toc@l(3) 4041; PC64LE-NEXT: bl log10 4042; PC64LE-NEXT: nop 4043; PC64LE-NEXT: li 3, 48 4044; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4045; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 4046; PC64LE-NEXT: xxmrghd 34, 0, 1 4047; PC64LE-NEXT: addi 1, 1, 64 4048; PC64LE-NEXT: ld 0, 16(1) 4049; PC64LE-NEXT: mtlr 0 4050; PC64LE-NEXT: blr 4051; 4052; PC64LE9-LABEL: constrained_vector_log10_v2f64: 4053; PC64LE9: # %bb.0: # %entry 4054; PC64LE9-NEXT: mflr 0 4055; PC64LE9-NEXT: std 0, 16(1) 4056; PC64LE9-NEXT: stdu 1, -48(1) 4057; PC64LE9-NEXT: addis 3, 2, .LCPI66_0@toc@ha 4058; PC64LE9-NEXT: lfd 1, .LCPI66_0@toc@l(3) 4059; PC64LE9-NEXT: bl log10 4060; PC64LE9-NEXT: nop 4061; PC64LE9-NEXT: addis 3, 2, .LCPI66_1@toc@ha 4062; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4063; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 4064; PC64LE9-NEXT: lfs 1, .LCPI66_1@toc@l(3) 4065; PC64LE9-NEXT: bl log10 4066; PC64LE9-NEXT: nop 4067; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 4068; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4069; PC64LE9-NEXT: xxmrghd 34, 0, 1 4070; PC64LE9-NEXT: addi 1, 1, 48 4071; PC64LE9-NEXT: ld 0, 16(1) 4072; PC64LE9-NEXT: mtlr 0 4073; PC64LE9-NEXT: blr 4074entry: 4075 %log10 = call <2 x double> @llvm.experimental.constrained.log10.v2f64( 4076 <2 x double> <double 42.0, double 42.1>, 4077 metadata !"round.dynamic", 4078 metadata !"fpexcept.strict") #1 4079 ret <2 x double> %log10 4080} 4081 4082define <3 x float> @constrained_vector_log10_v3f32() #0 { 4083; PC64LE-LABEL: constrained_vector_log10_v3f32: 4084; PC64LE: # %bb.0: # %entry 4085; PC64LE-NEXT: mflr 0 4086; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 4087; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 4088; PC64LE-NEXT: std 0, 16(1) 4089; PC64LE-NEXT: stdu 1, -48(1) 4090; PC64LE-NEXT: addis 3, 2, .LCPI67_0@toc@ha 4091; PC64LE-NEXT: lfs 1, .LCPI67_0@toc@l(3) 4092; PC64LE-NEXT: bl log10f 4093; PC64LE-NEXT: nop 4094; PC64LE-NEXT: addis 3, 2, .LCPI67_1@toc@ha 4095; PC64LE-NEXT: fmr 31, 1 4096; PC64LE-NEXT: lfs 1, .LCPI67_1@toc@l(3) 4097; PC64LE-NEXT: bl log10f 4098; PC64LE-NEXT: nop 4099; PC64LE-NEXT: addis 3, 2, .LCPI67_2@toc@ha 4100; PC64LE-NEXT: fmr 30, 1 4101; PC64LE-NEXT: lfs 1, .LCPI67_2@toc@l(3) 4102; PC64LE-NEXT: bl log10f 4103; PC64LE-NEXT: nop 4104; PC64LE-NEXT: xscvdpspn 0, 30 4105; PC64LE-NEXT: addis 3, 2, .LCPI67_3@toc@ha 4106; PC64LE-NEXT: xscvdpspn 1, 1 4107; PC64LE-NEXT: addi 3, 3, .LCPI67_3@toc@l 4108; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 4109; PC64LE-NEXT: xscvdpspn 0, 31 4110; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 4111; PC64LE-NEXT: vmrghw 2, 2, 3 4112; PC64LE-NEXT: lvx 3, 0, 3 4113; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 4114; PC64LE-NEXT: vperm 2, 4, 2, 3 4115; PC64LE-NEXT: addi 1, 1, 48 4116; PC64LE-NEXT: ld 0, 16(1) 4117; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 4118; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 4119; PC64LE-NEXT: mtlr 0 4120; PC64LE-NEXT: blr 4121; 4122; PC64LE9-LABEL: constrained_vector_log10_v3f32: 4123; PC64LE9: # %bb.0: # %entry 4124; PC64LE9-NEXT: mflr 0 4125; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 4126; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 4127; PC64LE9-NEXT: std 0, 16(1) 4128; PC64LE9-NEXT: stdu 1, -48(1) 4129; PC64LE9-NEXT: addis 3, 2, .LCPI67_0@toc@ha 4130; PC64LE9-NEXT: lfs 1, .LCPI67_0@toc@l(3) 4131; PC64LE9-NEXT: bl log10f 4132; PC64LE9-NEXT: nop 4133; PC64LE9-NEXT: addis 3, 2, .LCPI67_1@toc@ha 4134; PC64LE9-NEXT: fmr 31, 1 4135; PC64LE9-NEXT: lfs 1, .LCPI67_1@toc@l(3) 4136; PC64LE9-NEXT: bl log10f 4137; PC64LE9-NEXT: nop 4138; PC64LE9-NEXT: addis 3, 2, .LCPI67_2@toc@ha 4139; PC64LE9-NEXT: fmr 30, 1 4140; PC64LE9-NEXT: lfs 1, .LCPI67_2@toc@l(3) 4141; PC64LE9-NEXT: bl log10f 4142; PC64LE9-NEXT: nop 4143; PC64LE9-NEXT: xscvdpspn 0, 1 4144; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 4145; PC64LE9-NEXT: xscvdpspn 0, 30 4146; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 4147; PC64LE9-NEXT: xscvdpspn 0, 31 4148; PC64LE9-NEXT: addis 3, 2, .LCPI67_3@toc@ha 4149; PC64LE9-NEXT: addi 3, 3, .LCPI67_3@toc@l 4150; PC64LE9-NEXT: vmrghw 2, 3, 2 4151; PC64LE9-NEXT: lxvx 35, 0, 3 4152; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 4153; PC64LE9-NEXT: vperm 2, 4, 2, 3 4154; PC64LE9-NEXT: addi 1, 1, 48 4155; PC64LE9-NEXT: ld 0, 16(1) 4156; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 4157; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 4158; PC64LE9-NEXT: mtlr 0 4159; PC64LE9-NEXT: blr 4160entry: 4161 %log10 = call <3 x float> @llvm.experimental.constrained.log10.v3f32( 4162 <3 x float> <float 42.0, float 43.0, float 44.0>, 4163 metadata !"round.dynamic", 4164 metadata !"fpexcept.strict") #1 4165 ret <3 x float> %log10 4166} 4167 4168define <3 x double> @constrained_vector_log10_v3f64() #0 { 4169; PC64LE-LABEL: constrained_vector_log10_v3f64: 4170; PC64LE: # %bb.0: # %entry 4171; PC64LE-NEXT: mflr 0 4172; PC64LE-NEXT: std 0, 16(1) 4173; PC64LE-NEXT: stdu 1, -80(1) 4174; PC64LE-NEXT: li 3, 64 4175; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4176; PC64LE-NEXT: addis 3, 2, .LCPI68_0@toc@ha 4177; PC64LE-NEXT: lfd 1, .LCPI68_0@toc@l(3) 4178; PC64LE-NEXT: bl log10 4179; PC64LE-NEXT: nop 4180; PC64LE-NEXT: li 3, 48 4181; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4182; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 4183; PC64LE-NEXT: addis 3, 2, .LCPI68_1@toc@ha 4184; PC64LE-NEXT: lfs 1, .LCPI68_1@toc@l(3) 4185; PC64LE-NEXT: bl log10 4186; PC64LE-NEXT: nop 4187; PC64LE-NEXT: li 3, 48 4188; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4189; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 4190; PC64LE-NEXT: addis 3, 2, .LCPI68_2@toc@ha 4191; PC64LE-NEXT: xxmrghd 63, 0, 1 4192; PC64LE-NEXT: lfd 1, .LCPI68_2@toc@l(3) 4193; PC64LE-NEXT: bl log10 4194; PC64LE-NEXT: nop 4195; PC64LE-NEXT: xxswapd 0, 63 4196; PC64LE-NEXT: li 3, 64 4197; PC64LE-NEXT: xxlor 2, 63, 63 4198; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4199; PC64LE-NEXT: fmr 3, 1 4200; PC64LE-NEXT: fmr 1, 0 4201; PC64LE-NEXT: addi 1, 1, 80 4202; PC64LE-NEXT: ld 0, 16(1) 4203; PC64LE-NEXT: mtlr 0 4204; PC64LE-NEXT: blr 4205; 4206; PC64LE9-LABEL: constrained_vector_log10_v3f64: 4207; PC64LE9: # %bb.0: # %entry 4208; PC64LE9-NEXT: mflr 0 4209; PC64LE9-NEXT: std 0, 16(1) 4210; PC64LE9-NEXT: stdu 1, -64(1) 4211; PC64LE9-NEXT: addis 3, 2, .LCPI68_0@toc@ha 4212; PC64LE9-NEXT: lfd 1, .LCPI68_0@toc@l(3) 4213; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 4214; PC64LE9-NEXT: bl log10 4215; PC64LE9-NEXT: nop 4216; PC64LE9-NEXT: addis 3, 2, .LCPI68_1@toc@ha 4217; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4218; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 4219; PC64LE9-NEXT: lfs 1, .LCPI68_1@toc@l(3) 4220; PC64LE9-NEXT: bl log10 4221; PC64LE9-NEXT: nop 4222; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 4223; PC64LE9-NEXT: addis 3, 2, .LCPI68_2@toc@ha 4224; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4225; PC64LE9-NEXT: xxmrghd 63, 0, 1 4226; PC64LE9-NEXT: lfd 1, .LCPI68_2@toc@l(3) 4227; PC64LE9-NEXT: bl log10 4228; PC64LE9-NEXT: nop 4229; PC64LE9-NEXT: fmr 3, 1 4230; PC64LE9-NEXT: xxswapd 1, 63 4231; PC64LE9-NEXT: xscpsgndp 2, 63, 63 4232; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 4233; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4234; PC64LE9-NEXT: addi 1, 1, 64 4235; PC64LE9-NEXT: ld 0, 16(1) 4236; PC64LE9-NEXT: mtlr 0 4237; PC64LE9-NEXT: blr 4238entry: 4239 %log10 = call <3 x double> @llvm.experimental.constrained.log10.v3f64( 4240 <3 x double> <double 42.0, double 42.1, double 42.2>, 4241 metadata !"round.dynamic", 4242 metadata !"fpexcept.strict") #1 4243 ret <3 x double> %log10 4244} 4245 4246define <4 x double> @constrained_vector_log10_v4f64() #0 { 4247; PC64LE-LABEL: constrained_vector_log10_v4f64: 4248; PC64LE: # %bb.0: # %entry 4249; PC64LE-NEXT: mflr 0 4250; PC64LE-NEXT: std 0, 16(1) 4251; PC64LE-NEXT: stdu 1, -80(1) 4252; PC64LE-NEXT: li 3, 64 4253; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4254; PC64LE-NEXT: addis 3, 2, .LCPI69_0@toc@ha 4255; PC64LE-NEXT: lfd 1, .LCPI69_0@toc@l(3) 4256; PC64LE-NEXT: bl log10 4257; PC64LE-NEXT: nop 4258; PC64LE-NEXT: li 3, 48 4259; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4260; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 4261; PC64LE-NEXT: addis 3, 2, .LCPI69_1@toc@ha 4262; PC64LE-NEXT: lfd 1, .LCPI69_1@toc@l(3) 4263; PC64LE-NEXT: bl log10 4264; PC64LE-NEXT: nop 4265; PC64LE-NEXT: li 3, 48 4266; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4267; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 4268; PC64LE-NEXT: addis 3, 2, .LCPI69_2@toc@ha 4269; PC64LE-NEXT: xxmrghd 63, 1, 0 4270; PC64LE-NEXT: lfd 1, .LCPI69_2@toc@l(3) 4271; PC64LE-NEXT: bl log10 4272; PC64LE-NEXT: nop 4273; PC64LE-NEXT: li 3, 48 4274; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4275; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 4276; PC64LE-NEXT: addis 3, 2, .LCPI69_3@toc@ha 4277; PC64LE-NEXT: lfs 1, .LCPI69_3@toc@l(3) 4278; PC64LE-NEXT: bl log10 4279; PC64LE-NEXT: nop 4280; PC64LE-NEXT: li 3, 48 4281; PC64LE-NEXT: vmr 3, 31 4282; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4283; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 4284; PC64LE-NEXT: li 3, 64 4285; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4286; PC64LE-NEXT: xxmrghd 34, 0, 1 4287; PC64LE-NEXT: addi 1, 1, 80 4288; PC64LE-NEXT: ld 0, 16(1) 4289; PC64LE-NEXT: mtlr 0 4290; PC64LE-NEXT: blr 4291; 4292; PC64LE9-LABEL: constrained_vector_log10_v4f64: 4293; PC64LE9: # %bb.0: # %entry 4294; PC64LE9-NEXT: mflr 0 4295; PC64LE9-NEXT: std 0, 16(1) 4296; PC64LE9-NEXT: stdu 1, -64(1) 4297; PC64LE9-NEXT: addis 3, 2, .LCPI69_0@toc@ha 4298; PC64LE9-NEXT: lfd 1, .LCPI69_0@toc@l(3) 4299; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 4300; PC64LE9-NEXT: bl log10 4301; PC64LE9-NEXT: nop 4302; PC64LE9-NEXT: addis 3, 2, .LCPI69_1@toc@ha 4303; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4304; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 4305; PC64LE9-NEXT: lfd 1, .LCPI69_1@toc@l(3) 4306; PC64LE9-NEXT: bl log10 4307; PC64LE9-NEXT: nop 4308; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 4309; PC64LE9-NEXT: addis 3, 2, .LCPI69_2@toc@ha 4310; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4311; PC64LE9-NEXT: xxmrghd 63, 1, 0 4312; PC64LE9-NEXT: lfd 1, .LCPI69_2@toc@l(3) 4313; PC64LE9-NEXT: bl log10 4314; PC64LE9-NEXT: nop 4315; PC64LE9-NEXT: addis 3, 2, .LCPI69_3@toc@ha 4316; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4317; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 4318; PC64LE9-NEXT: lfs 1, .LCPI69_3@toc@l(3) 4319; PC64LE9-NEXT: bl log10 4320; PC64LE9-NEXT: nop 4321; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 4322; PC64LE9-NEXT: vmr 3, 31 4323; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 4324; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4325; PC64LE9-NEXT: xxmrghd 34, 0, 1 4326; PC64LE9-NEXT: addi 1, 1, 64 4327; PC64LE9-NEXT: ld 0, 16(1) 4328; PC64LE9-NEXT: mtlr 0 4329; PC64LE9-NEXT: blr 4330entry: 4331 %log10 = call <4 x double> @llvm.experimental.constrained.log10.v4f64( 4332 <4 x double> <double 42.0, double 42.1, 4333 double 42.2, double 42.3>, 4334 metadata !"round.dynamic", 4335 metadata !"fpexcept.strict") #1 4336 ret <4 x double> %log10 4337} 4338 4339define <1 x float> @constrained_vector_log2_v1f32() #0 { 4340; PC64LE-LABEL: constrained_vector_log2_v1f32: 4341; PC64LE: # %bb.0: # %entry 4342; PC64LE-NEXT: mflr 0 4343; PC64LE-NEXT: std 0, 16(1) 4344; PC64LE-NEXT: stdu 1, -32(1) 4345; PC64LE-NEXT: addis 3, 2, .LCPI70_0@toc@ha 4346; PC64LE-NEXT: lfs 1, .LCPI70_0@toc@l(3) 4347; PC64LE-NEXT: bl log2f 4348; PC64LE-NEXT: nop 4349; PC64LE-NEXT: addi 1, 1, 32 4350; PC64LE-NEXT: ld 0, 16(1) 4351; PC64LE-NEXT: mtlr 0 4352; PC64LE-NEXT: blr 4353; 4354; PC64LE9-LABEL: constrained_vector_log2_v1f32: 4355; PC64LE9: # %bb.0: # %entry 4356; PC64LE9-NEXT: mflr 0 4357; PC64LE9-NEXT: std 0, 16(1) 4358; PC64LE9-NEXT: stdu 1, -32(1) 4359; PC64LE9-NEXT: addis 3, 2, .LCPI70_0@toc@ha 4360; PC64LE9-NEXT: lfs 1, .LCPI70_0@toc@l(3) 4361; PC64LE9-NEXT: bl log2f 4362; PC64LE9-NEXT: nop 4363; PC64LE9-NEXT: addi 1, 1, 32 4364; PC64LE9-NEXT: ld 0, 16(1) 4365; PC64LE9-NEXT: mtlr 0 4366; PC64LE9-NEXT: blr 4367entry: 4368 %log2 = call <1 x float> @llvm.experimental.constrained.log2.v1f32( 4369 <1 x float> <float 42.0>, 4370 metadata !"round.dynamic", 4371 metadata !"fpexcept.strict") #1 4372 ret <1 x float> %log2 4373} 4374 4375define <2 x double> @constrained_vector_log2_v2f64() #0 { 4376; PC64LE-LABEL: constrained_vector_log2_v2f64: 4377; PC64LE: # %bb.0: # %entry 4378; PC64LE-NEXT: mflr 0 4379; PC64LE-NEXT: std 0, 16(1) 4380; PC64LE-NEXT: stdu 1, -64(1) 4381; PC64LE-NEXT: addis 3, 2, .LCPI71_0@toc@ha 4382; PC64LE-NEXT: lfd 1, .LCPI71_0@toc@l(3) 4383; PC64LE-NEXT: bl log2 4384; PC64LE-NEXT: nop 4385; PC64LE-NEXT: li 3, 48 4386; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4387; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 4388; PC64LE-NEXT: addis 3, 2, .LCPI71_1@toc@ha 4389; PC64LE-NEXT: lfs 1, .LCPI71_1@toc@l(3) 4390; PC64LE-NEXT: bl log2 4391; PC64LE-NEXT: nop 4392; PC64LE-NEXT: li 3, 48 4393; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4394; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 4395; PC64LE-NEXT: xxmrghd 34, 0, 1 4396; PC64LE-NEXT: addi 1, 1, 64 4397; PC64LE-NEXT: ld 0, 16(1) 4398; PC64LE-NEXT: mtlr 0 4399; PC64LE-NEXT: blr 4400; 4401; PC64LE9-LABEL: constrained_vector_log2_v2f64: 4402; PC64LE9: # %bb.0: # %entry 4403; PC64LE9-NEXT: mflr 0 4404; PC64LE9-NEXT: std 0, 16(1) 4405; PC64LE9-NEXT: stdu 1, -48(1) 4406; PC64LE9-NEXT: addis 3, 2, .LCPI71_0@toc@ha 4407; PC64LE9-NEXT: lfd 1, .LCPI71_0@toc@l(3) 4408; PC64LE9-NEXT: bl log2 4409; PC64LE9-NEXT: nop 4410; PC64LE9-NEXT: addis 3, 2, .LCPI71_1@toc@ha 4411; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4412; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 4413; PC64LE9-NEXT: lfs 1, .LCPI71_1@toc@l(3) 4414; PC64LE9-NEXT: bl log2 4415; PC64LE9-NEXT: nop 4416; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 4417; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4418; PC64LE9-NEXT: xxmrghd 34, 0, 1 4419; PC64LE9-NEXT: addi 1, 1, 48 4420; PC64LE9-NEXT: ld 0, 16(1) 4421; PC64LE9-NEXT: mtlr 0 4422; PC64LE9-NEXT: blr 4423entry: 4424 %log2 = call <2 x double> @llvm.experimental.constrained.log2.v2f64( 4425 <2 x double> <double 42.0, double 42.1>, 4426 metadata !"round.dynamic", 4427 metadata !"fpexcept.strict") #1 4428 ret <2 x double> %log2 4429} 4430 4431define <3 x float> @constrained_vector_log2_v3f32() #0 { 4432; PC64LE-LABEL: constrained_vector_log2_v3f32: 4433; PC64LE: # %bb.0: # %entry 4434; PC64LE-NEXT: mflr 0 4435; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 4436; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 4437; PC64LE-NEXT: std 0, 16(1) 4438; PC64LE-NEXT: stdu 1, -48(1) 4439; PC64LE-NEXT: addis 3, 2, .LCPI72_0@toc@ha 4440; PC64LE-NEXT: lfs 1, .LCPI72_0@toc@l(3) 4441; PC64LE-NEXT: bl log2f 4442; PC64LE-NEXT: nop 4443; PC64LE-NEXT: addis 3, 2, .LCPI72_1@toc@ha 4444; PC64LE-NEXT: fmr 31, 1 4445; PC64LE-NEXT: lfs 1, .LCPI72_1@toc@l(3) 4446; PC64LE-NEXT: bl log2f 4447; PC64LE-NEXT: nop 4448; PC64LE-NEXT: addis 3, 2, .LCPI72_2@toc@ha 4449; PC64LE-NEXT: fmr 30, 1 4450; PC64LE-NEXT: lfs 1, .LCPI72_2@toc@l(3) 4451; PC64LE-NEXT: bl log2f 4452; PC64LE-NEXT: nop 4453; PC64LE-NEXT: xscvdpspn 0, 30 4454; PC64LE-NEXT: addis 3, 2, .LCPI72_3@toc@ha 4455; PC64LE-NEXT: xscvdpspn 1, 1 4456; PC64LE-NEXT: addi 3, 3, .LCPI72_3@toc@l 4457; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 4458; PC64LE-NEXT: xscvdpspn 0, 31 4459; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 4460; PC64LE-NEXT: vmrghw 2, 2, 3 4461; PC64LE-NEXT: lvx 3, 0, 3 4462; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 4463; PC64LE-NEXT: vperm 2, 4, 2, 3 4464; PC64LE-NEXT: addi 1, 1, 48 4465; PC64LE-NEXT: ld 0, 16(1) 4466; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 4467; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 4468; PC64LE-NEXT: mtlr 0 4469; PC64LE-NEXT: blr 4470; 4471; PC64LE9-LABEL: constrained_vector_log2_v3f32: 4472; PC64LE9: # %bb.0: # %entry 4473; PC64LE9-NEXT: mflr 0 4474; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 4475; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 4476; PC64LE9-NEXT: std 0, 16(1) 4477; PC64LE9-NEXT: stdu 1, -48(1) 4478; PC64LE9-NEXT: addis 3, 2, .LCPI72_0@toc@ha 4479; PC64LE9-NEXT: lfs 1, .LCPI72_0@toc@l(3) 4480; PC64LE9-NEXT: bl log2f 4481; PC64LE9-NEXT: nop 4482; PC64LE9-NEXT: addis 3, 2, .LCPI72_1@toc@ha 4483; PC64LE9-NEXT: fmr 31, 1 4484; PC64LE9-NEXT: lfs 1, .LCPI72_1@toc@l(3) 4485; PC64LE9-NEXT: bl log2f 4486; PC64LE9-NEXT: nop 4487; PC64LE9-NEXT: addis 3, 2, .LCPI72_2@toc@ha 4488; PC64LE9-NEXT: fmr 30, 1 4489; PC64LE9-NEXT: lfs 1, .LCPI72_2@toc@l(3) 4490; PC64LE9-NEXT: bl log2f 4491; PC64LE9-NEXT: nop 4492; PC64LE9-NEXT: xscvdpspn 0, 1 4493; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 4494; PC64LE9-NEXT: xscvdpspn 0, 30 4495; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 4496; PC64LE9-NEXT: xscvdpspn 0, 31 4497; PC64LE9-NEXT: addis 3, 2, .LCPI72_3@toc@ha 4498; PC64LE9-NEXT: addi 3, 3, .LCPI72_3@toc@l 4499; PC64LE9-NEXT: vmrghw 2, 3, 2 4500; PC64LE9-NEXT: lxvx 35, 0, 3 4501; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 4502; PC64LE9-NEXT: vperm 2, 4, 2, 3 4503; PC64LE9-NEXT: addi 1, 1, 48 4504; PC64LE9-NEXT: ld 0, 16(1) 4505; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 4506; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 4507; PC64LE9-NEXT: mtlr 0 4508; PC64LE9-NEXT: blr 4509entry: 4510 %log2 = call <3 x float> @llvm.experimental.constrained.log2.v3f32( 4511 <3 x float> <float 42.0, float 43.0, float 44.0>, 4512 metadata !"round.dynamic", 4513 metadata !"fpexcept.strict") #1 4514 ret <3 x float> %log2 4515} 4516 4517define <3 x double> @constrained_vector_log2_v3f64() #0 { 4518; PC64LE-LABEL: constrained_vector_log2_v3f64: 4519; PC64LE: # %bb.0: # %entry 4520; PC64LE-NEXT: mflr 0 4521; PC64LE-NEXT: std 0, 16(1) 4522; PC64LE-NEXT: stdu 1, -80(1) 4523; PC64LE-NEXT: li 3, 64 4524; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4525; PC64LE-NEXT: addis 3, 2, .LCPI73_0@toc@ha 4526; PC64LE-NEXT: lfd 1, .LCPI73_0@toc@l(3) 4527; PC64LE-NEXT: bl log2 4528; PC64LE-NEXT: nop 4529; PC64LE-NEXT: li 3, 48 4530; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4531; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 4532; PC64LE-NEXT: addis 3, 2, .LCPI73_1@toc@ha 4533; PC64LE-NEXT: lfs 1, .LCPI73_1@toc@l(3) 4534; PC64LE-NEXT: bl log2 4535; PC64LE-NEXT: nop 4536; PC64LE-NEXT: li 3, 48 4537; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4538; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 4539; PC64LE-NEXT: addis 3, 2, .LCPI73_2@toc@ha 4540; PC64LE-NEXT: xxmrghd 63, 0, 1 4541; PC64LE-NEXT: lfd 1, .LCPI73_2@toc@l(3) 4542; PC64LE-NEXT: bl log2 4543; PC64LE-NEXT: nop 4544; PC64LE-NEXT: xxswapd 0, 63 4545; PC64LE-NEXT: li 3, 64 4546; PC64LE-NEXT: xxlor 2, 63, 63 4547; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4548; PC64LE-NEXT: fmr 3, 1 4549; PC64LE-NEXT: fmr 1, 0 4550; PC64LE-NEXT: addi 1, 1, 80 4551; PC64LE-NEXT: ld 0, 16(1) 4552; PC64LE-NEXT: mtlr 0 4553; PC64LE-NEXT: blr 4554; 4555; PC64LE9-LABEL: constrained_vector_log2_v3f64: 4556; PC64LE9: # %bb.0: # %entry 4557; PC64LE9-NEXT: mflr 0 4558; PC64LE9-NEXT: std 0, 16(1) 4559; PC64LE9-NEXT: stdu 1, -64(1) 4560; PC64LE9-NEXT: addis 3, 2, .LCPI73_0@toc@ha 4561; PC64LE9-NEXT: lfd 1, .LCPI73_0@toc@l(3) 4562; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 4563; PC64LE9-NEXT: bl log2 4564; PC64LE9-NEXT: nop 4565; PC64LE9-NEXT: addis 3, 2, .LCPI73_1@toc@ha 4566; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4567; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 4568; PC64LE9-NEXT: lfs 1, .LCPI73_1@toc@l(3) 4569; PC64LE9-NEXT: bl log2 4570; PC64LE9-NEXT: nop 4571; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 4572; PC64LE9-NEXT: addis 3, 2, .LCPI73_2@toc@ha 4573; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4574; PC64LE9-NEXT: xxmrghd 63, 0, 1 4575; PC64LE9-NEXT: lfd 1, .LCPI73_2@toc@l(3) 4576; PC64LE9-NEXT: bl log2 4577; PC64LE9-NEXT: nop 4578; PC64LE9-NEXT: fmr 3, 1 4579; PC64LE9-NEXT: xxswapd 1, 63 4580; PC64LE9-NEXT: xscpsgndp 2, 63, 63 4581; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 4582; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4583; PC64LE9-NEXT: addi 1, 1, 64 4584; PC64LE9-NEXT: ld 0, 16(1) 4585; PC64LE9-NEXT: mtlr 0 4586; PC64LE9-NEXT: blr 4587entry: 4588 %log2 = call <3 x double> @llvm.experimental.constrained.log2.v3f64( 4589 <3 x double> <double 42.0, double 42.1, double 42.2>, 4590 metadata !"round.dynamic", 4591 metadata !"fpexcept.strict") #1 4592 ret <3 x double> %log2 4593} 4594 4595define <4 x double> @constrained_vector_log2_v4f64() #0 { 4596; PC64LE-LABEL: constrained_vector_log2_v4f64: 4597; PC64LE: # %bb.0: # %entry 4598; PC64LE-NEXT: mflr 0 4599; PC64LE-NEXT: std 0, 16(1) 4600; PC64LE-NEXT: stdu 1, -80(1) 4601; PC64LE-NEXT: li 3, 64 4602; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4603; PC64LE-NEXT: addis 3, 2, .LCPI74_0@toc@ha 4604; PC64LE-NEXT: lfd 1, .LCPI74_0@toc@l(3) 4605; PC64LE-NEXT: bl log2 4606; PC64LE-NEXT: nop 4607; PC64LE-NEXT: li 3, 48 4608; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4609; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 4610; PC64LE-NEXT: addis 3, 2, .LCPI74_1@toc@ha 4611; PC64LE-NEXT: lfd 1, .LCPI74_1@toc@l(3) 4612; PC64LE-NEXT: bl log2 4613; PC64LE-NEXT: nop 4614; PC64LE-NEXT: li 3, 48 4615; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4616; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 4617; PC64LE-NEXT: addis 3, 2, .LCPI74_2@toc@ha 4618; PC64LE-NEXT: xxmrghd 63, 1, 0 4619; PC64LE-NEXT: lfd 1, .LCPI74_2@toc@l(3) 4620; PC64LE-NEXT: bl log2 4621; PC64LE-NEXT: nop 4622; PC64LE-NEXT: li 3, 48 4623; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4624; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill 4625; PC64LE-NEXT: addis 3, 2, .LCPI74_3@toc@ha 4626; PC64LE-NEXT: lfs 1, .LCPI74_3@toc@l(3) 4627; PC64LE-NEXT: bl log2 4628; PC64LE-NEXT: nop 4629; PC64LE-NEXT: li 3, 48 4630; PC64LE-NEXT: vmr 3, 31 4631; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4632; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload 4633; PC64LE-NEXT: li 3, 64 4634; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4635; PC64LE-NEXT: xxmrghd 34, 0, 1 4636; PC64LE-NEXT: addi 1, 1, 80 4637; PC64LE-NEXT: ld 0, 16(1) 4638; PC64LE-NEXT: mtlr 0 4639; PC64LE-NEXT: blr 4640; 4641; PC64LE9-LABEL: constrained_vector_log2_v4f64: 4642; PC64LE9: # %bb.0: # %entry 4643; PC64LE9-NEXT: mflr 0 4644; PC64LE9-NEXT: std 0, 16(1) 4645; PC64LE9-NEXT: stdu 1, -64(1) 4646; PC64LE9-NEXT: addis 3, 2, .LCPI74_0@toc@ha 4647; PC64LE9-NEXT: lfd 1, .LCPI74_0@toc@l(3) 4648; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 4649; PC64LE9-NEXT: bl log2 4650; PC64LE9-NEXT: nop 4651; PC64LE9-NEXT: addis 3, 2, .LCPI74_1@toc@ha 4652; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4653; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 4654; PC64LE9-NEXT: lfd 1, .LCPI74_1@toc@l(3) 4655; PC64LE9-NEXT: bl log2 4656; PC64LE9-NEXT: nop 4657; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 4658; PC64LE9-NEXT: addis 3, 2, .LCPI74_2@toc@ha 4659; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4660; PC64LE9-NEXT: xxmrghd 63, 1, 0 4661; PC64LE9-NEXT: lfd 1, .LCPI74_2@toc@l(3) 4662; PC64LE9-NEXT: bl log2 4663; PC64LE9-NEXT: nop 4664; PC64LE9-NEXT: addis 3, 2, .LCPI74_3@toc@ha 4665; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4666; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill 4667; PC64LE9-NEXT: lfs 1, .LCPI74_3@toc@l(3) 4668; PC64LE9-NEXT: bl log2 4669; PC64LE9-NEXT: nop 4670; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload 4671; PC64LE9-NEXT: vmr 3, 31 4672; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 4673; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4674; PC64LE9-NEXT: xxmrghd 34, 0, 1 4675; PC64LE9-NEXT: addi 1, 1, 64 4676; PC64LE9-NEXT: ld 0, 16(1) 4677; PC64LE9-NEXT: mtlr 0 4678; PC64LE9-NEXT: blr 4679entry: 4680 %log2 = call <4 x double> @llvm.experimental.constrained.log2.v4f64( 4681 <4 x double> <double 42.0, double 42.1, 4682 double 42.2, double 42.3>, 4683 metadata !"round.dynamic", 4684 metadata !"fpexcept.strict") #1 4685 ret <4 x double> %log2 4686} 4687 4688define <1 x float> @constrained_vector_rint_v1f32() #0 { 4689; PC64LE-LABEL: constrained_vector_rint_v1f32: 4690; PC64LE: # %bb.0: # %entry 4691; PC64LE-NEXT: addis 3, 2, .LCPI75_0@toc@ha 4692; PC64LE-NEXT: lfs 0, .LCPI75_0@toc@l(3) 4693; PC64LE-NEXT: xsrdpic 1, 0 4694; PC64LE-NEXT: blr 4695; 4696; PC64LE9-LABEL: constrained_vector_rint_v1f32: 4697; PC64LE9: # %bb.0: # %entry 4698; PC64LE9-NEXT: addis 3, 2, .LCPI75_0@toc@ha 4699; PC64LE9-NEXT: lfs 0, .LCPI75_0@toc@l(3) 4700; PC64LE9-NEXT: xsrdpic 1, 0 4701; PC64LE9-NEXT: blr 4702entry: 4703 %rint = call <1 x float> @llvm.experimental.constrained.rint.v1f32( 4704 <1 x float> <float 42.0>, 4705 metadata !"round.dynamic", 4706 metadata !"fpexcept.strict") #1 4707 ret <1 x float> %rint 4708} 4709 4710define <2 x double> @constrained_vector_rint_v2f64() #0 { 4711; PC64LE-LABEL: constrained_vector_rint_v2f64: 4712; PC64LE: # %bb.0: # %entry 4713; PC64LE-NEXT: addis 3, 2, .LCPI76_0@toc@ha 4714; PC64LE-NEXT: addi 3, 3, .LCPI76_0@toc@l 4715; PC64LE-NEXT: lxvd2x 0, 0, 3 4716; PC64LE-NEXT: xxswapd 0, 0 4717; PC64LE-NEXT: xvrdpic 34, 0 4718; PC64LE-NEXT: blr 4719; 4720; PC64LE9-LABEL: constrained_vector_rint_v2f64: 4721; PC64LE9: # %bb.0: # %entry 4722; PC64LE9-NEXT: addis 3, 2, .LCPI76_0@toc@ha 4723; PC64LE9-NEXT: addi 3, 3, .LCPI76_0@toc@l 4724; PC64LE9-NEXT: lxvx 0, 0, 3 4725; PC64LE9-NEXT: xvrdpic 34, 0 4726; PC64LE9-NEXT: blr 4727entry: 4728 %rint = call <2 x double> @llvm.experimental.constrained.rint.v2f64( 4729 <2 x double> <double 42.1, double 42.0>, 4730 metadata !"round.dynamic", 4731 metadata !"fpexcept.strict") #1 4732 ret <2 x double> %rint 4733} 4734 4735define <3 x float> @constrained_vector_rint_v3f32() #0 { 4736; PC64LE-LABEL: constrained_vector_rint_v3f32: 4737; PC64LE: # %bb.0: # %entry 4738; PC64LE-NEXT: addis 3, 2, .LCPI77_2@toc@ha 4739; PC64LE-NEXT: addis 4, 2, .LCPI77_1@toc@ha 4740; PC64LE-NEXT: lfs 0, .LCPI77_2@toc@l(3) 4741; PC64LE-NEXT: lfs 1, .LCPI77_1@toc@l(4) 4742; PC64LE-NEXT: addis 3, 2, .LCPI77_0@toc@ha 4743; PC64LE-NEXT: xsrdpic 0, 0 4744; PC64LE-NEXT: lfs 2, .LCPI77_0@toc@l(3) 4745; PC64LE-NEXT: addis 3, 2, .LCPI77_3@toc@ha 4746; PC64LE-NEXT: xsrdpic 1, 1 4747; PC64LE-NEXT: addi 3, 3, .LCPI77_3@toc@l 4748; PC64LE-NEXT: xsrdpic 2, 2 4749; PC64LE-NEXT: xscvdpspn 0, 0 4750; PC64LE-NEXT: xscvdpspn 1, 1 4751; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 4752; PC64LE-NEXT: xscvdpspn 0, 2 4753; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 4754; PC64LE-NEXT: vmrghw 2, 3, 2 4755; PC64LE-NEXT: lvx 3, 0, 3 4756; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 4757; PC64LE-NEXT: vperm 2, 4, 2, 3 4758; PC64LE-NEXT: blr 4759; 4760; PC64LE9-LABEL: constrained_vector_rint_v3f32: 4761; PC64LE9: # %bb.0: # %entry 4762; PC64LE9-NEXT: addis 3, 2, .LCPI77_0@toc@ha 4763; PC64LE9-NEXT: lfs 0, .LCPI77_0@toc@l(3) 4764; PC64LE9-NEXT: addis 3, 2, .LCPI77_1@toc@ha 4765; PC64LE9-NEXT: lfs 1, .LCPI77_1@toc@l(3) 4766; PC64LE9-NEXT: addis 3, 2, .LCPI77_2@toc@ha 4767; PC64LE9-NEXT: xsrdpic 0, 0 4768; PC64LE9-NEXT: lfs 2, .LCPI77_2@toc@l(3) 4769; PC64LE9-NEXT: addis 3, 2, .LCPI77_3@toc@ha 4770; PC64LE9-NEXT: addi 3, 3, .LCPI77_3@toc@l 4771; PC64LE9-NEXT: xsrdpic 1, 1 4772; PC64LE9-NEXT: xsrdpic 2, 2 4773; PC64LE9-NEXT: xscvdpspn 0, 0 4774; PC64LE9-NEXT: xscvdpspn 1, 1 4775; PC64LE9-NEXT: xscvdpspn 2, 2 4776; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 4777; PC64LE9-NEXT: xxsldwi 35, 1, 1, 3 4778; PC64LE9-NEXT: xxsldwi 34, 2, 2, 3 4779; PC64LE9-NEXT: vmrghw 2, 3, 2 4780; PC64LE9-NEXT: lxvx 35, 0, 3 4781; PC64LE9-NEXT: vperm 2, 4, 2, 3 4782; PC64LE9-NEXT: blr 4783 entry: 4784 %rint = call <3 x float> @llvm.experimental.constrained.rint.v3f32( 4785 <3 x float> <float 42.0, float 43.0, float 44.0>, 4786 metadata !"round.dynamic", 4787 metadata !"fpexcept.strict") #1 4788 ret <3 x float> %rint 4789} 4790 4791define <3 x double> @constrained_vector_rint_v3f64() #0 { 4792; PC64LE-LABEL: constrained_vector_rint_v3f64: 4793; PC64LE: # %bb.0: # %entry 4794; PC64LE-NEXT: addis 3, 2, .LCPI78_1@toc@ha 4795; PC64LE-NEXT: addi 3, 3, .LCPI78_1@toc@l 4796; PC64LE-NEXT: lxvd2x 0, 0, 3 4797; PC64LE-NEXT: addis 3, 2, .LCPI78_0@toc@ha 4798; PC64LE-NEXT: lfd 1, .LCPI78_0@toc@l(3) 4799; PC64LE-NEXT: xxswapd 0, 0 4800; PC64LE-NEXT: xsrdpic 3, 1 4801; PC64LE-NEXT: xvrdpic 2, 0 4802; PC64LE-NEXT: xxswapd 1, 2 4803; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 4804; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4805; PC64LE-NEXT: blr 4806; 4807; PC64LE9-LABEL: constrained_vector_rint_v3f64: 4808; PC64LE9: # %bb.0: # %entry 4809; PC64LE9-NEXT: addis 3, 2, .LCPI78_0@toc@ha 4810; PC64LE9-NEXT: lfd 0, .LCPI78_0@toc@l(3) 4811; PC64LE9-NEXT: addis 3, 2, .LCPI78_1@toc@ha 4812; PC64LE9-NEXT: addi 3, 3, .LCPI78_1@toc@l 4813; PC64LE9-NEXT: xsrdpic 3, 0 4814; PC64LE9-NEXT: lxvx 0, 0, 3 4815; PC64LE9-NEXT: xvrdpic 2, 0 4816; PC64LE9-NEXT: xxswapd 1, 2 4817; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4818; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 4819; PC64LE9-NEXT: blr 4820entry: 4821 %rint = call <3 x double> @llvm.experimental.constrained.rint.v3f64( 4822 <3 x double> <double 42.0, double 42.1, double 42.2>, 4823 metadata !"round.dynamic", 4824 metadata !"fpexcept.strict") #1 4825 ret <3 x double> %rint 4826} 4827 4828define <4 x double> @constrained_vector_rint_v4f64() #0 { 4829; PC64LE-LABEL: constrained_vector_rint_v4f64: 4830; PC64LE: # %bb.0: # %entry 4831; PC64LE-NEXT: addis 3, 2, .LCPI79_0@toc@ha 4832; PC64LE-NEXT: addis 4, 2, .LCPI79_1@toc@ha 4833; PC64LE-NEXT: addi 3, 3, .LCPI79_0@toc@l 4834; PC64LE-NEXT: lxvd2x 0, 0, 3 4835; PC64LE-NEXT: addi 3, 4, .LCPI79_1@toc@l 4836; PC64LE-NEXT: lxvd2x 1, 0, 3 4837; PC64LE-NEXT: xxswapd 0, 0 4838; PC64LE-NEXT: xxswapd 1, 1 4839; PC64LE-NEXT: xvrdpic 34, 0 4840; PC64LE-NEXT: xvrdpic 35, 1 4841; PC64LE-NEXT: blr 4842; 4843; PC64LE9-LABEL: constrained_vector_rint_v4f64: 4844; PC64LE9: # %bb.0: # %entry 4845; PC64LE9-NEXT: addis 3, 2, .LCPI79_0@toc@ha 4846; PC64LE9-NEXT: addi 3, 3, .LCPI79_0@toc@l 4847; PC64LE9-NEXT: lxvx 0, 0, 3 4848; PC64LE9-NEXT: addis 3, 2, .LCPI79_1@toc@ha 4849; PC64LE9-NEXT: addi 3, 3, .LCPI79_1@toc@l 4850; PC64LE9-NEXT: xvrdpic 34, 0 4851; PC64LE9-NEXT: lxvx 0, 0, 3 4852; PC64LE9-NEXT: xvrdpic 35, 0 4853; PC64LE9-NEXT: blr 4854entry: 4855 %rint = call <4 x double> @llvm.experimental.constrained.rint.v4f64( 4856 <4 x double> <double 42.1, double 42.2, 4857 double 42.3, double 42.4>, 4858 metadata !"round.dynamic", 4859 metadata !"fpexcept.strict") #1 4860 ret <4 x double> %rint 4861} 4862 4863define <1 x float> @constrained_vector_nearbyint_v1f32() #0 { 4864; PC64LE-LABEL: constrained_vector_nearbyint_v1f32: 4865; PC64LE: # %bb.0: # %entry 4866; PC64LE-NEXT: mflr 0 4867; PC64LE-NEXT: std 0, 16(1) 4868; PC64LE-NEXT: stdu 1, -32(1) 4869; PC64LE-NEXT: addis 3, 2, .LCPI80_0@toc@ha 4870; PC64LE-NEXT: lfs 1, .LCPI80_0@toc@l(3) 4871; PC64LE-NEXT: bl nearbyintf 4872; PC64LE-NEXT: nop 4873; PC64LE-NEXT: addi 1, 1, 32 4874; PC64LE-NEXT: ld 0, 16(1) 4875; PC64LE-NEXT: mtlr 0 4876; PC64LE-NEXT: blr 4877; 4878; PC64LE9-LABEL: constrained_vector_nearbyint_v1f32: 4879; PC64LE9: # %bb.0: # %entry 4880; PC64LE9-NEXT: mflr 0 4881; PC64LE9-NEXT: std 0, 16(1) 4882; PC64LE9-NEXT: stdu 1, -32(1) 4883; PC64LE9-NEXT: addis 3, 2, .LCPI80_0@toc@ha 4884; PC64LE9-NEXT: lfs 1, .LCPI80_0@toc@l(3) 4885; PC64LE9-NEXT: bl nearbyintf 4886; PC64LE9-NEXT: nop 4887; PC64LE9-NEXT: addi 1, 1, 32 4888; PC64LE9-NEXT: ld 0, 16(1) 4889; PC64LE9-NEXT: mtlr 0 4890; PC64LE9-NEXT: blr 4891entry: 4892 %nearby = call <1 x float> @llvm.experimental.constrained.nearbyint.v1f32( 4893 <1 x float> <float 42.0>, 4894 metadata !"round.dynamic", 4895 metadata !"fpexcept.strict") #1 4896 ret <1 x float> %nearby 4897} 4898 4899define <2 x double> @constrained_vector_nearbyint_v2f64() #0 { 4900; PC64LE-LABEL: constrained_vector_nearbyint_v2f64: 4901; PC64LE: # %bb.0: # %entry 4902; PC64LE-NEXT: addis 3, 2, .LCPI81_0@toc@ha 4903; PC64LE-NEXT: addi 3, 3, .LCPI81_0@toc@l 4904; PC64LE-NEXT: lxvd2x 0, 0, 3 4905; PC64LE-NEXT: xxswapd 0, 0 4906; PC64LE-NEXT: xvrdpic 34, 0 4907; PC64LE-NEXT: blr 4908; 4909; PC64LE9-LABEL: constrained_vector_nearbyint_v2f64: 4910; PC64LE9: # %bb.0: # %entry 4911; PC64LE9-NEXT: addis 3, 2, .LCPI81_0@toc@ha 4912; PC64LE9-NEXT: addi 3, 3, .LCPI81_0@toc@l 4913; PC64LE9-NEXT: lxvx 0, 0, 3 4914; PC64LE9-NEXT: xvrdpic 34, 0 4915; PC64LE9-NEXT: blr 4916entry: 4917 %nearby = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64( 4918 <2 x double> <double 42.1, double 42.0>, 4919 metadata !"round.dynamic", 4920 metadata !"fpexcept.strict") #1 4921 ret <2 x double> %nearby 4922} 4923 4924define <3 x float> @constrained_vector_nearbyint_v3f32() #0 { 4925; PC64LE-LABEL: constrained_vector_nearbyint_v3f32: 4926; PC64LE: # %bb.0: # %entry 4927; PC64LE-NEXT: mflr 0 4928; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 4929; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 4930; PC64LE-NEXT: std 0, 16(1) 4931; PC64LE-NEXT: stdu 1, -48(1) 4932; PC64LE-NEXT: addis 3, 2, .LCPI82_0@toc@ha 4933; PC64LE-NEXT: lfs 1, .LCPI82_0@toc@l(3) 4934; PC64LE-NEXT: bl nearbyintf 4935; PC64LE-NEXT: nop 4936; PC64LE-NEXT: addis 3, 2, .LCPI82_1@toc@ha 4937; PC64LE-NEXT: fmr 31, 1 4938; PC64LE-NEXT: lfs 1, .LCPI82_1@toc@l(3) 4939; PC64LE-NEXT: bl nearbyintf 4940; PC64LE-NEXT: nop 4941; PC64LE-NEXT: addis 3, 2, .LCPI82_2@toc@ha 4942; PC64LE-NEXT: fmr 30, 1 4943; PC64LE-NEXT: lfs 1, .LCPI82_2@toc@l(3) 4944; PC64LE-NEXT: bl nearbyintf 4945; PC64LE-NEXT: nop 4946; PC64LE-NEXT: xscvdpspn 0, 30 4947; PC64LE-NEXT: addis 3, 2, .LCPI82_3@toc@ha 4948; PC64LE-NEXT: xscvdpspn 1, 1 4949; PC64LE-NEXT: addi 3, 3, .LCPI82_3@toc@l 4950; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 4951; PC64LE-NEXT: xscvdpspn 0, 31 4952; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 4953; PC64LE-NEXT: vmrghw 2, 2, 3 4954; PC64LE-NEXT: lvx 3, 0, 3 4955; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 4956; PC64LE-NEXT: vperm 2, 4, 2, 3 4957; PC64LE-NEXT: addi 1, 1, 48 4958; PC64LE-NEXT: ld 0, 16(1) 4959; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 4960; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 4961; PC64LE-NEXT: mtlr 0 4962; PC64LE-NEXT: blr 4963; 4964; PC64LE9-LABEL: constrained_vector_nearbyint_v3f32: 4965; PC64LE9: # %bb.0: # %entry 4966; PC64LE9-NEXT: mflr 0 4967; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 4968; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 4969; PC64LE9-NEXT: std 0, 16(1) 4970; PC64LE9-NEXT: stdu 1, -48(1) 4971; PC64LE9-NEXT: addis 3, 2, .LCPI82_0@toc@ha 4972; PC64LE9-NEXT: lfs 1, .LCPI82_0@toc@l(3) 4973; PC64LE9-NEXT: bl nearbyintf 4974; PC64LE9-NEXT: nop 4975; PC64LE9-NEXT: addis 3, 2, .LCPI82_1@toc@ha 4976; PC64LE9-NEXT: fmr 31, 1 4977; PC64LE9-NEXT: lfs 1, .LCPI82_1@toc@l(3) 4978; PC64LE9-NEXT: bl nearbyintf 4979; PC64LE9-NEXT: nop 4980; PC64LE9-NEXT: addis 3, 2, .LCPI82_2@toc@ha 4981; PC64LE9-NEXT: fmr 30, 1 4982; PC64LE9-NEXT: lfs 1, .LCPI82_2@toc@l(3) 4983; PC64LE9-NEXT: bl nearbyintf 4984; PC64LE9-NEXT: nop 4985; PC64LE9-NEXT: xscvdpspn 0, 1 4986; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 4987; PC64LE9-NEXT: xscvdpspn 0, 30 4988; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 4989; PC64LE9-NEXT: xscvdpspn 0, 31 4990; PC64LE9-NEXT: addis 3, 2, .LCPI82_3@toc@ha 4991; PC64LE9-NEXT: addi 3, 3, .LCPI82_3@toc@l 4992; PC64LE9-NEXT: vmrghw 2, 3, 2 4993; PC64LE9-NEXT: lxvx 35, 0, 3 4994; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 4995; PC64LE9-NEXT: vperm 2, 4, 2, 3 4996; PC64LE9-NEXT: addi 1, 1, 48 4997; PC64LE9-NEXT: ld 0, 16(1) 4998; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 4999; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 5000; PC64LE9-NEXT: mtlr 0 5001; PC64LE9-NEXT: blr 5002entry: 5003 %nearby = call <3 x float> @llvm.experimental.constrained.nearbyint.v3f32( 5004 <3 x float> <float 42.0, float 43.0, float 44.0>, 5005 metadata !"round.dynamic", 5006 metadata !"fpexcept.strict") #1 5007 ret <3 x float> %nearby 5008} 5009 5010define <3 x double> @constrained_vector_nearby_v3f64() #0 { 5011; PC64LE-LABEL: constrained_vector_nearby_v3f64: 5012; PC64LE: # %bb.0: # %entry 5013; PC64LE-NEXT: addis 3, 2, .LCPI83_1@toc@ha 5014; PC64LE-NEXT: addi 3, 3, .LCPI83_1@toc@l 5015; PC64LE-NEXT: lxvd2x 0, 0, 3 5016; PC64LE-NEXT: addis 3, 2, .LCPI83_0@toc@ha 5017; PC64LE-NEXT: lfd 1, .LCPI83_0@toc@l(3) 5018; PC64LE-NEXT: xxswapd 0, 0 5019; PC64LE-NEXT: xsrdpic 3, 1 5020; PC64LE-NEXT: xvrdpic 2, 0 5021; PC64LE-NEXT: xxswapd 1, 2 5022; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 5023; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 5024; PC64LE-NEXT: blr 5025; 5026; PC64LE9-LABEL: constrained_vector_nearby_v3f64: 5027; PC64LE9: # %bb.0: # %entry 5028; PC64LE9-NEXT: addis 3, 2, .LCPI83_0@toc@ha 5029; PC64LE9-NEXT: lfd 0, .LCPI83_0@toc@l(3) 5030; PC64LE9-NEXT: addis 3, 2, .LCPI83_1@toc@ha 5031; PC64LE9-NEXT: addi 3, 3, .LCPI83_1@toc@l 5032; PC64LE9-NEXT: xsrdpic 3, 0 5033; PC64LE9-NEXT: lxvx 0, 0, 3 5034; PC64LE9-NEXT: xvrdpic 2, 0 5035; PC64LE9-NEXT: xxswapd 1, 2 5036; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 5037; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 5038; PC64LE9-NEXT: blr 5039entry: 5040 %nearby = call <3 x double> @llvm.experimental.constrained.nearbyint.v3f64( 5041 <3 x double> <double 42.0, double 42.1, double 42.2>, 5042 metadata !"round.dynamic", 5043 metadata !"fpexcept.strict") #1 5044 ret <3 x double> %nearby 5045} 5046 5047define <4 x double> @constrained_vector_nearbyint_v4f64() #0 { 5048; PC64LE-LABEL: constrained_vector_nearbyint_v4f64: 5049; PC64LE: # %bb.0: # %entry 5050; PC64LE-NEXT: addis 3, 2, .LCPI84_0@toc@ha 5051; PC64LE-NEXT: addis 4, 2, .LCPI84_1@toc@ha 5052; PC64LE-NEXT: addi 3, 3, .LCPI84_0@toc@l 5053; PC64LE-NEXT: lxvd2x 0, 0, 3 5054; PC64LE-NEXT: addi 3, 4, .LCPI84_1@toc@l 5055; PC64LE-NEXT: lxvd2x 1, 0, 3 5056; PC64LE-NEXT: xxswapd 0, 0 5057; PC64LE-NEXT: xxswapd 1, 1 5058; PC64LE-NEXT: xvrdpic 35, 0 5059; PC64LE-NEXT: xvrdpic 34, 1 5060; PC64LE-NEXT: blr 5061; 5062; PC64LE9-LABEL: constrained_vector_nearbyint_v4f64: 5063; PC64LE9: # %bb.0: # %entry 5064; PC64LE9-NEXT: addis 3, 2, .LCPI84_0@toc@ha 5065; PC64LE9-NEXT: addi 3, 3, .LCPI84_0@toc@l 5066; PC64LE9-NEXT: lxvx 0, 0, 3 5067; PC64LE9-NEXT: addis 3, 2, .LCPI84_1@toc@ha 5068; PC64LE9-NEXT: addi 3, 3, .LCPI84_1@toc@l 5069; PC64LE9-NEXT: xvrdpic 35, 0 5070; PC64LE9-NEXT: lxvx 0, 0, 3 5071; PC64LE9-NEXT: xvrdpic 34, 0 5072; PC64LE9-NEXT: blr 5073entry: 5074 %nearby = call <4 x double> @llvm.experimental.constrained.nearbyint.v4f64( 5075 <4 x double> <double 42.1, double 42.2, 5076 double 42.3, double 42.4>, 5077 metadata !"round.dynamic", 5078 metadata !"fpexcept.strict") #1 5079 ret <4 x double> %nearby 5080} 5081 5082define <1 x float> @constrained_vector_maxnum_v1f32() #0 { 5083; PC64LE-LABEL: constrained_vector_maxnum_v1f32: 5084; PC64LE: # %bb.0: # %entry 5085; PC64LE-NEXT: mflr 0 5086; PC64LE-NEXT: std 0, 16(1) 5087; PC64LE-NEXT: stdu 1, -32(1) 5088; PC64LE-NEXT: addis 3, 2, .LCPI85_0@toc@ha 5089; PC64LE-NEXT: addis 4, 2, .LCPI85_1@toc@ha 5090; PC64LE-NEXT: lfs 1, .LCPI85_0@toc@l(3) 5091; PC64LE-NEXT: lfs 2, .LCPI85_1@toc@l(4) 5092; PC64LE-NEXT: bl fmaxf 5093; PC64LE-NEXT: nop 5094; PC64LE-NEXT: addi 1, 1, 32 5095; PC64LE-NEXT: ld 0, 16(1) 5096; PC64LE-NEXT: mtlr 0 5097; PC64LE-NEXT: blr 5098; 5099; PC64LE9-LABEL: constrained_vector_maxnum_v1f32: 5100; PC64LE9: # %bb.0: # %entry 5101; PC64LE9-NEXT: mflr 0 5102; PC64LE9-NEXT: std 0, 16(1) 5103; PC64LE9-NEXT: stdu 1, -32(1) 5104; PC64LE9-NEXT: addis 3, 2, .LCPI85_0@toc@ha 5105; PC64LE9-NEXT: lfs 1, .LCPI85_0@toc@l(3) 5106; PC64LE9-NEXT: addis 3, 2, .LCPI85_1@toc@ha 5107; PC64LE9-NEXT: lfs 2, .LCPI85_1@toc@l(3) 5108; PC64LE9-NEXT: bl fmaxf 5109; PC64LE9-NEXT: nop 5110; PC64LE9-NEXT: addi 1, 1, 32 5111; PC64LE9-NEXT: ld 0, 16(1) 5112; PC64LE9-NEXT: mtlr 0 5113; PC64LE9-NEXT: blr 5114entry: 5115 %max = call <1 x float> @llvm.experimental.constrained.maxnum.v1f32( 5116 <1 x float> <float 42.0>, <1 x float> <float 41.0>, 5117 metadata !"fpexcept.strict") #1 5118 ret <1 x float> %max 5119} 5120 5121define <2 x double> @constrained_vector_maxnum_v2f64() #0 { 5122; PC64LE-LABEL: constrained_vector_maxnum_v2f64: 5123; PC64LE: # %bb.0: # %entry 5124; PC64LE-NEXT: addis 3, 2, .LCPI86_0@toc@ha 5125; PC64LE-NEXT: addis 4, 2, .LCPI86_1@toc@ha 5126; PC64LE-NEXT: addi 3, 3, .LCPI86_0@toc@l 5127; PC64LE-NEXT: addi 4, 4, .LCPI86_1@toc@l 5128; PC64LE-NEXT: lxvd2x 0, 0, 3 5129; PC64LE-NEXT: lxvd2x 1, 0, 4 5130; PC64LE-NEXT: xxswapd 0, 0 5131; PC64LE-NEXT: xxswapd 1, 1 5132; PC64LE-NEXT: xvmaxdp 34, 1, 0 5133; PC64LE-NEXT: blr 5134; 5135; PC64LE9-LABEL: constrained_vector_maxnum_v2f64: 5136; PC64LE9: # %bb.0: # %entry 5137; PC64LE9-NEXT: addis 3, 2, .LCPI86_0@toc@ha 5138; PC64LE9-NEXT: addi 3, 3, .LCPI86_0@toc@l 5139; PC64LE9-NEXT: lxvx 0, 0, 3 5140; PC64LE9-NEXT: addis 3, 2, .LCPI86_1@toc@ha 5141; PC64LE9-NEXT: addi 3, 3, .LCPI86_1@toc@l 5142; PC64LE9-NEXT: lxvx 1, 0, 3 5143; PC64LE9-NEXT: xvmaxdp 34, 1, 0 5144; PC64LE9-NEXT: blr 5145entry: 5146 %max = call <2 x double> @llvm.experimental.constrained.maxnum.v2f64( 5147 <2 x double> <double 43.0, double 42.0>, 5148 <2 x double> <double 41.0, double 40.0>, 5149 metadata !"fpexcept.strict") #1 5150 ret <2 x double> %max 5151} 5152 5153define <3 x float> @constrained_vector_maxnum_v3f32() #0 { 5154; PC64LE-LABEL: constrained_vector_maxnum_v3f32: 5155; PC64LE: # %bb.0: # %entry 5156; PC64LE-NEXT: mflr 0 5157; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 5158; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 5159; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 5160; PC64LE-NEXT: std 0, 16(1) 5161; PC64LE-NEXT: stdu 1, -64(1) 5162; PC64LE-NEXT: addis 4, 2, .LCPI87_1@toc@ha 5163; PC64LE-NEXT: addis 3, 2, .LCPI87_0@toc@ha 5164; PC64LE-NEXT: lfs 31, .LCPI87_1@toc@l(4) 5165; PC64LE-NEXT: lfs 1, .LCPI87_0@toc@l(3) 5166; PC64LE-NEXT: fmr 2, 31 5167; PC64LE-NEXT: bl fmaxf 5168; PC64LE-NEXT: nop 5169; PC64LE-NEXT: addis 3, 2, .LCPI87_2@toc@ha 5170; PC64LE-NEXT: addis 4, 2, .LCPI87_3@toc@ha 5171; PC64LE-NEXT: fmr 30, 1 5172; PC64LE-NEXT: lfs 1, .LCPI87_2@toc@l(3) 5173; PC64LE-NEXT: lfs 2, .LCPI87_3@toc@l(4) 5174; PC64LE-NEXT: bl fmaxf 5175; PC64LE-NEXT: nop 5176; PC64LE-NEXT: fmr 29, 1 5177; PC64LE-NEXT: addis 3, 2, .LCPI87_4@toc@ha 5178; PC64LE-NEXT: fmr 1, 31 5179; PC64LE-NEXT: lfs 2, .LCPI87_4@toc@l(3) 5180; PC64LE-NEXT: bl fmaxf 5181; PC64LE-NEXT: nop 5182; PC64LE-NEXT: xscvdpspn 0, 29 5183; PC64LE-NEXT: addis 3, 2, .LCPI87_5@toc@ha 5184; PC64LE-NEXT: xscvdpspn 1, 1 5185; PC64LE-NEXT: addi 3, 3, .LCPI87_5@toc@l 5186; PC64LE-NEXT: lvx 4, 0, 3 5187; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 5188; PC64LE-NEXT: xscvdpspn 0, 30 5189; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 5190; PC64LE-NEXT: vmrghw 2, 2, 3 5191; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 5192; PC64LE-NEXT: vperm 2, 3, 2, 4 5193; PC64LE-NEXT: addi 1, 1, 64 5194; PC64LE-NEXT: ld 0, 16(1) 5195; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 5196; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 5197; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 5198; PC64LE-NEXT: mtlr 0 5199; PC64LE-NEXT: blr 5200; 5201; PC64LE9-LABEL: constrained_vector_maxnum_v3f32: 5202; PC64LE9: # %bb.0: # %entry 5203; PC64LE9-NEXT: mflr 0 5204; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 5205; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 5206; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 5207; PC64LE9-NEXT: std 0, 16(1) 5208; PC64LE9-NEXT: stdu 1, -64(1) 5209; PC64LE9-NEXT: addis 3, 2, .LCPI87_0@toc@ha 5210; PC64LE9-NEXT: lfs 1, .LCPI87_0@toc@l(3) 5211; PC64LE9-NEXT: addis 3, 2, .LCPI87_1@toc@ha 5212; PC64LE9-NEXT: lfs 31, .LCPI87_1@toc@l(3) 5213; PC64LE9-NEXT: fmr 2, 31 5214; PC64LE9-NEXT: bl fmaxf 5215; PC64LE9-NEXT: nop 5216; PC64LE9-NEXT: addis 3, 2, .LCPI87_2@toc@ha 5217; PC64LE9-NEXT: fmr 30, 1 5218; PC64LE9-NEXT: lfs 1, .LCPI87_2@toc@l(3) 5219; PC64LE9-NEXT: addis 3, 2, .LCPI87_3@toc@ha 5220; PC64LE9-NEXT: lfs 2, .LCPI87_3@toc@l(3) 5221; PC64LE9-NEXT: bl fmaxf 5222; PC64LE9-NEXT: nop 5223; PC64LE9-NEXT: addis 3, 2, .LCPI87_4@toc@ha 5224; PC64LE9-NEXT: lfs 2, .LCPI87_4@toc@l(3) 5225; PC64LE9-NEXT: fmr 29, 1 5226; PC64LE9-NEXT: fmr 1, 31 5227; PC64LE9-NEXT: bl fmaxf 5228; PC64LE9-NEXT: nop 5229; PC64LE9-NEXT: xscvdpspn 0, 1 5230; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 5231; PC64LE9-NEXT: xscvdpspn 0, 29 5232; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 5233; PC64LE9-NEXT: xscvdpspn 0, 30 5234; PC64LE9-NEXT: addis 3, 2, .LCPI87_5@toc@ha 5235; PC64LE9-NEXT: addi 3, 3, .LCPI87_5@toc@l 5236; PC64LE9-NEXT: lxvx 36, 0, 3 5237; PC64LE9-NEXT: vmrghw 2, 3, 2 5238; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 5239; PC64LE9-NEXT: vperm 2, 3, 2, 4 5240; PC64LE9-NEXT: addi 1, 1, 64 5241; PC64LE9-NEXT: ld 0, 16(1) 5242; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 5243; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 5244; PC64LE9-NEXT: mtlr 0 5245; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 5246; PC64LE9-NEXT: blr 5247entry: 5248 %max = call <3 x float> @llvm.experimental.constrained.maxnum.v3f32( 5249 <3 x float> <float 43.0, float 44.0, float 45.0>, 5250 <3 x float> <float 41.0, float 42.0, float 43.0>, 5251 metadata !"fpexcept.strict") #1 5252 ret <3 x float> %max 5253} 5254 5255define <3 x double> @constrained_vector_max_v3f64() #0 { 5256; PC64LE-LABEL: constrained_vector_max_v3f64: 5257; PC64LE: # %bb.0: # %entry 5258; PC64LE-NEXT: mflr 0 5259; PC64LE-NEXT: std 0, 16(1) 5260; PC64LE-NEXT: stdu 1, -32(1) 5261; PC64LE-NEXT: addis 3, 2, .LCPI88_0@toc@ha 5262; PC64LE-NEXT: addis 4, 2, .LCPI88_1@toc@ha 5263; PC64LE-NEXT: lfs 1, .LCPI88_0@toc@l(3) 5264; PC64LE-NEXT: lfs 2, .LCPI88_1@toc@l(4) 5265; PC64LE-NEXT: bl fmax 5266; PC64LE-NEXT: nop 5267; PC64LE-NEXT: addis 3, 2, .LCPI88_2@toc@ha 5268; PC64LE-NEXT: addis 4, 2, .LCPI88_3@toc@ha 5269; PC64LE-NEXT: fmr 3, 1 5270; PC64LE-NEXT: addi 3, 3, .LCPI88_2@toc@l 5271; PC64LE-NEXT: addi 4, 4, .LCPI88_3@toc@l 5272; PC64LE-NEXT: lxvd2x 0, 0, 3 5273; PC64LE-NEXT: lxvd2x 2, 0, 4 5274; PC64LE-NEXT: xxswapd 0, 0 5275; PC64LE-NEXT: xxswapd 2, 2 5276; PC64LE-NEXT: xvmaxdp 2, 2, 0 5277; PC64LE-NEXT: xxswapd 0, 2 5278; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 5279; PC64LE-NEXT: fmr 1, 0 5280; PC64LE-NEXT: addi 1, 1, 32 5281; PC64LE-NEXT: ld 0, 16(1) 5282; PC64LE-NEXT: mtlr 0 5283; PC64LE-NEXT: blr 5284; 5285; PC64LE9-LABEL: constrained_vector_max_v3f64: 5286; PC64LE9: # %bb.0: # %entry 5287; PC64LE9-NEXT: mflr 0 5288; PC64LE9-NEXT: std 0, 16(1) 5289; PC64LE9-NEXT: stdu 1, -32(1) 5290; PC64LE9-NEXT: addis 3, 2, .LCPI88_0@toc@ha 5291; PC64LE9-NEXT: lfs 1, .LCPI88_0@toc@l(3) 5292; PC64LE9-NEXT: addis 3, 2, .LCPI88_1@toc@ha 5293; PC64LE9-NEXT: lfs 2, .LCPI88_1@toc@l(3) 5294; PC64LE9-NEXT: bl fmax 5295; PC64LE9-NEXT: nop 5296; PC64LE9-NEXT: addis 3, 2, .LCPI88_2@toc@ha 5297; PC64LE9-NEXT: addi 3, 3, .LCPI88_2@toc@l 5298; PC64LE9-NEXT: lxvx 0, 0, 3 5299; PC64LE9-NEXT: addis 3, 2, .LCPI88_3@toc@ha 5300; PC64LE9-NEXT: addi 3, 3, .LCPI88_3@toc@l 5301; PC64LE9-NEXT: fmr 3, 1 5302; PC64LE9-NEXT: lxvx 1, 0, 3 5303; PC64LE9-NEXT: xvmaxdp 2, 1, 0 5304; PC64LE9-NEXT: xxswapd 1, 2 5305; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 5306; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 5307; PC64LE9-NEXT: addi 1, 1, 32 5308; PC64LE9-NEXT: ld 0, 16(1) 5309; PC64LE9-NEXT: mtlr 0 5310; PC64LE9-NEXT: blr 5311entry: 5312 %max = call <3 x double> @llvm.experimental.constrained.maxnum.v3f64( 5313 <3 x double> <double 43.0, double 44.0, double 45.0>, 5314 <3 x double> <double 40.0, double 41.0, double 42.0>, 5315 metadata !"fpexcept.strict") #1 5316 ret <3 x double> %max 5317} 5318 5319define <4 x double> @constrained_vector_maxnum_v4f64() #0 { 5320; PC64LE-LABEL: constrained_vector_maxnum_v4f64: 5321; PC64LE: # %bb.0: # %entry 5322; PC64LE-NEXT: addis 3, 2, .LCPI89_0@toc@ha 5323; PC64LE-NEXT: addis 4, 2, .LCPI89_1@toc@ha 5324; PC64LE-NEXT: addis 5, 2, .LCPI89_2@toc@ha 5325; PC64LE-NEXT: addis 6, 2, .LCPI89_3@toc@ha 5326; PC64LE-NEXT: addi 3, 3, .LCPI89_0@toc@l 5327; PC64LE-NEXT: addi 4, 4, .LCPI89_1@toc@l 5328; PC64LE-NEXT: lxvd2x 0, 0, 3 5329; PC64LE-NEXT: lxvd2x 1, 0, 4 5330; PC64LE-NEXT: addi 3, 5, .LCPI89_2@toc@l 5331; PC64LE-NEXT: addi 4, 6, .LCPI89_3@toc@l 5332; PC64LE-NEXT: lxvd2x 2, 0, 3 5333; PC64LE-NEXT: lxvd2x 3, 0, 4 5334; PC64LE-NEXT: xxswapd 0, 0 5335; PC64LE-NEXT: xxswapd 1, 1 5336; PC64LE-NEXT: xxswapd 2, 2 5337; PC64LE-NEXT: xxswapd 3, 3 5338; PC64LE-NEXT: xvmaxdp 34, 1, 0 5339; PC64LE-NEXT: xvmaxdp 35, 3, 2 5340; PC64LE-NEXT: blr 5341; 5342; PC64LE9-LABEL: constrained_vector_maxnum_v4f64: 5343; PC64LE9: # %bb.0: # %entry 5344; PC64LE9-NEXT: addis 3, 2, .LCPI89_0@toc@ha 5345; PC64LE9-NEXT: addi 3, 3, .LCPI89_0@toc@l 5346; PC64LE9-NEXT: lxvx 0, 0, 3 5347; PC64LE9-NEXT: addis 3, 2, .LCPI89_1@toc@ha 5348; PC64LE9-NEXT: addi 3, 3, .LCPI89_1@toc@l 5349; PC64LE9-NEXT: lxvx 1, 0, 3 5350; PC64LE9-NEXT: addis 3, 2, .LCPI89_2@toc@ha 5351; PC64LE9-NEXT: addi 3, 3, .LCPI89_2@toc@l 5352; PC64LE9-NEXT: xvmaxdp 34, 1, 0 5353; PC64LE9-NEXT: lxvx 0, 0, 3 5354; PC64LE9-NEXT: addis 3, 2, .LCPI89_3@toc@ha 5355; PC64LE9-NEXT: addi 3, 3, .LCPI89_3@toc@l 5356; PC64LE9-NEXT: lxvx 1, 0, 3 5357; PC64LE9-NEXT: xvmaxdp 35, 1, 0 5358; PC64LE9-NEXT: blr 5359entry: 5360 %max = call <4 x double> @llvm.experimental.constrained.maxnum.v4f64( 5361 <4 x double> <double 44.0, double 45.0, 5362 double 46.0, double 47.0>, 5363 <4 x double> <double 40.0, double 41.0, 5364 double 42.0, double 43.0>, 5365 metadata !"fpexcept.strict") #1 5366 ret <4 x double> %max 5367} 5368 5369define <1 x float> @constrained_vector_minnum_v1f32() #0 { 5370; PC64LE-LABEL: constrained_vector_minnum_v1f32: 5371; PC64LE: # %bb.0: # %entry 5372; PC64LE-NEXT: mflr 0 5373; PC64LE-NEXT: std 0, 16(1) 5374; PC64LE-NEXT: stdu 1, -32(1) 5375; PC64LE-NEXT: addis 3, 2, .LCPI90_0@toc@ha 5376; PC64LE-NEXT: addis 4, 2, .LCPI90_1@toc@ha 5377; PC64LE-NEXT: lfs 1, .LCPI90_0@toc@l(3) 5378; PC64LE-NEXT: lfs 2, .LCPI90_1@toc@l(4) 5379; PC64LE-NEXT: bl fminf 5380; PC64LE-NEXT: nop 5381; PC64LE-NEXT: addi 1, 1, 32 5382; PC64LE-NEXT: ld 0, 16(1) 5383; PC64LE-NEXT: mtlr 0 5384; PC64LE-NEXT: blr 5385; 5386; PC64LE9-LABEL: constrained_vector_minnum_v1f32: 5387; PC64LE9: # %bb.0: # %entry 5388; PC64LE9-NEXT: mflr 0 5389; PC64LE9-NEXT: std 0, 16(1) 5390; PC64LE9-NEXT: stdu 1, -32(1) 5391; PC64LE9-NEXT: addis 3, 2, .LCPI90_0@toc@ha 5392; PC64LE9-NEXT: lfs 1, .LCPI90_0@toc@l(3) 5393; PC64LE9-NEXT: addis 3, 2, .LCPI90_1@toc@ha 5394; PC64LE9-NEXT: lfs 2, .LCPI90_1@toc@l(3) 5395; PC64LE9-NEXT: bl fminf 5396; PC64LE9-NEXT: nop 5397; PC64LE9-NEXT: addi 1, 1, 32 5398; PC64LE9-NEXT: ld 0, 16(1) 5399; PC64LE9-NEXT: mtlr 0 5400; PC64LE9-NEXT: blr 5401 entry: 5402 %min = call <1 x float> @llvm.experimental.constrained.minnum.v1f32( 5403 <1 x float> <float 42.0>, <1 x float> <float 41.0>, 5404 metadata !"fpexcept.strict") #1 5405 ret <1 x float> %min 5406} 5407 5408define <2 x double> @constrained_vector_minnum_v2f64() #0 { 5409; PC64LE-LABEL: constrained_vector_minnum_v2f64: 5410; PC64LE: # %bb.0: # %entry 5411; PC64LE-NEXT: addis 3, 2, .LCPI91_0@toc@ha 5412; PC64LE-NEXT: addis 4, 2, .LCPI91_1@toc@ha 5413; PC64LE-NEXT: addi 3, 3, .LCPI91_0@toc@l 5414; PC64LE-NEXT: addi 4, 4, .LCPI91_1@toc@l 5415; PC64LE-NEXT: lxvd2x 0, 0, 3 5416; PC64LE-NEXT: lxvd2x 1, 0, 4 5417; PC64LE-NEXT: xxswapd 0, 0 5418; PC64LE-NEXT: xxswapd 1, 1 5419; PC64LE-NEXT: xvmindp 34, 1, 0 5420; PC64LE-NEXT: blr 5421; 5422; PC64LE9-LABEL: constrained_vector_minnum_v2f64: 5423; PC64LE9: # %bb.0: # %entry 5424; PC64LE9-NEXT: addis 3, 2, .LCPI91_0@toc@ha 5425; PC64LE9-NEXT: addi 3, 3, .LCPI91_0@toc@l 5426; PC64LE9-NEXT: lxvx 0, 0, 3 5427; PC64LE9-NEXT: addis 3, 2, .LCPI91_1@toc@ha 5428; PC64LE9-NEXT: addi 3, 3, .LCPI91_1@toc@l 5429; PC64LE9-NEXT: lxvx 1, 0, 3 5430; PC64LE9-NEXT: xvmindp 34, 1, 0 5431; PC64LE9-NEXT: blr 5432entry: 5433 %min = call <2 x double> @llvm.experimental.constrained.minnum.v2f64( 5434 <2 x double> <double 43.0, double 42.0>, 5435 <2 x double> <double 41.0, double 40.0>, 5436 metadata !"fpexcept.strict") #1 5437 ret <2 x double> %min 5438} 5439 5440define <3 x float> @constrained_vector_minnum_v3f32() #0 { 5441; PC64LE-LABEL: constrained_vector_minnum_v3f32: 5442; PC64LE: # %bb.0: # %entry 5443; PC64LE-NEXT: mflr 0 5444; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 5445; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 5446; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 5447; PC64LE-NEXT: std 0, 16(1) 5448; PC64LE-NEXT: stdu 1, -64(1) 5449; PC64LE-NEXT: addis 4, 2, .LCPI92_1@toc@ha 5450; PC64LE-NEXT: addis 3, 2, .LCPI92_0@toc@ha 5451; PC64LE-NEXT: lfs 31, .LCPI92_1@toc@l(4) 5452; PC64LE-NEXT: lfs 1, .LCPI92_0@toc@l(3) 5453; PC64LE-NEXT: fmr 2, 31 5454; PC64LE-NEXT: bl fminf 5455; PC64LE-NEXT: nop 5456; PC64LE-NEXT: addis 3, 2, .LCPI92_2@toc@ha 5457; PC64LE-NEXT: addis 4, 2, .LCPI92_3@toc@ha 5458; PC64LE-NEXT: fmr 30, 1 5459; PC64LE-NEXT: lfs 1, .LCPI92_2@toc@l(3) 5460; PC64LE-NEXT: lfs 2, .LCPI92_3@toc@l(4) 5461; PC64LE-NEXT: bl fminf 5462; PC64LE-NEXT: nop 5463; PC64LE-NEXT: fmr 29, 1 5464; PC64LE-NEXT: addis 3, 2, .LCPI92_4@toc@ha 5465; PC64LE-NEXT: fmr 1, 31 5466; PC64LE-NEXT: lfs 2, .LCPI92_4@toc@l(3) 5467; PC64LE-NEXT: bl fminf 5468; PC64LE-NEXT: nop 5469; PC64LE-NEXT: xscvdpspn 0, 29 5470; PC64LE-NEXT: addis 3, 2, .LCPI92_5@toc@ha 5471; PC64LE-NEXT: xscvdpspn 1, 1 5472; PC64LE-NEXT: addi 3, 3, .LCPI92_5@toc@l 5473; PC64LE-NEXT: lvx 4, 0, 3 5474; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 5475; PC64LE-NEXT: xscvdpspn 0, 30 5476; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 5477; PC64LE-NEXT: vmrghw 2, 2, 3 5478; PC64LE-NEXT: xxsldwi 35, 0, 0, 3 5479; PC64LE-NEXT: vperm 2, 3, 2, 4 5480; PC64LE-NEXT: addi 1, 1, 64 5481; PC64LE-NEXT: ld 0, 16(1) 5482; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 5483; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 5484; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 5485; PC64LE-NEXT: mtlr 0 5486; PC64LE-NEXT: blr 5487; 5488; PC64LE9-LABEL: constrained_vector_minnum_v3f32: 5489; PC64LE9: # %bb.0: # %entry 5490; PC64LE9-NEXT: mflr 0 5491; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill 5492; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill 5493; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill 5494; PC64LE9-NEXT: std 0, 16(1) 5495; PC64LE9-NEXT: stdu 1, -64(1) 5496; PC64LE9-NEXT: addis 3, 2, .LCPI92_0@toc@ha 5497; PC64LE9-NEXT: lfs 1, .LCPI92_0@toc@l(3) 5498; PC64LE9-NEXT: addis 3, 2, .LCPI92_1@toc@ha 5499; PC64LE9-NEXT: lfs 31, .LCPI92_1@toc@l(3) 5500; PC64LE9-NEXT: fmr 2, 31 5501; PC64LE9-NEXT: bl fminf 5502; PC64LE9-NEXT: nop 5503; PC64LE9-NEXT: addis 3, 2, .LCPI92_2@toc@ha 5504; PC64LE9-NEXT: fmr 30, 1 5505; PC64LE9-NEXT: lfs 1, .LCPI92_2@toc@l(3) 5506; PC64LE9-NEXT: addis 3, 2, .LCPI92_3@toc@ha 5507; PC64LE9-NEXT: lfs 2, .LCPI92_3@toc@l(3) 5508; PC64LE9-NEXT: bl fminf 5509; PC64LE9-NEXT: nop 5510; PC64LE9-NEXT: addis 3, 2, .LCPI92_4@toc@ha 5511; PC64LE9-NEXT: lfs 2, .LCPI92_4@toc@l(3) 5512; PC64LE9-NEXT: fmr 29, 1 5513; PC64LE9-NEXT: fmr 1, 31 5514; PC64LE9-NEXT: bl fminf 5515; PC64LE9-NEXT: nop 5516; PC64LE9-NEXT: xscvdpspn 0, 1 5517; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 5518; PC64LE9-NEXT: xscvdpspn 0, 29 5519; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 5520; PC64LE9-NEXT: xscvdpspn 0, 30 5521; PC64LE9-NEXT: addis 3, 2, .LCPI92_5@toc@ha 5522; PC64LE9-NEXT: addi 3, 3, .LCPI92_5@toc@l 5523; PC64LE9-NEXT: lxvx 36, 0, 3 5524; PC64LE9-NEXT: vmrghw 2, 3, 2 5525; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 5526; PC64LE9-NEXT: vperm 2, 3, 2, 4 5527; PC64LE9-NEXT: addi 1, 1, 64 5528; PC64LE9-NEXT: ld 0, 16(1) 5529; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload 5530; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload 5531; PC64LE9-NEXT: mtlr 0 5532; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload 5533; PC64LE9-NEXT: blr 5534entry: 5535 %min = call <3 x float> @llvm.experimental.constrained.minnum.v3f32( 5536 <3 x float> <float 43.0, float 44.0, float 45.0>, 5537 <3 x float> <float 41.0, float 42.0, float 43.0>, 5538 metadata !"fpexcept.strict") #1 5539 ret <3 x float> %min 5540} 5541 5542define <3 x double> @constrained_vector_min_v3f64() #0 { 5543; PC64LE-LABEL: constrained_vector_min_v3f64: 5544; PC64LE: # %bb.0: # %entry 5545; PC64LE-NEXT: mflr 0 5546; PC64LE-NEXT: std 0, 16(1) 5547; PC64LE-NEXT: stdu 1, -32(1) 5548; PC64LE-NEXT: addis 3, 2, .LCPI93_0@toc@ha 5549; PC64LE-NEXT: addis 4, 2, .LCPI93_1@toc@ha 5550; PC64LE-NEXT: lfs 1, .LCPI93_0@toc@l(3) 5551; PC64LE-NEXT: lfs 2, .LCPI93_1@toc@l(4) 5552; PC64LE-NEXT: bl fmin 5553; PC64LE-NEXT: nop 5554; PC64LE-NEXT: addis 3, 2, .LCPI93_2@toc@ha 5555; PC64LE-NEXT: addis 4, 2, .LCPI93_3@toc@ha 5556; PC64LE-NEXT: fmr 3, 1 5557; PC64LE-NEXT: addi 3, 3, .LCPI93_2@toc@l 5558; PC64LE-NEXT: addi 4, 4, .LCPI93_3@toc@l 5559; PC64LE-NEXT: lxvd2x 0, 0, 3 5560; PC64LE-NEXT: lxvd2x 2, 0, 4 5561; PC64LE-NEXT: xxswapd 0, 0 5562; PC64LE-NEXT: xxswapd 2, 2 5563; PC64LE-NEXT: xvmindp 2, 2, 0 5564; PC64LE-NEXT: xxswapd 0, 2 5565; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 5566; PC64LE-NEXT: fmr 1, 0 5567; PC64LE-NEXT: addi 1, 1, 32 5568; PC64LE-NEXT: ld 0, 16(1) 5569; PC64LE-NEXT: mtlr 0 5570; PC64LE-NEXT: blr 5571; 5572; PC64LE9-LABEL: constrained_vector_min_v3f64: 5573; PC64LE9: # %bb.0: # %entry 5574; PC64LE9-NEXT: mflr 0 5575; PC64LE9-NEXT: std 0, 16(1) 5576; PC64LE9-NEXT: stdu 1, -32(1) 5577; PC64LE9-NEXT: addis 3, 2, .LCPI93_0@toc@ha 5578; PC64LE9-NEXT: lfs 1, .LCPI93_0@toc@l(3) 5579; PC64LE9-NEXT: addis 3, 2, .LCPI93_1@toc@ha 5580; PC64LE9-NEXT: lfs 2, .LCPI93_1@toc@l(3) 5581; PC64LE9-NEXT: bl fmin 5582; PC64LE9-NEXT: nop 5583; PC64LE9-NEXT: addis 3, 2, .LCPI93_2@toc@ha 5584; PC64LE9-NEXT: addi 3, 3, .LCPI93_2@toc@l 5585; PC64LE9-NEXT: lxvx 0, 0, 3 5586; PC64LE9-NEXT: addis 3, 2, .LCPI93_3@toc@ha 5587; PC64LE9-NEXT: addi 3, 3, .LCPI93_3@toc@l 5588; PC64LE9-NEXT: fmr 3, 1 5589; PC64LE9-NEXT: lxvx 1, 0, 3 5590; PC64LE9-NEXT: xvmindp 2, 1, 0 5591; PC64LE9-NEXT: xxswapd 1, 2 5592; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 5593; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 5594; PC64LE9-NEXT: addi 1, 1, 32 5595; PC64LE9-NEXT: ld 0, 16(1) 5596; PC64LE9-NEXT: mtlr 0 5597; PC64LE9-NEXT: blr 5598entry: 5599 %min = call <3 x double> @llvm.experimental.constrained.minnum.v3f64( 5600 <3 x double> <double 43.0, double 44.0, double 45.0>, 5601 <3 x double> <double 40.0, double 41.0, double 42.0>, 5602 metadata !"fpexcept.strict") #1 5603 ret <3 x double> %min 5604} 5605 5606define <4 x double> @constrained_vector_minnum_v4f64() #0 { 5607; PC64LE-LABEL: constrained_vector_minnum_v4f64: 5608; PC64LE: # %bb.0: # %entry 5609; PC64LE-NEXT: addis 3, 2, .LCPI94_0@toc@ha 5610; PC64LE-NEXT: addis 4, 2, .LCPI94_1@toc@ha 5611; PC64LE-NEXT: addis 5, 2, .LCPI94_2@toc@ha 5612; PC64LE-NEXT: addis 6, 2, .LCPI94_3@toc@ha 5613; PC64LE-NEXT: addi 3, 3, .LCPI94_0@toc@l 5614; PC64LE-NEXT: addi 4, 4, .LCPI94_1@toc@l 5615; PC64LE-NEXT: lxvd2x 0, 0, 3 5616; PC64LE-NEXT: lxvd2x 1, 0, 4 5617; PC64LE-NEXT: addi 3, 5, .LCPI94_2@toc@l 5618; PC64LE-NEXT: addi 4, 6, .LCPI94_3@toc@l 5619; PC64LE-NEXT: lxvd2x 2, 0, 3 5620; PC64LE-NEXT: lxvd2x 3, 0, 4 5621; PC64LE-NEXT: xxswapd 0, 0 5622; PC64LE-NEXT: xxswapd 1, 1 5623; PC64LE-NEXT: xxswapd 2, 2 5624; PC64LE-NEXT: xxswapd 3, 3 5625; PC64LE-NEXT: xvmindp 34, 1, 0 5626; PC64LE-NEXT: xvmindp 35, 3, 2 5627; PC64LE-NEXT: blr 5628; 5629; PC64LE9-LABEL: constrained_vector_minnum_v4f64: 5630; PC64LE9: # %bb.0: # %entry 5631; PC64LE9-NEXT: addis 3, 2, .LCPI94_0@toc@ha 5632; PC64LE9-NEXT: addi 3, 3, .LCPI94_0@toc@l 5633; PC64LE9-NEXT: lxvx 0, 0, 3 5634; PC64LE9-NEXT: addis 3, 2, .LCPI94_1@toc@ha 5635; PC64LE9-NEXT: addi 3, 3, .LCPI94_1@toc@l 5636; PC64LE9-NEXT: lxvx 1, 0, 3 5637; PC64LE9-NEXT: addis 3, 2, .LCPI94_2@toc@ha 5638; PC64LE9-NEXT: addi 3, 3, .LCPI94_2@toc@l 5639; PC64LE9-NEXT: xvmindp 34, 1, 0 5640; PC64LE9-NEXT: lxvx 0, 0, 3 5641; PC64LE9-NEXT: addis 3, 2, .LCPI94_3@toc@ha 5642; PC64LE9-NEXT: addi 3, 3, .LCPI94_3@toc@l 5643; PC64LE9-NEXT: lxvx 1, 0, 3 5644; PC64LE9-NEXT: xvmindp 35, 1, 0 5645; PC64LE9-NEXT: blr 5646entry: 5647 %min = call <4 x double> @llvm.experimental.constrained.minnum.v4f64( 5648 <4 x double> <double 44.0, double 45.0, 5649 double 46.0, double 47.0>, 5650 <4 x double> <double 40.0, double 41.0, 5651 double 42.0, double 43.0>, 5652 metadata !"fpexcept.strict") #1 5653 ret <4 x double> %min 5654} 5655 5656define <1 x float> @constrained_vector_fptrunc_v1f64() #0 { 5657; PC64LE-LABEL: constrained_vector_fptrunc_v1f64: 5658; PC64LE: # %bb.0: # %entry 5659; PC64LE-NEXT: addis 3, 2, .LCPI95_0@toc@ha 5660; PC64LE-NEXT: lfd 0, .LCPI95_0@toc@l(3) 5661; PC64LE-NEXT: xsrsp 1, 0 5662; PC64LE-NEXT: blr 5663; 5664; PC64LE9-LABEL: constrained_vector_fptrunc_v1f64: 5665; PC64LE9: # %bb.0: # %entry 5666; PC64LE9-NEXT: addis 3, 2, .LCPI95_0@toc@ha 5667; PC64LE9-NEXT: lfd 0, .LCPI95_0@toc@l(3) 5668; PC64LE9-NEXT: xsrsp 1, 0 5669; PC64LE9-NEXT: blr 5670entry: 5671 %result = call <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64( 5672 <1 x double><double 42.1>, 5673 metadata !"round.dynamic", 5674 metadata !"fpexcept.strict") #1 5675 ret <1 x float> %result 5676} 5677 5678define <2 x float> @constrained_vector_fptrunc_v2f64() #0 { 5679; PC64LE-LABEL: constrained_vector_fptrunc_v2f64: 5680; PC64LE: # %bb.0: # %entry 5681; PC64LE-NEXT: addis 3, 2, .LCPI96_0@toc@ha 5682; PC64LE-NEXT: addis 4, 2, .LCPI96_1@toc@ha 5683; PC64LE-NEXT: lfd 0, .LCPI96_0@toc@l(3) 5684; PC64LE-NEXT: lfd 1, .LCPI96_1@toc@l(4) 5685; PC64LE-NEXT: xsrsp 0, 0 5686; PC64LE-NEXT: xsrsp 1, 1 5687; PC64LE-NEXT: xscvdpspn 0, 0 5688; PC64LE-NEXT: xscvdpspn 1, 1 5689; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 5690; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 5691; PC64LE-NEXT: vmrghw 2, 3, 2 5692; PC64LE-NEXT: blr 5693; 5694; PC64LE9-LABEL: constrained_vector_fptrunc_v2f64: 5695; PC64LE9: # %bb.0: # %entry 5696; PC64LE9-NEXT: addis 3, 2, .LCPI96_0@toc@ha 5697; PC64LE9-NEXT: lfd 0, .LCPI96_0@toc@l(3) 5698; PC64LE9-NEXT: addis 3, 2, .LCPI96_1@toc@ha 5699; PC64LE9-NEXT: xsrsp 0, 0 5700; PC64LE9-NEXT: xscvdpspn 0, 0 5701; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 5702; PC64LE9-NEXT: lfd 0, .LCPI96_1@toc@l(3) 5703; PC64LE9-NEXT: xsrsp 0, 0 5704; PC64LE9-NEXT: xscvdpspn 0, 0 5705; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 5706; PC64LE9-NEXT: vmrghw 2, 3, 2 5707; PC64LE9-NEXT: blr 5708entry: 5709 %result = call <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64( 5710 <2 x double><double 42.1, double 42.2>, 5711 metadata !"round.dynamic", 5712 metadata !"fpexcept.strict") #1 5713 ret <2 x float> %result 5714} 5715 5716define <3 x float> @constrained_vector_fptrunc_v3f64() #0 { 5717; PC64LE-LABEL: constrained_vector_fptrunc_v3f64: 5718; PC64LE: # %bb.0: # %entry 5719; PC64LE-NEXT: addis 3, 2, .LCPI97_0@toc@ha 5720; PC64LE-NEXT: addis 4, 2, .LCPI97_1@toc@ha 5721; PC64LE-NEXT: lfd 0, .LCPI97_0@toc@l(3) 5722; PC64LE-NEXT: lfd 1, .LCPI97_1@toc@l(4) 5723; PC64LE-NEXT: addis 3, 2, .LCPI97_3@toc@ha 5724; PC64LE-NEXT: xsrsp 0, 0 5725; PC64LE-NEXT: lfd 2, .LCPI97_3@toc@l(3) 5726; PC64LE-NEXT: addis 3, 2, .LCPI97_2@toc@ha 5727; PC64LE-NEXT: xsrsp 1, 1 5728; PC64LE-NEXT: addi 3, 3, .LCPI97_2@toc@l 5729; PC64LE-NEXT: xsrsp 2, 2 5730; PC64LE-NEXT: xscvdpspn 0, 0 5731; PC64LE-NEXT: xscvdpspn 1, 1 5732; PC64LE-NEXT: xxsldwi 34, 0, 0, 3 5733; PC64LE-NEXT: xscvdpspn 0, 2 5734; PC64LE-NEXT: xxsldwi 35, 1, 1, 3 5735; PC64LE-NEXT: vmrghw 2, 3, 2 5736; PC64LE-NEXT: lvx 3, 0, 3 5737; PC64LE-NEXT: xxsldwi 36, 0, 0, 3 5738; PC64LE-NEXT: vperm 2, 4, 2, 3 5739; PC64LE-NEXT: blr 5740; 5741; PC64LE9-LABEL: constrained_vector_fptrunc_v3f64: 5742; PC64LE9: # %bb.0: # %entry 5743; PC64LE9-NEXT: addis 3, 2, .LCPI97_0@toc@ha 5744; PC64LE9-NEXT: lfd 0, .LCPI97_0@toc@l(3) 5745; PC64LE9-NEXT: addis 3, 2, .LCPI97_1@toc@ha 5746; PC64LE9-NEXT: xsrsp 0, 0 5747; PC64LE9-NEXT: xscvdpspn 0, 0 5748; PC64LE9-NEXT: xxsldwi 34, 0, 0, 3 5749; PC64LE9-NEXT: lfd 0, .LCPI97_1@toc@l(3) 5750; PC64LE9-NEXT: addis 3, 2, .LCPI97_2@toc@ha 5751; PC64LE9-NEXT: addi 3, 3, .LCPI97_2@toc@l 5752; PC64LE9-NEXT: xsrsp 0, 0 5753; PC64LE9-NEXT: xscvdpspn 0, 0 5754; PC64LE9-NEXT: xxsldwi 35, 0, 0, 3 5755; PC64LE9-NEXT: vmrghw 2, 3, 2 5756; PC64LE9-NEXT: lxvx 35, 0, 3 5757; PC64LE9-NEXT: addis 3, 2, .LCPI97_3@toc@ha 5758; PC64LE9-NEXT: lfd 0, .LCPI97_3@toc@l(3) 5759; PC64LE9-NEXT: xsrsp 0, 0 5760; PC64LE9-NEXT: xscvdpspn 0, 0 5761; PC64LE9-NEXT: xxsldwi 36, 0, 0, 3 5762; PC64LE9-NEXT: vperm 2, 4, 2, 3 5763; PC64LE9-NEXT: blr 5764entry: 5765 %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64( 5766 <3 x double><double 42.1, double 42.2, 5767 double 42.3>, 5768 metadata !"round.dynamic", 5769 metadata !"fpexcept.strict") #1 5770 ret <3 x float> %result 5771} 5772 5773define <4 x float> @constrained_vector_fptrunc_v4f64() #0 { 5774; PC64LE-LABEL: constrained_vector_fptrunc_v4f64: 5775; PC64LE: # %bb.0: # %entry 5776; PC64LE-NEXT: addis 3, 2, .LCPI98_0@toc@ha 5777; PC64LE-NEXT: addis 4, 2, .LCPI98_1@toc@ha 5778; PC64LE-NEXT: addis 5, 2, .LCPI98_2@toc@ha 5779; PC64LE-NEXT: addis 6, 2, .LCPI98_3@toc@ha 5780; PC64LE-NEXT: lfd 0, .LCPI98_0@toc@l(3) 5781; PC64LE-NEXT: lfd 1, .LCPI98_1@toc@l(4) 5782; PC64LE-NEXT: lfd 2, .LCPI98_2@toc@l(5) 5783; PC64LE-NEXT: lfd 3, .LCPI98_3@toc@l(6) 5784; PC64LE-NEXT: xxmrghd 0, 1, 0 5785; PC64LE-NEXT: xxmrghd 1, 3, 2 5786; PC64LE-NEXT: xvcvdpsp 34, 0 5787; PC64LE-NEXT: xvcvdpsp 35, 1 5788; PC64LE-NEXT: vmrgew 2, 3, 2 5789; PC64LE-NEXT: blr 5790; 5791; PC64LE9-LABEL: constrained_vector_fptrunc_v4f64: 5792; PC64LE9: # %bb.0: # %entry 5793; PC64LE9-NEXT: addis 3, 2, .LCPI98_0@toc@ha 5794; PC64LE9-NEXT: lfd 0, .LCPI98_0@toc@l(3) 5795; PC64LE9-NEXT: addis 3, 2, .LCPI98_1@toc@ha 5796; PC64LE9-NEXT: lfd 1, .LCPI98_1@toc@l(3) 5797; PC64LE9-NEXT: addis 3, 2, .LCPI98_2@toc@ha 5798; PC64LE9-NEXT: xxmrghd 0, 1, 0 5799; PC64LE9-NEXT: xvcvdpsp 34, 0 5800; PC64LE9-NEXT: lfd 0, .LCPI98_2@toc@l(3) 5801; PC64LE9-NEXT: addis 3, 2, .LCPI98_3@toc@ha 5802; PC64LE9-NEXT: lfd 1, .LCPI98_3@toc@l(3) 5803; PC64LE9-NEXT: xxmrghd 0, 1, 0 5804; PC64LE9-NEXT: xvcvdpsp 35, 0 5805; PC64LE9-NEXT: vmrgew 2, 3, 2 5806; PC64LE9-NEXT: blr 5807entry: 5808 %result = call <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64( 5809 <4 x double><double 42.1, double 42.2, 5810 double 42.3, double 42.4>, 5811 metadata !"round.dynamic", 5812 metadata !"fpexcept.strict") #1 5813 ret <4 x float> %result 5814} 5815 5816define <1 x double> @constrained_vector_fpext_v1f32() #0 { 5817; PC64LE-LABEL: constrained_vector_fpext_v1f32: 5818; PC64LE: # %bb.0: # %entry 5819; PC64LE-NEXT: addis 3, 2, .LCPI99_0@toc@ha 5820; PC64LE-NEXT: lfs 1, .LCPI99_0@toc@l(3) 5821; PC64LE-NEXT: blr 5822; 5823; PC64LE9-LABEL: constrained_vector_fpext_v1f32: 5824; PC64LE9: # %bb.0: # %entry 5825; PC64LE9-NEXT: addis 3, 2, .LCPI99_0@toc@ha 5826; PC64LE9-NEXT: lfs 1, .LCPI99_0@toc@l(3) 5827; PC64LE9-NEXT: blr 5828entry: 5829 %result = call <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32( 5830 <1 x float><float 42.0>, 5831 metadata !"fpexcept.strict") #1 5832 ret <1 x double> %result 5833} 5834 5835define <2 x double> @constrained_vector_fpext_v2f32() #0 { 5836; PC64LE-LABEL: constrained_vector_fpext_v2f32: 5837; PC64LE: # %bb.0: # %entry 5838; PC64LE-NEXT: addis 3, 2, .LCPI100_0@toc@ha 5839; PC64LE-NEXT: addis 4, 2, .LCPI100_1@toc@ha 5840; PC64LE-NEXT: lfs 0, .LCPI100_0@toc@l(3) 5841; PC64LE-NEXT: lfs 1, .LCPI100_1@toc@l(4) 5842; PC64LE-NEXT: xxmrghd 34, 1, 0 5843; PC64LE-NEXT: blr 5844; 5845; PC64LE9-LABEL: constrained_vector_fpext_v2f32: 5846; PC64LE9: # %bb.0: # %entry 5847; PC64LE9-NEXT: addis 3, 2, .LCPI100_0@toc@ha 5848; PC64LE9-NEXT: lfs 0, .LCPI100_0@toc@l(3) 5849; PC64LE9-NEXT: addis 3, 2, .LCPI100_1@toc@ha 5850; PC64LE9-NEXT: lfs 1, .LCPI100_1@toc@l(3) 5851; PC64LE9-NEXT: xxmrghd 34, 1, 0 5852; PC64LE9-NEXT: blr 5853entry: 5854 %result = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32( 5855 <2 x float><float 42.0, float 43.0>, 5856 metadata !"fpexcept.strict") #1 5857 ret <2 x double> %result 5858} 5859 5860define <3 x double> @constrained_vector_fpext_v3f32() #0 { 5861; PC64LE-LABEL: constrained_vector_fpext_v3f32: 5862; PC64LE: # %bb.0: # %entry 5863; PC64LE-NEXT: addis 3, 2, .LCPI101_0@toc@ha 5864; PC64LE-NEXT: addis 4, 2, .LCPI101_1@toc@ha 5865; PC64LE-NEXT: addis 5, 2, .LCPI101_2@toc@ha 5866; PC64LE-NEXT: lfs 1, .LCPI101_0@toc@l(3) 5867; PC64LE-NEXT: lfs 2, .LCPI101_1@toc@l(4) 5868; PC64LE-NEXT: lfs 3, .LCPI101_2@toc@l(5) 5869; PC64LE-NEXT: blr 5870; 5871; PC64LE9-LABEL: constrained_vector_fpext_v3f32: 5872; PC64LE9: # %bb.0: # %entry 5873; PC64LE9-NEXT: addis 3, 2, .LCPI101_0@toc@ha 5874; PC64LE9-NEXT: lfs 1, .LCPI101_0@toc@l(3) 5875; PC64LE9-NEXT: addis 3, 2, .LCPI101_1@toc@ha 5876; PC64LE9-NEXT: lfs 2, .LCPI101_1@toc@l(3) 5877; PC64LE9-NEXT: addis 3, 2, .LCPI101_2@toc@ha 5878; PC64LE9-NEXT: lfs 3, .LCPI101_2@toc@l(3) 5879; PC64LE9-NEXT: blr 5880entry: 5881 %result = call <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32( 5882 <3 x float><float 42.0, float 43.0, 5883 float 44.0>, 5884 metadata !"fpexcept.strict") #1 5885 ret <3 x double> %result 5886} 5887 5888define <4 x double> @constrained_vector_fpext_v4f32() #0 { 5889; PC64LE-LABEL: constrained_vector_fpext_v4f32: 5890; PC64LE: # %bb.0: # %entry 5891; PC64LE-NEXT: addis 3, 2, .LCPI102_0@toc@ha 5892; PC64LE-NEXT: addis 4, 2, .LCPI102_1@toc@ha 5893; PC64LE-NEXT: addis 5, 2, .LCPI102_2@toc@ha 5894; PC64LE-NEXT: addis 6, 2, .LCPI102_3@toc@ha 5895; PC64LE-NEXT: lfs 0, .LCPI102_0@toc@l(3) 5896; PC64LE-NEXT: lfs 1, .LCPI102_1@toc@l(4) 5897; PC64LE-NEXT: lfs 2, .LCPI102_2@toc@l(5) 5898; PC64LE-NEXT: lfs 3, .LCPI102_3@toc@l(6) 5899; PC64LE-NEXT: xxmrghd 34, 1, 0 5900; PC64LE-NEXT: xxmrghd 35, 3, 2 5901; PC64LE-NEXT: blr 5902; 5903; PC64LE9-LABEL: constrained_vector_fpext_v4f32: 5904; PC64LE9: # %bb.0: # %entry 5905; PC64LE9-NEXT: addis 3, 2, .LCPI102_0@toc@ha 5906; PC64LE9-NEXT: lfs 0, .LCPI102_0@toc@l(3) 5907; PC64LE9-NEXT: addis 3, 2, .LCPI102_1@toc@ha 5908; PC64LE9-NEXT: lfs 1, .LCPI102_1@toc@l(3) 5909; PC64LE9-NEXT: addis 3, 2, .LCPI102_2@toc@ha 5910; PC64LE9-NEXT: xxmrghd 34, 1, 0 5911; PC64LE9-NEXT: lfs 0, .LCPI102_2@toc@l(3) 5912; PC64LE9-NEXT: addis 3, 2, .LCPI102_3@toc@ha 5913; PC64LE9-NEXT: lfs 1, .LCPI102_3@toc@l(3) 5914; PC64LE9-NEXT: xxmrghd 35, 1, 0 5915; PC64LE9-NEXT: blr 5916entry: 5917 %result = call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32( 5918 <4 x float><float 42.0, float 43.0, 5919 float 44.0, float 45.0>, 5920 metadata !"fpexcept.strict") #1 5921 ret <4 x double> %result 5922} 5923 5924define <1 x float> @constrained_vector_ceil_v1f32() #0 { 5925; PC64LE-LABEL: constrained_vector_ceil_v1f32: 5926; PC64LE: # %bb.0: # %entry 5927; PC64LE-NEXT: addis 3, 2, .LCPI103_0@toc@ha 5928; PC64LE-NEXT: lfs 0, .LCPI103_0@toc@l(3) 5929; PC64LE-NEXT: addis 3, 2, .LCPI103_1@toc@ha 5930; PC64LE-NEXT: lfs 1, .LCPI103_1@toc@l(3) 5931; PC64LE-NEXT: xsrdpip 0, 0 5932; PC64LE-NEXT: blr 5933; 5934; PC64LE9-LABEL: constrained_vector_ceil_v1f32: 5935; PC64LE9: # %bb.0: # %entry 5936; PC64LE9-NEXT: addis 3, 2, .LCPI103_0@toc@ha 5937; PC64LE9-NEXT: lfs 0, .LCPI103_0@toc@l(3) 5938; PC64LE9-NEXT: addis 3, 2, .LCPI103_1@toc@ha 5939; PC64LE9-NEXT: lfs 1, .LCPI103_1@toc@l(3) 5940; PC64LE9-NEXT: xsrdpip 0, 0 5941; PC64LE9-NEXT: blr 5942entry: 5943 %ceil = call <1 x float> @llvm.experimental.constrained.ceil.v1f32( 5944 <1 x float> <float 1.5>, 5945 metadata !"fpexcept.strict") #1 5946 ret <1 x float> %ceil 5947} 5948 5949define <2 x double> @constrained_vector_ceil_v2f64() #0 { 5950; PC64LE-LABEL: constrained_vector_ceil_v2f64: 5951; PC64LE: # %bb.0: # %entry 5952; PC64LE-NEXT: addis 3, 2, .LCPI104_0@toc@ha 5953; PC64LE-NEXT: addis 4, 2, .LCPI104_1@toc@ha 5954; PC64LE-NEXT: addi 3, 3, .LCPI104_0@toc@l 5955; PC64LE-NEXT: lxvd2x 0, 0, 3 5956; PC64LE-NEXT: addi 3, 4, .LCPI104_1@toc@l 5957; PC64LE-NEXT: lxvd2x 1, 0, 3 5958; PC64LE-NEXT: xvrdpip 0, 0 5959; PC64LE-NEXT: xxswapd 34, 1 5960; PC64LE-NEXT: blr 5961; 5962; PC64LE9-LABEL: constrained_vector_ceil_v2f64: 5963; PC64LE9: # %bb.0: # %entry 5964; PC64LE9-NEXT: addis 3, 2, .LCPI104_0@toc@ha 5965; PC64LE9-NEXT: addi 3, 3, .LCPI104_0@toc@l 5966; PC64LE9-NEXT: lxvx 0, 0, 3 5967; PC64LE9-NEXT: addis 3, 2, .LCPI104_1@toc@ha 5968; PC64LE9-NEXT: addi 3, 3, .LCPI104_1@toc@l 5969; PC64LE9-NEXT: lxvx 34, 0, 3 5970; PC64LE9-NEXT: xvrdpip 0, 0 5971; PC64LE9-NEXT: blr 5972entry: 5973 %ceil = call <2 x double> @llvm.experimental.constrained.ceil.v2f64( 5974 <2 x double> <double 1.1, double 1.9>, 5975 metadata !"fpexcept.strict") #1 5976 ret <2 x double> %ceil 5977} 5978 5979define <3 x float> @constrained_vector_ceil_v3f32() #0 { 5980; PC64LE-LABEL: constrained_vector_ceil_v3f32: 5981; PC64LE: # %bb.0: # %entry 5982; PC64LE-NEXT: addis 3, 2, .LCPI105_0@toc@ha 5983; PC64LE-NEXT: addis 4, 2, .LCPI105_1@toc@ha 5984; PC64LE-NEXT: lfs 0, .LCPI105_0@toc@l(3) 5985; PC64LE-NEXT: addis 3, 2, .LCPI105_2@toc@ha 5986; PC64LE-NEXT: lfs 1, .LCPI105_1@toc@l(4) 5987; PC64LE-NEXT: lfs 2, .LCPI105_2@toc@l(3) 5988; PC64LE-NEXT: addis 3, 2, .LCPI105_3@toc@ha 5989; PC64LE-NEXT: addi 3, 3, .LCPI105_3@toc@l 5990; PC64LE-NEXT: xsrdpip 0, 0 5991; PC64LE-NEXT: lvx 2, 0, 3 5992; PC64LE-NEXT: xsrdpip 0, 1 5993; PC64LE-NEXT: xsrdpip 0, 2 5994; PC64LE-NEXT: blr 5995; 5996; PC64LE9-LABEL: constrained_vector_ceil_v3f32: 5997; PC64LE9: # %bb.0: # %entry 5998; PC64LE9-NEXT: addis 3, 2, .LCPI105_0@toc@ha 5999; PC64LE9-NEXT: lfs 0, .LCPI105_0@toc@l(3) 6000; PC64LE9-NEXT: addis 3, 2, .LCPI105_1@toc@ha 6001; PC64LE9-NEXT: xsrdpip 0, 0 6002; PC64LE9-NEXT: lfs 0, .LCPI105_1@toc@l(3) 6003; PC64LE9-NEXT: addis 3, 2, .LCPI105_2@toc@ha 6004; PC64LE9-NEXT: xsrdpip 0, 0 6005; PC64LE9-NEXT: lfs 0, .LCPI105_2@toc@l(3) 6006; PC64LE9-NEXT: addis 3, 2, .LCPI105_3@toc@ha 6007; PC64LE9-NEXT: addi 3, 3, .LCPI105_3@toc@l 6008; PC64LE9-NEXT: lxvx 34, 0, 3 6009; PC64LE9-NEXT: xsrdpip 0, 0 6010; PC64LE9-NEXT: blr 6011entry: 6012 %ceil = call <3 x float> @llvm.experimental.constrained.ceil.v3f32( 6013 <3 x float> <float 1.5, float 2.5, float 3.5>, 6014 metadata !"fpexcept.strict") #1 6015 ret <3 x float> %ceil 6016} 6017 6018define <3 x double> @constrained_vector_ceil_v3f64() #0 { 6019; PC64LE-LABEL: constrained_vector_ceil_v3f64: 6020; PC64LE: # %bb.0: # %entry 6021; PC64LE-NEXT: addis 3, 2, .LCPI106_0@toc@ha 6022; PC64LE-NEXT: addis 4, 2, .LCPI106_1@toc@ha 6023; PC64LE-NEXT: lfs 0, .LCPI106_0@toc@l(3) 6024; PC64LE-NEXT: addi 3, 4, .LCPI106_1@toc@l 6025; PC64LE-NEXT: lxvd2x 1, 0, 3 6026; PC64LE-NEXT: addis 3, 2, .LCPI106_2@toc@ha 6027; PC64LE-NEXT: xsrdpip 0, 0 6028; PC64LE-NEXT: xvrdpip 0, 1 6029; PC64LE-NEXT: lfs 1, .LCPI106_2@toc@l(3) 6030; PC64LE-NEXT: fmr 2, 1 6031; PC64LE-NEXT: fmr 3, 1 6032; PC64LE-NEXT: blr 6033; 6034; PC64LE9-LABEL: constrained_vector_ceil_v3f64: 6035; PC64LE9: # %bb.0: # %entry 6036; PC64LE9-NEXT: addis 3, 2, .LCPI106_0@toc@ha 6037; PC64LE9-NEXT: lfs 0, .LCPI106_0@toc@l(3) 6038; PC64LE9-NEXT: addis 3, 2, .LCPI106_1@toc@ha 6039; PC64LE9-NEXT: addi 3, 3, .LCPI106_1@toc@l 6040; PC64LE9-NEXT: xsrdpip 0, 0 6041; PC64LE9-NEXT: lxvx 0, 0, 3 6042; PC64LE9-NEXT: addis 3, 2, .LCPI106_2@toc@ha 6043; PC64LE9-NEXT: lfs 1, .LCPI106_2@toc@l(3) 6044; PC64LE9-NEXT: xvrdpip 0, 0 6045; PC64LE9-NEXT: fmr 2, 1 6046; PC64LE9-NEXT: fmr 3, 1 6047; PC64LE9-NEXT: blr 6048entry: 6049 %ceil = call <3 x double> @llvm.experimental.constrained.ceil.v3f64( 6050 <3 x double> <double 1.1, double 1.9, double 1.5>, 6051 metadata !"fpexcept.strict") #1 6052 ret <3 x double> %ceil 6053} 6054 6055define <1 x float> @constrained_vector_floor_v1f32() #0 { 6056; PC64LE-LABEL: constrained_vector_floor_v1f32: 6057; PC64LE: # %bb.0: # %entry 6058; PC64LE-NEXT: addis 3, 2, .LCPI107_0@toc@ha 6059; PC64LE-NEXT: lfs 0, .LCPI107_0@toc@l(3) 6060; PC64LE-NEXT: addis 3, 2, .LCPI107_1@toc@ha 6061; PC64LE-NEXT: lfs 1, .LCPI107_1@toc@l(3) 6062; PC64LE-NEXT: xsrdpim 0, 0 6063; PC64LE-NEXT: blr 6064; 6065; PC64LE9-LABEL: constrained_vector_floor_v1f32: 6066; PC64LE9: # %bb.0: # %entry 6067; PC64LE9-NEXT: addis 3, 2, .LCPI107_0@toc@ha 6068; PC64LE9-NEXT: lfs 0, .LCPI107_0@toc@l(3) 6069; PC64LE9-NEXT: addis 3, 2, .LCPI107_1@toc@ha 6070; PC64LE9-NEXT: lfs 1, .LCPI107_1@toc@l(3) 6071; PC64LE9-NEXT: xsrdpim 0, 0 6072; PC64LE9-NEXT: blr 6073entry: 6074 %floor = call <1 x float> @llvm.experimental.constrained.floor.v1f32( 6075 <1 x float> <float 1.5>, 6076 metadata !"fpexcept.strict") #1 6077 ret <1 x float> %floor 6078} 6079 6080 6081define <2 x double> @constrained_vector_floor_v2f64() #0 { 6082; PC64LE-LABEL: constrained_vector_floor_v2f64: 6083; PC64LE: # %bb.0: # %entry 6084; PC64LE-NEXT: addis 3, 2, .LCPI108_0@toc@ha 6085; PC64LE-NEXT: addis 4, 2, .LCPI108_1@toc@ha 6086; PC64LE-NEXT: addi 3, 3, .LCPI108_0@toc@l 6087; PC64LE-NEXT: lxvd2x 0, 0, 3 6088; PC64LE-NEXT: addi 3, 4, .LCPI108_1@toc@l 6089; PC64LE-NEXT: lxvd2x 1, 0, 3 6090; PC64LE-NEXT: xvrdpim 0, 0 6091; PC64LE-NEXT: xxswapd 34, 1 6092; PC64LE-NEXT: blr 6093; 6094; PC64LE9-LABEL: constrained_vector_floor_v2f64: 6095; PC64LE9: # %bb.0: # %entry 6096; PC64LE9-NEXT: addis 3, 2, .LCPI108_0@toc@ha 6097; PC64LE9-NEXT: addi 3, 3, .LCPI108_0@toc@l 6098; PC64LE9-NEXT: lxvx 0, 0, 3 6099; PC64LE9-NEXT: addis 3, 2, .LCPI108_1@toc@ha 6100; PC64LE9-NEXT: addi 3, 3, .LCPI108_1@toc@l 6101; PC64LE9-NEXT: lxvx 34, 0, 3 6102; PC64LE9-NEXT: xvrdpim 0, 0 6103; PC64LE9-NEXT: blr 6104entry: 6105 %floor = call <2 x double> @llvm.experimental.constrained.floor.v2f64( 6106 <2 x double> <double 1.1, double 1.9>, 6107 metadata !"fpexcept.strict") #1 6108 ret <2 x double> %floor 6109} 6110 6111define <3 x float> @constrained_vector_floor_v3f32() #0 { 6112; PC64LE-LABEL: constrained_vector_floor_v3f32: 6113; PC64LE: # %bb.0: # %entry 6114; PC64LE-NEXT: addis 3, 2, .LCPI109_0@toc@ha 6115; PC64LE-NEXT: addis 4, 2, .LCPI109_1@toc@ha 6116; PC64LE-NEXT: lfs 0, .LCPI109_0@toc@l(3) 6117; PC64LE-NEXT: addis 3, 2, .LCPI109_2@toc@ha 6118; PC64LE-NEXT: lfs 1, .LCPI109_1@toc@l(4) 6119; PC64LE-NEXT: lfs 2, .LCPI109_2@toc@l(3) 6120; PC64LE-NEXT: addis 3, 2, .LCPI109_3@toc@ha 6121; PC64LE-NEXT: addi 3, 3, .LCPI109_3@toc@l 6122; PC64LE-NEXT: xsrdpim 0, 0 6123; PC64LE-NEXT: lvx 2, 0, 3 6124; PC64LE-NEXT: xsrdpim 0, 1 6125; PC64LE-NEXT: xsrdpim 0, 2 6126; PC64LE-NEXT: blr 6127; 6128; PC64LE9-LABEL: constrained_vector_floor_v3f32: 6129; PC64LE9: # %bb.0: # %entry 6130; PC64LE9-NEXT: addis 3, 2, .LCPI109_0@toc@ha 6131; PC64LE9-NEXT: lfs 0, .LCPI109_0@toc@l(3) 6132; PC64LE9-NEXT: addis 3, 2, .LCPI109_1@toc@ha 6133; PC64LE9-NEXT: xsrdpim 0, 0 6134; PC64LE9-NEXT: lfs 0, .LCPI109_1@toc@l(3) 6135; PC64LE9-NEXT: addis 3, 2, .LCPI109_2@toc@ha 6136; PC64LE9-NEXT: xsrdpim 0, 0 6137; PC64LE9-NEXT: lfs 0, .LCPI109_2@toc@l(3) 6138; PC64LE9-NEXT: addis 3, 2, .LCPI109_3@toc@ha 6139; PC64LE9-NEXT: addi 3, 3, .LCPI109_3@toc@l 6140; PC64LE9-NEXT: lxvx 34, 0, 3 6141; PC64LE9-NEXT: xsrdpim 0, 0 6142; PC64LE9-NEXT: blr 6143entry: 6144 %floor = call <3 x float> @llvm.experimental.constrained.floor.v3f32( 6145 <3 x float> <float 1.5, float 2.5, float 3.5>, 6146 metadata !"fpexcept.strict") #1 6147 ret <3 x float> %floor 6148} 6149 6150define <3 x double> @constrained_vector_floor_v3f64() #0 { 6151; PC64LE-LABEL: constrained_vector_floor_v3f64: 6152; PC64LE: # %bb.0: # %entry 6153; PC64LE-NEXT: addis 3, 2, .LCPI110_0@toc@ha 6154; PC64LE-NEXT: addis 4, 2, .LCPI110_1@toc@ha 6155; PC64LE-NEXT: lfs 0, .LCPI110_0@toc@l(3) 6156; PC64LE-NEXT: addi 3, 4, .LCPI110_1@toc@l 6157; PC64LE-NEXT: lxvd2x 1, 0, 3 6158; PC64LE-NEXT: addis 3, 2, .LCPI110_2@toc@ha 6159; PC64LE-NEXT: xsrdpim 0, 0 6160; PC64LE-NEXT: xvrdpim 0, 1 6161; PC64LE-NEXT: lfs 1, .LCPI110_2@toc@l(3) 6162; PC64LE-NEXT: fmr 2, 1 6163; PC64LE-NEXT: fmr 3, 1 6164; PC64LE-NEXT: blr 6165; 6166; PC64LE9-LABEL: constrained_vector_floor_v3f64: 6167; PC64LE9: # %bb.0: # %entry 6168; PC64LE9-NEXT: addis 3, 2, .LCPI110_0@toc@ha 6169; PC64LE9-NEXT: lfs 0, .LCPI110_0@toc@l(3) 6170; PC64LE9-NEXT: addis 3, 2, .LCPI110_1@toc@ha 6171; PC64LE9-NEXT: addi 3, 3, .LCPI110_1@toc@l 6172; PC64LE9-NEXT: xsrdpim 0, 0 6173; PC64LE9-NEXT: lxvx 0, 0, 3 6174; PC64LE9-NEXT: addis 3, 2, .LCPI110_2@toc@ha 6175; PC64LE9-NEXT: lfs 1, .LCPI110_2@toc@l(3) 6176; PC64LE9-NEXT: xvrdpim 0, 0 6177; PC64LE9-NEXT: fmr 2, 1 6178; PC64LE9-NEXT: fmr 3, 1 6179; PC64LE9-NEXT: blr 6180entry: 6181 %floor = call <3 x double> @llvm.experimental.constrained.floor.v3f64( 6182 <3 x double> <double 1.1, double 1.9, double 1.5>, 6183 metadata !"fpexcept.strict") #1 6184 ret <3 x double> %floor 6185} 6186 6187define <1 x float> @constrained_vector_round_v1f32() #0 { 6188; PC64LE-LABEL: constrained_vector_round_v1f32: 6189; PC64LE: # %bb.0: # %entry 6190; PC64LE-NEXT: addis 3, 2, .LCPI111_0@toc@ha 6191; PC64LE-NEXT: lfs 0, .LCPI111_0@toc@l(3) 6192; PC64LE-NEXT: addis 3, 2, .LCPI111_1@toc@ha 6193; PC64LE-NEXT: lfs 1, .LCPI111_1@toc@l(3) 6194; PC64LE-NEXT: xsrdpi 0, 0 6195; PC64LE-NEXT: blr 6196; 6197; PC64LE9-LABEL: constrained_vector_round_v1f32: 6198; PC64LE9: # %bb.0: # %entry 6199; PC64LE9-NEXT: addis 3, 2, .LCPI111_0@toc@ha 6200; PC64LE9-NEXT: lfs 0, .LCPI111_0@toc@l(3) 6201; PC64LE9-NEXT: addis 3, 2, .LCPI111_1@toc@ha 6202; PC64LE9-NEXT: lfs 1, .LCPI111_1@toc@l(3) 6203; PC64LE9-NEXT: xsrdpi 0, 0 6204; PC64LE9-NEXT: blr 6205entry: 6206 %round = call <1 x float> @llvm.experimental.constrained.round.v1f32( 6207 <1 x float> <float 1.5>, 6208 metadata !"fpexcept.strict") #1 6209 ret <1 x float> %round 6210} 6211 6212define <2 x double> @constrained_vector_round_v2f64() #0 { 6213; PC64LE-LABEL: constrained_vector_round_v2f64: 6214; PC64LE: # %bb.0: # %entry 6215; PC64LE-NEXT: addis 3, 2, .LCPI112_0@toc@ha 6216; PC64LE-NEXT: addis 4, 2, .LCPI112_1@toc@ha 6217; PC64LE-NEXT: addi 3, 3, .LCPI112_0@toc@l 6218; PC64LE-NEXT: lxvd2x 0, 0, 3 6219; PC64LE-NEXT: addi 3, 4, .LCPI112_1@toc@l 6220; PC64LE-NEXT: lxvd2x 1, 0, 3 6221; PC64LE-NEXT: xvrdpi 0, 0 6222; PC64LE-NEXT: xxswapd 34, 1 6223; PC64LE-NEXT: blr 6224; 6225; PC64LE9-LABEL: constrained_vector_round_v2f64: 6226; PC64LE9: # %bb.0: # %entry 6227; PC64LE9-NEXT: addis 3, 2, .LCPI112_0@toc@ha 6228; PC64LE9-NEXT: addi 3, 3, .LCPI112_0@toc@l 6229; PC64LE9-NEXT: lxvx 0, 0, 3 6230; PC64LE9-NEXT: addis 3, 2, .LCPI112_1@toc@ha 6231; PC64LE9-NEXT: addi 3, 3, .LCPI112_1@toc@l 6232; PC64LE9-NEXT: lxvx 34, 0, 3 6233; PC64LE9-NEXT: xvrdpi 0, 0 6234; PC64LE9-NEXT: blr 6235entry: 6236 %round = call <2 x double> @llvm.experimental.constrained.round.v2f64( 6237 <2 x double> <double 1.1, double 1.9>, 6238 metadata !"fpexcept.strict") #1 6239 ret <2 x double> %round 6240} 6241 6242define <3 x float> @constrained_vector_round_v3f32() #0 { 6243; PC64LE-LABEL: constrained_vector_round_v3f32: 6244; PC64LE: # %bb.0: # %entry 6245; PC64LE-NEXT: addis 3, 2, .LCPI113_0@toc@ha 6246; PC64LE-NEXT: addis 4, 2, .LCPI113_1@toc@ha 6247; PC64LE-NEXT: lfs 0, .LCPI113_0@toc@l(3) 6248; PC64LE-NEXT: addis 3, 2, .LCPI113_2@toc@ha 6249; PC64LE-NEXT: lfs 1, .LCPI113_1@toc@l(4) 6250; PC64LE-NEXT: lfs 2, .LCPI113_2@toc@l(3) 6251; PC64LE-NEXT: addis 3, 2, .LCPI113_3@toc@ha 6252; PC64LE-NEXT: addi 3, 3, .LCPI113_3@toc@l 6253; PC64LE-NEXT: xsrdpi 0, 0 6254; PC64LE-NEXT: lvx 2, 0, 3 6255; PC64LE-NEXT: xsrdpi 0, 1 6256; PC64LE-NEXT: xsrdpi 0, 2 6257; PC64LE-NEXT: blr 6258; 6259; PC64LE9-LABEL: constrained_vector_round_v3f32: 6260; PC64LE9: # %bb.0: # %entry 6261; PC64LE9-NEXT: addis 3, 2, .LCPI113_0@toc@ha 6262; PC64LE9-NEXT: lfs 0, .LCPI113_0@toc@l(3) 6263; PC64LE9-NEXT: addis 3, 2, .LCPI113_1@toc@ha 6264; PC64LE9-NEXT: xsrdpi 0, 0 6265; PC64LE9-NEXT: lfs 0, .LCPI113_1@toc@l(3) 6266; PC64LE9-NEXT: addis 3, 2, .LCPI113_2@toc@ha 6267; PC64LE9-NEXT: xsrdpi 0, 0 6268; PC64LE9-NEXT: lfs 0, .LCPI113_2@toc@l(3) 6269; PC64LE9-NEXT: addis 3, 2, .LCPI113_3@toc@ha 6270; PC64LE9-NEXT: addi 3, 3, .LCPI113_3@toc@l 6271; PC64LE9-NEXT: lxvx 34, 0, 3 6272; PC64LE9-NEXT: xsrdpi 0, 0 6273; PC64LE9-NEXT: blr 6274entry: 6275 %round = call <3 x float> @llvm.experimental.constrained.round.v3f32( 6276 <3 x float> <float 1.5, float 2.5, float 3.5>, 6277 metadata !"fpexcept.strict") #1 6278 ret <3 x float> %round 6279} 6280 6281 6282define <3 x double> @constrained_vector_round_v3f64() #0 { 6283; PC64LE-LABEL: constrained_vector_round_v3f64: 6284; PC64LE: # %bb.0: # %entry 6285; PC64LE-NEXT: addis 4, 2, .LCPI114_1@toc@ha 6286; PC64LE-NEXT: addis 3, 2, .LCPI114_0@toc@ha 6287; PC64LE-NEXT: addi 4, 4, .LCPI114_1@toc@l 6288; PC64LE-NEXT: lxvd2x 1, 0, 4 6289; PC64LE-NEXT: addis 4, 2, .LCPI114_3@toc@ha 6290; PC64LE-NEXT: lfs 0, .LCPI114_0@toc@l(3) 6291; PC64LE-NEXT: addis 3, 2, .LCPI114_2@toc@ha 6292; PC64LE-NEXT: lfs 2, .LCPI114_3@toc@l(4) 6293; PC64LE-NEXT: xsrdpi 0, 0 6294; PC64LE-NEXT: xvrdpi 0, 1 6295; PC64LE-NEXT: lfs 1, .LCPI114_2@toc@l(3) 6296; PC64LE-NEXT: fmr 3, 2 6297; PC64LE-NEXT: blr 6298; 6299; PC64LE9-LABEL: constrained_vector_round_v3f64: 6300; PC64LE9: # %bb.0: # %entry 6301; PC64LE9-NEXT: addis 3, 2, .LCPI114_0@toc@ha 6302; PC64LE9-NEXT: lfs 0, .LCPI114_0@toc@l(3) 6303; PC64LE9-NEXT: addis 3, 2, .LCPI114_1@toc@ha 6304; PC64LE9-NEXT: addi 3, 3, .LCPI114_1@toc@l 6305; PC64LE9-NEXT: xsrdpi 0, 0 6306; PC64LE9-NEXT: lxvx 0, 0, 3 6307; PC64LE9-NEXT: addis 3, 2, .LCPI114_2@toc@ha 6308; PC64LE9-NEXT: lfs 1, .LCPI114_2@toc@l(3) 6309; PC64LE9-NEXT: addis 3, 2, .LCPI114_3@toc@ha 6310; PC64LE9-NEXT: lfs 2, .LCPI114_3@toc@l(3) 6311; PC64LE9-NEXT: xvrdpi 0, 0 6312; PC64LE9-NEXT: fmr 3, 2 6313; PC64LE9-NEXT: blr 6314entry: 6315 %round = call <3 x double> @llvm.experimental.constrained.round.v3f64( 6316 <3 x double> <double 1.1, double 1.9, double 1.5>, 6317 metadata !"fpexcept.strict") #1 6318 ret <3 x double> %round 6319} 6320 6321define <1 x float> @constrained_vector_trunc_v1f32() #0 { 6322; PC64LE-LABEL: constrained_vector_trunc_v1f32: 6323; PC64LE: # %bb.0: # %entry 6324; PC64LE-NEXT: addis 3, 2, .LCPI115_0@toc@ha 6325; PC64LE-NEXT: lfs 0, .LCPI115_0@toc@l(3) 6326; PC64LE-NEXT: addis 3, 2, .LCPI115_1@toc@ha 6327; PC64LE-NEXT: lfs 1, .LCPI115_1@toc@l(3) 6328; PC64LE-NEXT: xsrdpiz 0, 0 6329; PC64LE-NEXT: blr 6330; 6331; PC64LE9-LABEL: constrained_vector_trunc_v1f32: 6332; PC64LE9: # %bb.0: # %entry 6333; PC64LE9-NEXT: addis 3, 2, .LCPI115_0@toc@ha 6334; PC64LE9-NEXT: lfs 0, .LCPI115_0@toc@l(3) 6335; PC64LE9-NEXT: addis 3, 2, .LCPI115_1@toc@ha 6336; PC64LE9-NEXT: lfs 1, .LCPI115_1@toc@l(3) 6337; PC64LE9-NEXT: xsrdpiz 0, 0 6338; PC64LE9-NEXT: blr 6339entry: 6340 %trunc = call <1 x float> @llvm.experimental.constrained.trunc.v1f32( 6341 <1 x float> <float 1.5>, 6342 metadata !"fpexcept.strict") #1 6343 ret <1 x float> %trunc 6344} 6345 6346define <2 x double> @constrained_vector_trunc_v2f64() #0 { 6347; PC64LE-LABEL: constrained_vector_trunc_v2f64: 6348; PC64LE: # %bb.0: # %entry 6349; PC64LE-NEXT: addis 3, 2, .LCPI116_0@toc@ha 6350; PC64LE-NEXT: addis 4, 2, .LCPI116_1@toc@ha 6351; PC64LE-NEXT: addi 3, 3, .LCPI116_0@toc@l 6352; PC64LE-NEXT: lxvd2x 0, 0, 3 6353; PC64LE-NEXT: addi 3, 4, .LCPI116_1@toc@l 6354; PC64LE-NEXT: lxvd2x 1, 0, 3 6355; PC64LE-NEXT: xvrdpiz 0, 0 6356; PC64LE-NEXT: xxswapd 34, 1 6357; PC64LE-NEXT: blr 6358; 6359; PC64LE9-LABEL: constrained_vector_trunc_v2f64: 6360; PC64LE9: # %bb.0: # %entry 6361; PC64LE9-NEXT: addis 3, 2, .LCPI116_0@toc@ha 6362; PC64LE9-NEXT: addi 3, 3, .LCPI116_0@toc@l 6363; PC64LE9-NEXT: lxvx 0, 0, 3 6364; PC64LE9-NEXT: addis 3, 2, .LCPI116_1@toc@ha 6365; PC64LE9-NEXT: addi 3, 3, .LCPI116_1@toc@l 6366; PC64LE9-NEXT: lxvx 34, 0, 3 6367; PC64LE9-NEXT: xvrdpiz 0, 0 6368; PC64LE9-NEXT: blr 6369entry: 6370 %trunc = call <2 x double> @llvm.experimental.constrained.trunc.v2f64( 6371 <2 x double> <double 1.1, double 1.9>, 6372 metadata !"fpexcept.strict") #1 6373 ret <2 x double> %trunc 6374} 6375 6376define <3 x float> @constrained_vector_trunc_v3f32() #0 { 6377; PC64LE-LABEL: constrained_vector_trunc_v3f32: 6378; PC64LE: # %bb.0: # %entry 6379; PC64LE-NEXT: addis 3, 2, .LCPI117_0@toc@ha 6380; PC64LE-NEXT: addis 4, 2, .LCPI117_1@toc@ha 6381; PC64LE-NEXT: lfs 0, .LCPI117_0@toc@l(3) 6382; PC64LE-NEXT: addis 3, 2, .LCPI117_2@toc@ha 6383; PC64LE-NEXT: lfs 1, .LCPI117_1@toc@l(4) 6384; PC64LE-NEXT: lfs 2, .LCPI117_2@toc@l(3) 6385; PC64LE-NEXT: addis 3, 2, .LCPI117_3@toc@ha 6386; PC64LE-NEXT: addi 3, 3, .LCPI117_3@toc@l 6387; PC64LE-NEXT: xsrdpiz 0, 0 6388; PC64LE-NEXT: lvx 2, 0, 3 6389; PC64LE-NEXT: xsrdpiz 0, 1 6390; PC64LE-NEXT: xsrdpiz 0, 2 6391; PC64LE-NEXT: blr 6392; 6393; PC64LE9-LABEL: constrained_vector_trunc_v3f32: 6394; PC64LE9: # %bb.0: # %entry 6395; PC64LE9-NEXT: addis 3, 2, .LCPI117_0@toc@ha 6396; PC64LE9-NEXT: lfs 0, .LCPI117_0@toc@l(3) 6397; PC64LE9-NEXT: addis 3, 2, .LCPI117_1@toc@ha 6398; PC64LE9-NEXT: xsrdpiz 0, 0 6399; PC64LE9-NEXT: lfs 0, .LCPI117_1@toc@l(3) 6400; PC64LE9-NEXT: addis 3, 2, .LCPI117_2@toc@ha 6401; PC64LE9-NEXT: xsrdpiz 0, 0 6402; PC64LE9-NEXT: lfs 0, .LCPI117_2@toc@l(3) 6403; PC64LE9-NEXT: addis 3, 2, .LCPI117_3@toc@ha 6404; PC64LE9-NEXT: addi 3, 3, .LCPI117_3@toc@l 6405; PC64LE9-NEXT: lxvx 34, 0, 3 6406; PC64LE9-NEXT: xsrdpiz 0, 0 6407; PC64LE9-NEXT: blr 6408entry: 6409 %trunc = call <3 x float> @llvm.experimental.constrained.trunc.v3f32( 6410 <3 x float> <float 1.5, float 2.5, float 3.5>, 6411 metadata !"fpexcept.strict") #1 6412 ret <3 x float> %trunc 6413} 6414 6415define <3 x double> @constrained_vector_trunc_v3f64() #0 { 6416; PC64LE-LABEL: constrained_vector_trunc_v3f64: 6417; PC64LE: # %bb.0: # %entry 6418; PC64LE-NEXT: addis 3, 2, .LCPI118_0@toc@ha 6419; PC64LE-NEXT: addis 4, 2, .LCPI118_1@toc@ha 6420; PC64LE-NEXT: lfs 0, .LCPI118_0@toc@l(3) 6421; PC64LE-NEXT: addi 3, 4, .LCPI118_1@toc@l 6422; PC64LE-NEXT: lxvd2x 1, 0, 3 6423; PC64LE-NEXT: addis 3, 2, .LCPI118_2@toc@ha 6424; PC64LE-NEXT: xsrdpiz 0, 0 6425; PC64LE-NEXT: xvrdpiz 0, 1 6426; PC64LE-NEXT: lfs 1, .LCPI118_2@toc@l(3) 6427; PC64LE-NEXT: fmr 2, 1 6428; PC64LE-NEXT: fmr 3, 1 6429; PC64LE-NEXT: blr 6430; 6431; PC64LE9-LABEL: constrained_vector_trunc_v3f64: 6432; PC64LE9: # %bb.0: # %entry 6433; PC64LE9-NEXT: addis 3, 2, .LCPI118_0@toc@ha 6434; PC64LE9-NEXT: lfs 0, .LCPI118_0@toc@l(3) 6435; PC64LE9-NEXT: addis 3, 2, .LCPI118_1@toc@ha 6436; PC64LE9-NEXT: addi 3, 3, .LCPI118_1@toc@l 6437; PC64LE9-NEXT: xsrdpiz 0, 0 6438; PC64LE9-NEXT: lxvx 0, 0, 3 6439; PC64LE9-NEXT: addis 3, 2, .LCPI118_2@toc@ha 6440; PC64LE9-NEXT: lfs 1, .LCPI118_2@toc@l(3) 6441; PC64LE9-NEXT: xvrdpiz 0, 0 6442; PC64LE9-NEXT: fmr 2, 1 6443; PC64LE9-NEXT: fmr 3, 1 6444; PC64LE9-NEXT: blr 6445entry: 6446 %trunc = call <3 x double> @llvm.experimental.constrained.trunc.v3f64( 6447 <3 x double> <double 1.1, double 1.9, double 1.5>, 6448 metadata !"fpexcept.strict") #1 6449 ret <3 x double> %trunc 6450} 6451 6452attributes #0 = { nounwind strictfp noimplicitfloat } 6453attributes #1 = { strictfp } 6454 6455; Single width declarations 6456declare <2 x double> @llvm.experimental.constrained.fadd.v2f64(<2 x double>, <2 x double>, metadata, metadata) 6457declare <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double>, <2 x double>, metadata, metadata) 6458declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata) 6459declare <2 x double> @llvm.experimental.constrained.fdiv.v2f64(<2 x double>, <2 x double>, metadata, metadata) 6460declare <2 x double> @llvm.experimental.constrained.frem.v2f64(<2 x double>, <2 x double>, metadata, metadata) 6461declare <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double>, metadata, metadata) 6462declare <2 x double> @llvm.experimental.constrained.pow.v2f64(<2 x double>, <2 x double>, metadata, metadata) 6463declare <2 x double> @llvm.experimental.constrained.powi.v2f64(<2 x double>, i32, metadata, metadata) 6464declare <2 x double> @llvm.experimental.constrained.sin.v2f64(<2 x double>, metadata, metadata) 6465declare <2 x double> @llvm.experimental.constrained.cos.v2f64(<2 x double>, metadata, metadata) 6466declare <2 x double> @llvm.experimental.constrained.exp.v2f64(<2 x double>, metadata, metadata) 6467declare <2 x double> @llvm.experimental.constrained.exp2.v2f64(<2 x double>, metadata, metadata) 6468declare <2 x double> @llvm.experimental.constrained.log.v2f64(<2 x double>, metadata, metadata) 6469declare <2 x double> @llvm.experimental.constrained.log10.v2f64(<2 x double>, metadata, metadata) 6470declare <2 x double> @llvm.experimental.constrained.log2.v2f64(<2 x double>, metadata, metadata) 6471declare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata) 6472declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata) 6473declare <2 x double> @llvm.experimental.constrained.maxnum.v2f64(<2 x double>, <2 x double>, metadata) 6474declare <2 x double> @llvm.experimental.constrained.minnum.v2f64(<2 x double>, <2 x double>, metadata) 6475declare <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(<2 x double>, metadata, metadata) 6476declare <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(<2 x float>, metadata) 6477declare <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double>, metadata) 6478declare <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double>, metadata) 6479declare <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double>, metadata) 6480declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata) 6481 6482; Scalar width declarations 6483declare <1 x float> @llvm.experimental.constrained.fadd.v1f32(<1 x float>, <1 x float>, metadata, metadata) 6484declare <1 x float> @llvm.experimental.constrained.fsub.v1f32(<1 x float>, <1 x float>, metadata, metadata) 6485declare <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float>, <1 x float>, metadata, metadata) 6486declare <1 x float> @llvm.experimental.constrained.fdiv.v1f32(<1 x float>, <1 x float>, metadata, metadata) 6487declare <1 x float> @llvm.experimental.constrained.frem.v1f32(<1 x float>, <1 x float>, metadata, metadata) 6488declare <1 x float> @llvm.experimental.constrained.sqrt.v1f32(<1 x float>, metadata, metadata) 6489declare <1 x float> @llvm.experimental.constrained.pow.v1f32(<1 x float>, <1 x float>, metadata, metadata) 6490declare <1 x float> @llvm.experimental.constrained.powi.v1f32(<1 x float>, i32, metadata, metadata) 6491declare <1 x float> @llvm.experimental.constrained.sin.v1f32(<1 x float>, metadata, metadata) 6492declare <1 x float> @llvm.experimental.constrained.cos.v1f32(<1 x float>, metadata, metadata) 6493declare <1 x float> @llvm.experimental.constrained.exp.v1f32(<1 x float>, metadata, metadata) 6494declare <1 x float> @llvm.experimental.constrained.exp2.v1f32(<1 x float>, metadata, metadata) 6495declare <1 x float> @llvm.experimental.constrained.log.v1f32(<1 x float>, metadata, metadata) 6496declare <1 x float> @llvm.experimental.constrained.log10.v1f32(<1 x float>, metadata, metadata) 6497declare <1 x float> @llvm.experimental.constrained.log2.v1f32(<1 x float>, metadata, metadata) 6498declare <1 x float> @llvm.experimental.constrained.rint.v1f32(<1 x float>, metadata, metadata) 6499declare <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(<1 x float>, metadata, metadata) 6500declare <1 x float> @llvm.experimental.constrained.maxnum.v1f32(<1 x float>, <1 x float>, metadata) 6501declare <1 x float> @llvm.experimental.constrained.minnum.v1f32(<1 x float>, <1 x float>, metadata) 6502declare <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(<1 x double>, metadata, metadata) 6503declare <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(<1 x float>, metadata) 6504declare <1 x float> @llvm.experimental.constrained.ceil.v1f32(<1 x float>, metadata) 6505declare <1 x float> @llvm.experimental.constrained.floor.v1f32(<1 x float>, metadata) 6506declare <1 x float> @llvm.experimental.constrained.round.v1f32(<1 x float>, metadata) 6507declare <1 x float> @llvm.experimental.constrained.trunc.v1f32(<1 x float>, metadata) 6508 6509; Illegal width declarations 6510declare <3 x float> @llvm.experimental.constrained.fadd.v3f32(<3 x float>, <3 x float>, metadata, metadata) 6511declare <3 x double> @llvm.experimental.constrained.fadd.v3f64(<3 x double>, <3 x double>, metadata, metadata) 6512declare <3 x float> @llvm.experimental.constrained.fsub.v3f32(<3 x float>, <3 x float>, metadata, metadata) 6513declare <3 x double> @llvm.experimental.constrained.fsub.v3f64(<3 x double>, <3 x double>, metadata, metadata) 6514declare <3 x float> @llvm.experimental.constrained.fmul.v3f32(<3 x float>, <3 x float>, metadata, metadata) 6515declare <3 x double> @llvm.experimental.constrained.fmul.v3f64(<3 x double>, <3 x double>, metadata, metadata) 6516declare <3 x float> @llvm.experimental.constrained.fdiv.v3f32(<3 x float>, <3 x float>, metadata, metadata) 6517declare <3 x double> @llvm.experimental.constrained.fdiv.v3f64(<3 x double>, <3 x double>, metadata, metadata) 6518declare <3 x float> @llvm.experimental.constrained.frem.v3f32(<3 x float>, <3 x float>, metadata, metadata) 6519declare <3 x double> @llvm.experimental.constrained.frem.v3f64(<3 x double>, <3 x double>, metadata, metadata) 6520declare <3 x float> @llvm.experimental.constrained.sqrt.v3f32(<3 x float>, metadata, metadata) 6521declare <3 x double> @llvm.experimental.constrained.sqrt.v3f64(<3 x double>, metadata, metadata) 6522declare <3 x float> @llvm.experimental.constrained.pow.v3f32(<3 x float>, <3 x float>, metadata, metadata) 6523declare <3 x double> @llvm.experimental.constrained.pow.v3f64(<3 x double>, <3 x double>, metadata, metadata) 6524declare <3 x float> @llvm.experimental.constrained.powi.v3f32(<3 x float>, i32, metadata, metadata) 6525declare <3 x double> @llvm.experimental.constrained.powi.v3f64(<3 x double>, i32, metadata, metadata) 6526declare <3 x float> @llvm.experimental.constrained.sin.v3f32(<3 x float>, metadata, metadata) 6527declare <3 x double> @llvm.experimental.constrained.sin.v3f64(<3 x double>, metadata, metadata) 6528declare <3 x float> @llvm.experimental.constrained.cos.v3f32(<3 x float>, metadata, metadata) 6529declare <3 x double> @llvm.experimental.constrained.cos.v3f64(<3 x double>, metadata, metadata) 6530declare <3 x float> @llvm.experimental.constrained.exp.v3f32(<3 x float>, metadata, metadata) 6531declare <3 x double> @llvm.experimental.constrained.exp.v3f64(<3 x double>, metadata, metadata) 6532declare <3 x float> @llvm.experimental.constrained.exp2.v3f32(<3 x float>, metadata, metadata) 6533declare <3 x double> @llvm.experimental.constrained.exp2.v3f64(<3 x double>, metadata, metadata) 6534declare <3 x float> @llvm.experimental.constrained.log.v3f32(<3 x float>, metadata, metadata) 6535declare <3 x double> @llvm.experimental.constrained.log.v3f64(<3 x double>, metadata, metadata) 6536declare <3 x float> @llvm.experimental.constrained.log10.v3f32(<3 x float>, metadata, metadata) 6537declare <3 x double> @llvm.experimental.constrained.log10.v3f64(<3 x double>, metadata, metadata) 6538declare <3 x float> @llvm.experimental.constrained.log2.v3f32(<3 x float>, metadata, metadata) 6539declare <3 x double> @llvm.experimental.constrained.log2.v3f64(<3 x double>, metadata, metadata) 6540declare <3 x float> @llvm.experimental.constrained.rint.v3f32(<3 x float>, metadata, metadata) 6541declare <3 x double> @llvm.experimental.constrained.rint.v3f64(<3 x double>, metadata, metadata) 6542declare <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(<3 x float>, metadata, metadata) 6543declare <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(<3 x double>, metadata, metadata) 6544declare <3 x float> @llvm.experimental.constrained.maxnum.v3f32(<3 x float>, <3 x float>, metadata) 6545declare <3 x double> @llvm.experimental.constrained.maxnum.v3f64(<3 x double>, <3 x double>, metadata) 6546declare <3 x float> @llvm.experimental.constrained.minnum.v3f32(<3 x float>, <3 x float>, metadata) 6547declare <3 x double> @llvm.experimental.constrained.minnum.v3f64(<3 x double>, <3 x double>, metadata) 6548declare <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(<3 x double>, metadata, metadata) 6549declare <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(<3 x float>, metadata) 6550declare <3 x float> @llvm.experimental.constrained.ceil.v3f32(<3 x float>, metadata) 6551declare <3 x double> @llvm.experimental.constrained.ceil.v3f64(<3 x double>, metadata) 6552declare <3 x float> @llvm.experimental.constrained.floor.v3f32(<3 x float>, metadata) 6553declare <3 x double> @llvm.experimental.constrained.floor.v3f64(<3 x double>, metadata) 6554declare <3 x float> @llvm.experimental.constrained.round.v3f32(<3 x float>, metadata) 6555declare <3 x double> @llvm.experimental.constrained.round.v3f64(<3 x double>, metadata) 6556declare <3 x float> @llvm.experimental.constrained.trunc.v3f32(<3 x float>, metadata) 6557declare <3 x double> @llvm.experimental.constrained.trunc.v3f64(<3 x double>, metadata) 6558 6559; Double width declarations 6560declare <4 x double> @llvm.experimental.constrained.fadd.v4f64(<4 x double>, <4 x double>, metadata, metadata) 6561declare <4 x double> @llvm.experimental.constrained.fsub.v4f64(<4 x double>, <4 x double>, metadata, metadata) 6562declare <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double>, <4 x double>, metadata, metadata) 6563declare <4 x double> @llvm.experimental.constrained.fdiv.v4f64(<4 x double>, <4 x double>, metadata, metadata) 6564declare <4 x double> @llvm.experimental.constrained.frem.v4f64(<4 x double>, <4 x double>, metadata, metadata) 6565declare <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double>, metadata, metadata) 6566declare <4 x double> @llvm.experimental.constrained.pow.v4f64(<4 x double>, <4 x double>, metadata, metadata) 6567declare <4 x double> @llvm.experimental.constrained.powi.v4f64(<4 x double>, i32, metadata, metadata) 6568declare <4 x double> @llvm.experimental.constrained.sin.v4f64(<4 x double>, metadata, metadata) 6569declare <4 x double> @llvm.experimental.constrained.cos.v4f64(<4 x double>, metadata, metadata) 6570declare <4 x double> @llvm.experimental.constrained.exp.v4f64(<4 x double>, metadata, metadata) 6571declare <4 x double> @llvm.experimental.constrained.exp2.v4f64(<4 x double>, metadata, metadata) 6572declare <4 x double> @llvm.experimental.constrained.log.v4f64(<4 x double>, metadata, metadata) 6573declare <4 x double> @llvm.experimental.constrained.log10.v4f64(<4 x double>, metadata, metadata) 6574declare <4 x double> @llvm.experimental.constrained.log2.v4f64(<4 x double>, metadata, metadata) 6575declare <4 x double> @llvm.experimental.constrained.rint.v4f64(<4 x double>, metadata, metadata) 6576declare <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(<4 x double>, metadata, metadata) 6577declare <4 x double> @llvm.experimental.constrained.maxnum.v4f64(<4 x double>, <4 x double>, metadata) 6578declare <4 x double> @llvm.experimental.constrained.minnum.v4f64(<4 x double>, <4 x double>, metadata) 6579declare <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(<4 x double>, metadata, metadata) 6580declare <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float>, metadata) 6581declare <4 x double> @llvm.experimental.constrained.ceil.v4f64(<4 x double>, metadata) 6582declare <4 x double> @llvm.experimental.constrained.floor.v4f64(<4 x double>, metadata) 6583declare <4 x double> @llvm.experimental.constrained.round.v4f64(<4 x double>, metadata) 6584declare <4 x double> @llvm.experimental.constrained.trunc.v4f64(<4 x double>, metadata) 6585