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(<1 x float> %x, <1 x float> %y) #0 { 6; PC64LE-LABEL: constrained_vector_fdiv_v1f32: 7; PC64LE: # %bb.0: # %entry 8; PC64LE-NEXT: xsdivsp 1, 1, 2 9; PC64LE-NEXT: blr 10; 11; PC64LE9-LABEL: constrained_vector_fdiv_v1f32: 12; PC64LE9: # %bb.0: # %entry 13; PC64LE9-NEXT: xsdivsp 1, 1, 2 14; PC64LE9-NEXT: blr 15entry: 16 %div = call <1 x float> @llvm.experimental.constrained.fdiv.v1f32( 17 <1 x float> %x, 18 <1 x float> %y, 19 metadata !"round.dynamic", 20 metadata !"fpexcept.strict") #1 21 ret <1 x float> %div 22} 23 24define <2 x double> @constrained_vector_fdiv_v2f64(<2 x double> %x, <2 x double> %y) #0 { 25; PC64LE-LABEL: constrained_vector_fdiv_v2f64: 26; PC64LE: # %bb.0: # %entry 27; PC64LE-NEXT: xvdivdp 34, 34, 35 28; PC64LE-NEXT: blr 29; 30; PC64LE9-LABEL: constrained_vector_fdiv_v2f64: 31; PC64LE9: # %bb.0: # %entry 32; PC64LE9-NEXT: xvdivdp 34, 34, 35 33; PC64LE9-NEXT: blr 34entry: 35 %div = call <2 x double> @llvm.experimental.constrained.fdiv.v2f64( 36 <2 x double> %x, 37 <2 x double> %y, 38 metadata !"round.dynamic", 39 metadata !"fpexcept.strict") #1 40 ret <2 x double> %div 41} 42 43define <3 x float> @constrained_vector_fdiv_v3f32(<3 x float> %x, <3 x float> %y) #0 { 44; PC64LE-LABEL: constrained_vector_fdiv_v3f32: 45; PC64LE: # %bb.0: # %entry 46; PC64LE-NEXT: xxswapd 0, 35 47; PC64LE-NEXT: xxsldwi 1, 35, 35, 3 48; PC64LE-NEXT: addis 3, 2, .LCPI2_0@toc@ha 49; PC64LE-NEXT: xxsldwi 2, 34, 34, 3 50; PC64LE-NEXT: xxswapd 3, 34 51; PC64LE-NEXT: addi 3, 3, .LCPI2_0@toc@l 52; PC64LE-NEXT: xxsldwi 4, 35, 35, 1 53; PC64LE-NEXT: xxsldwi 5, 34, 34, 1 54; PC64LE-NEXT: lvx 4, 0, 3 55; PC64LE-NEXT: xscvspdpn 0, 0 56; PC64LE-NEXT: xscvspdpn 1, 1 57; PC64LE-NEXT: xscvspdpn 2, 2 58; PC64LE-NEXT: xscvspdpn 3, 3 59; PC64LE-NEXT: xscvspdpn 4, 4 60; PC64LE-NEXT: xscvspdpn 5, 5 61; PC64LE-NEXT: xsdivsp 1, 2, 1 62; PC64LE-NEXT: xsdivsp 0, 3, 0 63; PC64LE-NEXT: xsdivsp 2, 5, 4 64; PC64LE-NEXT: xscvdpspn 1, 1 65; PC64LE-NEXT: xscvdpspn 0, 0 66; PC64LE-NEXT: xscvdpspn 34, 2 67; PC64LE-NEXT: xxmrghw 35, 0, 1 68; PC64LE-NEXT: vperm 2, 2, 3, 4 69; PC64LE-NEXT: blr 70; 71; PC64LE9-LABEL: constrained_vector_fdiv_v3f32: 72; PC64LE9: # %bb.0: # %entry 73; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1 74; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1 75; PC64LE9-NEXT: addis 3, 2, .LCPI2_0@toc@ha 76; PC64LE9-NEXT: addi 3, 3, .LCPI2_0@toc@l 77; PC64LE9-NEXT: xxswapd 2, 34 78; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3 79; PC64LE9-NEXT: xscvspdpn 0, 0 80; PC64LE9-NEXT: xscvspdpn 1, 1 81; PC64LE9-NEXT: xscvspdpn 2, 2 82; PC64LE9-NEXT: xscvspdpn 3, 3 83; PC64LE9-NEXT: lxv 36, 0(3) 84; PC64LE9-NEXT: xsdivsp 0, 1, 0 85; PC64LE9-NEXT: xxswapd 1, 35 86; PC64LE9-NEXT: xscvspdpn 1, 1 87; PC64LE9-NEXT: xsdivsp 1, 2, 1 88; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3 89; PC64LE9-NEXT: xscvspdpn 2, 2 90; PC64LE9-NEXT: xsdivsp 2, 3, 2 91; PC64LE9-NEXT: xscvdpspn 35, 0 92; PC64LE9-NEXT: xscvdpspn 1, 1 93; PC64LE9-NEXT: xscvdpspn 2, 2 94; PC64LE9-NEXT: xxmrghw 34, 1, 2 95; PC64LE9-NEXT: vperm 2, 3, 2, 4 96; PC64LE9-NEXT: blr 97entry: 98 %div = call <3 x float> @llvm.experimental.constrained.fdiv.v3f32( 99 <3 x float> %x, 100 <3 x float> %y, 101 metadata !"round.dynamic", 102 metadata !"fpexcept.strict") #1 103 ret <3 x float> %div 104} 105 106define <3 x double> @constrained_vector_fdiv_v3f64(<3 x double> %x, <3 x double> %y) #0 { 107; PC64LE-LABEL: constrained_vector_fdiv_v3f64: 108; PC64LE: # %bb.0: # %entry 109; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 110; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5 111; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4 112; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 113; PC64LE-NEXT: xxmrghd 0, 5, 4 114; PC64LE-NEXT: xsdivdp 3, 3, 6 115; PC64LE-NEXT: xxmrghd 1, 2, 1 116; PC64LE-NEXT: xvdivdp 2, 1, 0 117; PC64LE-NEXT: xxswapd 1, 2 118; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 119; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 120; PC64LE-NEXT: blr 121; 122; PC64LE9-LABEL: constrained_vector_fdiv_v3f64: 123; PC64LE9: # %bb.0: # %entry 124; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5 125; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4 126; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 127; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 128; PC64LE9-NEXT: xxmrghd 0, 5, 4 129; PC64LE9-NEXT: xxmrghd 1, 2, 1 130; PC64LE9-NEXT: xsdivdp 3, 3, 6 131; PC64LE9-NEXT: xvdivdp 2, 1, 0 132; PC64LE9-NEXT: xxswapd 1, 2 133; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 134; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 135; PC64LE9-NEXT: blr 136entry: 137 %div = call <3 x double> @llvm.experimental.constrained.fdiv.v3f64( 138 <3 x double> %x, 139 <3 x double> %y, 140 metadata !"round.dynamic", 141 metadata !"fpexcept.strict") #1 142 ret <3 x double> %div 143} 144 145define <4 x double> @constrained_vector_fdiv_v4f64(<4 x double> %x, <4 x double> %y) #0 { 146; PC64LE-LABEL: constrained_vector_fdiv_v4f64: 147; PC64LE: # %bb.0: # %entry 148; PC64LE-NEXT: xvdivdp 35, 35, 37 149; PC64LE-NEXT: xvdivdp 34, 34, 36 150; PC64LE-NEXT: blr 151; 152; PC64LE9-LABEL: constrained_vector_fdiv_v4f64: 153; PC64LE9: # %bb.0: # %entry 154; PC64LE9-NEXT: xvdivdp 35, 35, 37 155; PC64LE9-NEXT: xvdivdp 34, 34, 36 156; PC64LE9-NEXT: blr 157entry: 158 %div = call <4 x double> @llvm.experimental.constrained.fdiv.v4f64( 159 <4 x double> %x, 160 <4 x double> %y, 161 metadata !"round.dynamic", 162 metadata !"fpexcept.strict") #1 163 ret <4 x double> %div 164} 165 166define <1 x float> @constrained_vector_frem_v1f32(<1 x float> %x, <1 x float> %y) #0 { 167; PC64LE-LABEL: constrained_vector_frem_v1f32: 168; PC64LE: # %bb.0: # %entry 169; PC64LE-NEXT: mflr 0 170; PC64LE-NEXT: std 0, 16(1) 171; PC64LE-NEXT: stdu 1, -32(1) 172; PC64LE-NEXT: bl fmodf 173; PC64LE-NEXT: nop 174; PC64LE-NEXT: addi 1, 1, 32 175; PC64LE-NEXT: ld 0, 16(1) 176; PC64LE-NEXT: mtlr 0 177; PC64LE-NEXT: blr 178; 179; PC64LE9-LABEL: constrained_vector_frem_v1f32: 180; PC64LE9: # %bb.0: # %entry 181; PC64LE9-NEXT: mflr 0 182; PC64LE9-NEXT: std 0, 16(1) 183; PC64LE9-NEXT: stdu 1, -32(1) 184; PC64LE9-NEXT: bl fmodf 185; PC64LE9-NEXT: nop 186; PC64LE9-NEXT: addi 1, 1, 32 187; PC64LE9-NEXT: ld 0, 16(1) 188; PC64LE9-NEXT: mtlr 0 189; PC64LE9-NEXT: blr 190entry: 191 %rem = call <1 x float> @llvm.experimental.constrained.frem.v1f32( 192 <1 x float> %x, 193 <1 x float> %y, 194 metadata !"round.dynamic", 195 metadata !"fpexcept.strict") #1 196 ret <1 x float> %rem 197} 198 199define <2 x double> @constrained_vector_frem_v2f64(<2 x double> %x, <2 x double> %y) #0 { 200; PC64LE-LABEL: constrained_vector_frem_v2f64: 201; PC64LE: # %bb.0: # %entry 202; PC64LE-NEXT: mflr 0 203; PC64LE-NEXT: std 0, 16(1) 204; PC64LE-NEXT: stdu 1, -96(1) 205; PC64LE-NEXT: li 3, 48 206; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill 207; PC64LE-NEXT: li 3, 64 208; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 209; PC64LE-NEXT: li 3, 80 210; PC64LE-NEXT: vmr 30, 2 211; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 212; PC64LE-NEXT: vmr 31, 3 213; PC64LE-NEXT: xxlor 1, 62, 62 214; PC64LE-NEXT: xxlor 2, 63, 63 215; PC64LE-NEXT: bl fmod 216; PC64LE-NEXT: nop 217; PC64LE-NEXT: xxlor 61, 1, 1 218; PC64LE-NEXT: xxswapd 1, 62 219; PC64LE-NEXT: xxswapd 2, 63 220; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 221; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 222; PC64LE-NEXT: bl fmod 223; PC64LE-NEXT: nop 224; PC64LE-NEXT: li 3, 80 225; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 226; PC64LE-NEXT: xxmrghd 34, 61, 1 227; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 228; PC64LE-NEXT: li 3, 64 229; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 230; PC64LE-NEXT: li 3, 48 231; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload 232; PC64LE-NEXT: addi 1, 1, 96 233; PC64LE-NEXT: ld 0, 16(1) 234; PC64LE-NEXT: mtlr 0 235; PC64LE-NEXT: blr 236; 237; PC64LE9-LABEL: constrained_vector_frem_v2f64: 238; PC64LE9: # %bb.0: # %entry 239; PC64LE9-NEXT: mflr 0 240; PC64LE9-NEXT: std 0, 16(1) 241; PC64LE9-NEXT: stdu 1, -80(1) 242; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill 243; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill 244; PC64LE9-NEXT: vmr 31, 3 245; PC64LE9-NEXT: xscpsgndp 2, 63, 63 246; PC64LE9-NEXT: vmr 30, 2 247; PC64LE9-NEXT: xscpsgndp 1, 62, 62 248; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill 249; PC64LE9-NEXT: bl fmod 250; PC64LE9-NEXT: nop 251; PC64LE9-NEXT: xscpsgndp 61, 1, 1 252; PC64LE9-NEXT: xxswapd 1, 62 253; PC64LE9-NEXT: xxswapd 2, 63 254; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 255; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 256; PC64LE9-NEXT: bl fmod 257; PC64LE9-NEXT: nop 258; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 259; PC64LE9-NEXT: xxmrghd 34, 61, 1 260; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload 261; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload 262; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload 263; PC64LE9-NEXT: addi 1, 1, 80 264; PC64LE9-NEXT: ld 0, 16(1) 265; PC64LE9-NEXT: mtlr 0 266; PC64LE9-NEXT: blr 267entry: 268 %rem = call <2 x double> @llvm.experimental.constrained.frem.v2f64( 269 <2 x double> %x, 270 <2 x double> %y, 271 metadata !"round.dynamic", 272 metadata !"fpexcept.strict") #1 273 ret <2 x double> %rem 274} 275 276define <3 x float> @constrained_vector_frem_v3f32(<3 x float> %x, <3 x float> %y) #0 { 277; PC64LE-LABEL: constrained_vector_frem_v3f32: 278; PC64LE: # %bb.0: # %entry 279; PC64LE-NEXT: mflr 0 280; PC64LE-NEXT: std 0, 16(1) 281; PC64LE-NEXT: stdu 1, -96(1) 282; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 283; PC64LE-NEXT: xxsldwi 2, 35, 35, 1 284; PC64LE-NEXT: li 3, 48 285; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 286; PC64LE-NEXT: li 3, 64 287; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill 288; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 289; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 290; PC64LE-NEXT: xscvspdpn 1, 0 291; PC64LE-NEXT: xscvspdpn 2, 2 292; PC64LE-NEXT: vmr 31, 3 293; PC64LE-NEXT: vmr 30, 2 294; PC64LE-NEXT: bl fmodf 295; PC64LE-NEXT: nop 296; PC64LE-NEXT: xxswapd 0, 62 297; PC64LE-NEXT: xxswapd 2, 63 298; PC64LE-NEXT: fmr 31, 1 299; PC64LE-NEXT: xscvspdpn 1, 0 300; PC64LE-NEXT: xscvspdpn 2, 2 301; PC64LE-NEXT: bl fmodf 302; PC64LE-NEXT: nop 303; PC64LE-NEXT: xxsldwi 0, 62, 62, 3 304; PC64LE-NEXT: xxsldwi 2, 63, 63, 3 305; PC64LE-NEXT: fmr 30, 1 306; PC64LE-NEXT: xscvspdpn 1, 0 307; PC64LE-NEXT: xscvspdpn 2, 2 308; PC64LE-NEXT: bl fmodf 309; PC64LE-NEXT: nop 310; PC64LE-NEXT: xscvdpspn 0, 30 311; PC64LE-NEXT: addis 3, 2, .LCPI7_0@toc@ha 312; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload 313; PC64LE-NEXT: xscvdpspn 1, 1 314; PC64LE-NEXT: addi 3, 3, .LCPI7_0@toc@l 315; PC64LE-NEXT: xscvdpspn 34, 31 316; PC64LE-NEXT: lvx 4, 0, 3 317; PC64LE-NEXT: li 3, 64 318; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 319; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 320; PC64LE-NEXT: li 3, 48 321; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 322; PC64LE-NEXT: xxmrghw 35, 0, 1 323; PC64LE-NEXT: vperm 2, 2, 3, 4 324; PC64LE-NEXT: addi 1, 1, 96 325; PC64LE-NEXT: ld 0, 16(1) 326; PC64LE-NEXT: mtlr 0 327; PC64LE-NEXT: blr 328; 329; PC64LE9-LABEL: constrained_vector_frem_v3f32: 330; PC64LE9: # %bb.0: # %entry 331; PC64LE9-NEXT: mflr 0 332; PC64LE9-NEXT: std 0, 16(1) 333; PC64LE9-NEXT: stdu 1, -80(1) 334; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 335; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 336; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 337; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 338; PC64LE9-NEXT: xscvspdpn 1, 0 339; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1 340; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 341; PC64LE9-NEXT: xscvspdpn 2, 0 342; PC64LE9-NEXT: vmr 31, 3 343; PC64LE9-NEXT: vmr 30, 2 344; PC64LE9-NEXT: bl fmodf 345; PC64LE9-NEXT: nop 346; PC64LE9-NEXT: xxswapd 0, 62 347; PC64LE9-NEXT: fmr 31, 1 348; PC64LE9-NEXT: xscvspdpn 1, 0 349; PC64LE9-NEXT: xxswapd 0, 63 350; PC64LE9-NEXT: xscvspdpn 2, 0 351; PC64LE9-NEXT: bl fmodf 352; PC64LE9-NEXT: nop 353; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3 354; PC64LE9-NEXT: fmr 30, 1 355; PC64LE9-NEXT: xscvspdpn 1, 0 356; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 357; PC64LE9-NEXT: xscvspdpn 2, 0 358; PC64LE9-NEXT: bl fmodf 359; PC64LE9-NEXT: nop 360; PC64LE9-NEXT: xscvdpspn 0, 1 361; PC64LE9-NEXT: xscvdpspn 1, 30 362; PC64LE9-NEXT: addis 3, 2, .LCPI7_0@toc@ha 363; PC64LE9-NEXT: xscvdpspn 35, 31 364; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 365; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 366; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 367; PC64LE9-NEXT: addi 3, 3, .LCPI7_0@toc@l 368; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 369; PC64LE9-NEXT: lxv 36, 0(3) 370; PC64LE9-NEXT: xxmrghw 34, 1, 0 371; PC64LE9-NEXT: vperm 2, 3, 2, 4 372; PC64LE9-NEXT: addi 1, 1, 80 373; PC64LE9-NEXT: ld 0, 16(1) 374; PC64LE9-NEXT: mtlr 0 375; PC64LE9-NEXT: blr 376entry: 377 %rem = call <3 x float> @llvm.experimental.constrained.frem.v3f32( 378 <3 x float> %x, 379 <3 x float> %y, 380 metadata !"round.dynamic", 381 metadata !"fpexcept.strict") #1 382 ret <3 x float> %rem 383} 384 385define <3 x double> @constrained_vector_frem_v3f64(<3 x double> %x, <3 x double> %y) #0 { 386; PC64LE-LABEL: constrained_vector_frem_v3f64: 387; PC64LE: # %bb.0: # %entry 388; PC64LE-NEXT: mflr 0 389; PC64LE-NEXT: std 0, 16(1) 390; PC64LE-NEXT: stdu 1, -96(1) 391; PC64LE-NEXT: stfd 28, 64(1) # 8-byte Folded Spill 392; PC64LE-NEXT: fmr 28, 2 393; PC64LE-NEXT: li 3, 48 394; PC64LE-NEXT: fmr 2, 4 395; PC64LE-NEXT: stfd 29, 72(1) # 8-byte Folded Spill 396; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill 397; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 398; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 399; PC64LE-NEXT: fmr 31, 6 400; PC64LE-NEXT: fmr 30, 5 401; PC64LE-NEXT: fmr 29, 3 402; PC64LE-NEXT: bl fmod 403; PC64LE-NEXT: nop 404; PC64LE-NEXT: xxlor 63, 1, 1 405; PC64LE-NEXT: fmr 1, 28 406; PC64LE-NEXT: fmr 2, 30 407; PC64LE-NEXT: bl fmod 408; PC64LE-NEXT: nop 409; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 410; PC64LE-NEXT: xxmrghd 63, 1, 63 411; PC64LE-NEXT: fmr 2, 31 412; PC64LE-NEXT: fmr 1, 29 413; PC64LE-NEXT: bl fmod 414; PC64LE-NEXT: nop 415; PC64LE-NEXT: xxswapd 0, 63 416; PC64LE-NEXT: li 3, 48 417; PC64LE-NEXT: xxlor 2, 63, 63 418; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 419; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload 420; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 421; PC64LE-NEXT: lfd 29, 72(1) # 8-byte Folded Reload 422; PC64LE-NEXT: fmr 3, 1 423; PC64LE-NEXT: lfd 28, 64(1) # 8-byte Folded Reload 424; PC64LE-NEXT: fmr 1, 0 425; PC64LE-NEXT: addi 1, 1, 96 426; PC64LE-NEXT: ld 0, 16(1) 427; PC64LE-NEXT: mtlr 0 428; PC64LE-NEXT: blr 429; 430; PC64LE9-LABEL: constrained_vector_frem_v3f64: 431; PC64LE9: # %bb.0: # %entry 432; PC64LE9-NEXT: mflr 0 433; PC64LE9-NEXT: std 0, 16(1) 434; PC64LE9-NEXT: stdu 1, -80(1) 435; PC64LE9-NEXT: stfd 28, 48(1) # 8-byte Folded Spill 436; PC64LE9-NEXT: fmr 28, 2 437; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 438; PC64LE9-NEXT: fmr 2, 4 439; PC64LE9-NEXT: stfd 29, 56(1) # 8-byte Folded Spill 440; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 441; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 442; PC64LE9-NEXT: fmr 31, 6 443; PC64LE9-NEXT: fmr 30, 5 444; PC64LE9-NEXT: fmr 29, 3 445; PC64LE9-NEXT: bl fmod 446; PC64LE9-NEXT: nop 447; PC64LE9-NEXT: xscpsgndp 63, 1, 1 448; PC64LE9-NEXT: fmr 1, 28 449; PC64LE9-NEXT: fmr 2, 30 450; PC64LE9-NEXT: bl fmod 451; PC64LE9-NEXT: nop 452; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 453; PC64LE9-NEXT: xxmrghd 63, 1, 63 454; PC64LE9-NEXT: fmr 1, 29 455; PC64LE9-NEXT: fmr 2, 31 456; PC64LE9-NEXT: bl fmod 457; PC64LE9-NEXT: nop 458; PC64LE9-NEXT: fmr 3, 1 459; PC64LE9-NEXT: xxswapd 1, 63 460; PC64LE9-NEXT: xscpsgndp 2, 63, 63 461; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 462; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 463; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 464; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 465; PC64LE9-NEXT: lfd 29, 56(1) # 8-byte Folded Reload 466; PC64LE9-NEXT: lfd 28, 48(1) # 8-byte Folded Reload 467; PC64LE9-NEXT: addi 1, 1, 80 468; PC64LE9-NEXT: ld 0, 16(1) 469; PC64LE9-NEXT: mtlr 0 470; PC64LE9-NEXT: blr 471entry: 472 %rem = call <3 x double> @llvm.experimental.constrained.frem.v3f64( 473 <3 x double> %x, 474 <3 x double> %y, 475 metadata !"round.dynamic", 476 metadata !"fpexcept.strict") #1 477 ret <3 x double> %rem 478} 479 480define <4 x double> @constrained_vector_frem_v4f64(<4 x double> %x, <4 x double> %y) #0 { 481; PC64LE-LABEL: constrained_vector_frem_v4f64: 482; PC64LE: # %bb.0: 483; PC64LE-NEXT: mflr 0 484; PC64LE-NEXT: std 0, 16(1) 485; PC64LE-NEXT: stdu 1, -128(1) 486; PC64LE-NEXT: li 3, 48 487; PC64LE-NEXT: stxvd2x 59, 1, 3 # 16-byte Folded Spill 488; PC64LE-NEXT: li 3, 64 489; PC64LE-NEXT: stxvd2x 60, 1, 3 # 16-byte Folded Spill 490; PC64LE-NEXT: li 3, 80 491; PC64LE-NEXT: vmr 28, 2 492; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill 493; PC64LE-NEXT: li 3, 96 494; PC64LE-NEXT: vmr 29, 3 495; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 496; PC64LE-NEXT: vmr 30, 4 497; PC64LE-NEXT: li 3, 112 498; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 499; PC64LE-NEXT: vmr 31, 5 500; PC64LE-NEXT: xxlor 1, 60, 60 501; PC64LE-NEXT: xxlor 2, 62, 62 502; PC64LE-NEXT: bl fmod 503; PC64LE-NEXT: nop 504; PC64LE-NEXT: xxlor 59, 1, 1 505; PC64LE-NEXT: xxswapd 1, 60 506; PC64LE-NEXT: xxswapd 2, 62 507; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 508; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 509; PC64LE-NEXT: bl fmod 510; PC64LE-NEXT: nop 511; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 512; PC64LE-NEXT: xxmrghd 62, 59, 1 513; PC64LE-NEXT: xxlor 2, 63, 63 514; PC64LE-NEXT: xxlor 1, 61, 61 515; PC64LE-NEXT: bl fmod 516; PC64LE-NEXT: nop 517; PC64LE-NEXT: xxlor 60, 1, 1 518; PC64LE-NEXT: xxswapd 1, 61 519; PC64LE-NEXT: xxswapd 2, 63 520; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 521; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 522; PC64LE-NEXT: bl fmod 523; PC64LE-NEXT: nop 524; PC64LE-NEXT: li 3, 112 525; PC64LE-NEXT: vmr 2, 30 526; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 527; PC64LE-NEXT: xxmrghd 35, 60, 1 528; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 529; PC64LE-NEXT: li 3, 96 530; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 531; PC64LE-NEXT: li 3, 80 532; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload 533; PC64LE-NEXT: li 3, 64 534; PC64LE-NEXT: lxvd2x 60, 1, 3 # 16-byte Folded Reload 535; PC64LE-NEXT: li 3, 48 536; PC64LE-NEXT: lxvd2x 59, 1, 3 # 16-byte Folded Reload 537; PC64LE-NEXT: addi 1, 1, 128 538; PC64LE-NEXT: ld 0, 16(1) 539; PC64LE-NEXT: mtlr 0 540; PC64LE-NEXT: blr 541; 542; PC64LE9-LABEL: constrained_vector_frem_v4f64: 543; PC64LE9: # %bb.0: 544; PC64LE9-NEXT: mflr 0 545; PC64LE9-NEXT: std 0, 16(1) 546; PC64LE9-NEXT: stdu 1, -112(1) 547; PC64LE9-NEXT: stxv 60, 48(1) # 16-byte Folded Spill 548; PC64LE9-NEXT: stxv 62, 80(1) # 16-byte Folded Spill 549; PC64LE9-NEXT: vmr 30, 4 550; PC64LE9-NEXT: xscpsgndp 2, 62, 62 551; PC64LE9-NEXT: vmr 28, 2 552; PC64LE9-NEXT: xscpsgndp 1, 60, 60 553; PC64LE9-NEXT: stxv 59, 32(1) # 16-byte Folded Spill 554; PC64LE9-NEXT: stxv 61, 64(1) # 16-byte Folded Spill 555; PC64LE9-NEXT: stxv 63, 96(1) # 16-byte Folded Spill 556; PC64LE9-NEXT: vmr 31, 5 557; PC64LE9-NEXT: vmr 29, 3 558; PC64LE9-NEXT: bl fmod 559; PC64LE9-NEXT: nop 560; PC64LE9-NEXT: xscpsgndp 59, 1, 1 561; PC64LE9-NEXT: xxswapd 1, 60 562; PC64LE9-NEXT: xxswapd 2, 62 563; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 564; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 565; PC64LE9-NEXT: bl fmod 566; PC64LE9-NEXT: nop 567; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 568; PC64LE9-NEXT: xxmrghd 62, 59, 1 569; PC64LE9-NEXT: xscpsgndp 1, 61, 61 570; PC64LE9-NEXT: xscpsgndp 2, 63, 63 571; PC64LE9-NEXT: bl fmod 572; PC64LE9-NEXT: nop 573; PC64LE9-NEXT: xscpsgndp 60, 1, 1 574; PC64LE9-NEXT: xxswapd 1, 61 575; PC64LE9-NEXT: xxswapd 2, 63 576; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 577; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 578; PC64LE9-NEXT: bl fmod 579; PC64LE9-NEXT: nop 580; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 581; PC64LE9-NEXT: xxmrghd 35, 60, 1 582; PC64LE9-NEXT: vmr 2, 30 583; PC64LE9-NEXT: lxv 63, 96(1) # 16-byte Folded Reload 584; PC64LE9-NEXT: lxv 62, 80(1) # 16-byte Folded Reload 585; PC64LE9-NEXT: lxv 61, 64(1) # 16-byte Folded Reload 586; PC64LE9-NEXT: lxv 60, 48(1) # 16-byte Folded Reload 587; PC64LE9-NEXT: lxv 59, 32(1) # 16-byte Folded Reload 588; PC64LE9-NEXT: addi 1, 1, 112 589; PC64LE9-NEXT: ld 0, 16(1) 590; PC64LE9-NEXT: mtlr 0 591; PC64LE9-NEXT: blr 592 %rem = call <4 x double> @llvm.experimental.constrained.frem.v4f64( 593 <4 x double> %x, 594 <4 x double> %y, 595 metadata !"round.dynamic", 596 metadata !"fpexcept.strict") #1 597 ret <4 x double> %rem 598} 599 600define <1 x float> @constrained_vector_fmul_v1f32(<1 x float> %x, <1 x float> %y) #0 { 601; PC64LE-LABEL: constrained_vector_fmul_v1f32: 602; PC64LE: # %bb.0: # %entry 603; PC64LE-NEXT: xsmulsp 1, 1, 2 604; PC64LE-NEXT: blr 605; 606; PC64LE9-LABEL: constrained_vector_fmul_v1f32: 607; PC64LE9: # %bb.0: # %entry 608; PC64LE9-NEXT: xsmulsp 1, 1, 2 609; PC64LE9-NEXT: blr 610entry: 611 %mul = call <1 x float> @llvm.experimental.constrained.fmul.v1f32( 612 <1 x float> %x, 613 <1 x float> %y, 614 metadata !"round.dynamic", 615 metadata !"fpexcept.strict") #1 616 ret <1 x float> %mul 617} 618 619define <2 x double> @constrained_vector_fmul_v2f64(<2 x double> %x, <2 x double> %y) #0 { 620; PC64LE-LABEL: constrained_vector_fmul_v2f64: 621; PC64LE: # %bb.0: # %entry 622; PC64LE-NEXT: xvmuldp 34, 34, 35 623; PC64LE-NEXT: blr 624; 625; PC64LE9-LABEL: constrained_vector_fmul_v2f64: 626; PC64LE9: # %bb.0: # %entry 627; PC64LE9-NEXT: xvmuldp 34, 34, 35 628; PC64LE9-NEXT: blr 629entry: 630 %mul = call <2 x double> @llvm.experimental.constrained.fmul.v2f64( 631 <2 x double> %x, 632 <2 x double> %y, 633 metadata !"round.dynamic", 634 metadata !"fpexcept.strict") #1 635 ret <2 x double> %mul 636} 637 638define <3 x float> @constrained_vector_fmul_v3f32(<3 x float> %x, <3 x float> %y) #0 { 639; PC64LE-LABEL: constrained_vector_fmul_v3f32: 640; PC64LE: # %bb.0: # %entry 641; PC64LE-NEXT: xxswapd 0, 35 642; PC64LE-NEXT: xxsldwi 1, 35, 35, 3 643; PC64LE-NEXT: addis 3, 2, .LCPI12_0@toc@ha 644; PC64LE-NEXT: xxsldwi 2, 34, 34, 3 645; PC64LE-NEXT: xxswapd 3, 34 646; PC64LE-NEXT: addi 3, 3, .LCPI12_0@toc@l 647; PC64LE-NEXT: xxsldwi 4, 35, 35, 1 648; PC64LE-NEXT: xxsldwi 5, 34, 34, 1 649; PC64LE-NEXT: lvx 4, 0, 3 650; PC64LE-NEXT: xscvspdpn 0, 0 651; PC64LE-NEXT: xscvspdpn 1, 1 652; PC64LE-NEXT: xscvspdpn 2, 2 653; PC64LE-NEXT: xscvspdpn 3, 3 654; PC64LE-NEXT: xscvspdpn 4, 4 655; PC64LE-NEXT: xscvspdpn 5, 5 656; PC64LE-NEXT: xsmulsp 1, 2, 1 657; PC64LE-NEXT: xsmulsp 0, 3, 0 658; PC64LE-NEXT: xsmulsp 2, 5, 4 659; PC64LE-NEXT: xscvdpspn 1, 1 660; PC64LE-NEXT: xscvdpspn 0, 0 661; PC64LE-NEXT: xscvdpspn 34, 2 662; PC64LE-NEXT: xxmrghw 35, 0, 1 663; PC64LE-NEXT: vperm 2, 2, 3, 4 664; PC64LE-NEXT: blr 665; 666; PC64LE9-LABEL: constrained_vector_fmul_v3f32: 667; PC64LE9: # %bb.0: # %entry 668; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1 669; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1 670; PC64LE9-NEXT: addis 3, 2, .LCPI12_0@toc@ha 671; PC64LE9-NEXT: addi 3, 3, .LCPI12_0@toc@l 672; PC64LE9-NEXT: xxswapd 2, 34 673; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3 674; PC64LE9-NEXT: xscvspdpn 0, 0 675; PC64LE9-NEXT: xscvspdpn 1, 1 676; PC64LE9-NEXT: xscvspdpn 2, 2 677; PC64LE9-NEXT: xscvspdpn 3, 3 678; PC64LE9-NEXT: lxv 36, 0(3) 679; PC64LE9-NEXT: xsmulsp 0, 1, 0 680; PC64LE9-NEXT: xxswapd 1, 35 681; PC64LE9-NEXT: xscvspdpn 1, 1 682; PC64LE9-NEXT: xsmulsp 1, 2, 1 683; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3 684; PC64LE9-NEXT: xscvdpspn 35, 0 685; PC64LE9-NEXT: xscvspdpn 2, 2 686; PC64LE9-NEXT: xsmulsp 2, 3, 2 687; PC64LE9-NEXT: xscvdpspn 1, 1 688; PC64LE9-NEXT: xscvdpspn 2, 2 689; PC64LE9-NEXT: xxmrghw 34, 1, 2 690; PC64LE9-NEXT: vperm 2, 3, 2, 4 691; PC64LE9-NEXT: blr 692entry: 693 %mul = call <3 x float> @llvm.experimental.constrained.fmul.v3f32( 694 <3 x float> %x, 695 <3 x float> %y, 696 metadata !"round.dynamic", 697 metadata !"fpexcept.strict") #1 698 ret <3 x float> %mul 699} 700 701define <3 x double> @constrained_vector_fmul_v3f64(<3 x double> %x, <3 x double> %y) #0 { 702; PC64LE-LABEL: constrained_vector_fmul_v3f64: 703; PC64LE: # %bb.0: # %entry 704; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 705; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5 706; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4 707; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 708; PC64LE-NEXT: xxmrghd 0, 5, 4 709; PC64LE-NEXT: xsmuldp 3, 3, 6 710; PC64LE-NEXT: xxmrghd 1, 2, 1 711; PC64LE-NEXT: xvmuldp 2, 1, 0 712; PC64LE-NEXT: xxswapd 1, 2 713; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 714; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 715; PC64LE-NEXT: blr 716; 717; PC64LE9-LABEL: constrained_vector_fmul_v3f64: 718; PC64LE9: # %bb.0: # %entry 719; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5 720; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4 721; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 722; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 723; PC64LE9-NEXT: xxmrghd 0, 5, 4 724; PC64LE9-NEXT: xxmrghd 1, 2, 1 725; PC64LE9-NEXT: xsmuldp 3, 3, 6 726; PC64LE9-NEXT: xvmuldp 2, 1, 0 727; PC64LE9-NEXT: xxswapd 1, 2 728; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 729; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 730; PC64LE9-NEXT: blr 731entry: 732 %mul = call <3 x double> @llvm.experimental.constrained.fmul.v3f64( 733 <3 x double> %x, 734 <3 x double> %y, 735 metadata !"round.dynamic", 736 metadata !"fpexcept.strict") #1 737 ret <3 x double> %mul 738} 739 740define <4 x double> @constrained_vector_fmul_v4f64(<4 x double> %x, <4 x double> %y) #0 { 741; PC64LE-LABEL: constrained_vector_fmul_v4f64: 742; PC64LE: # %bb.0: # %entry 743; PC64LE-NEXT: xvmuldp 35, 35, 37 744; PC64LE-NEXT: xvmuldp 34, 34, 36 745; PC64LE-NEXT: blr 746; 747; PC64LE9-LABEL: constrained_vector_fmul_v4f64: 748; PC64LE9: # %bb.0: # %entry 749; PC64LE9-NEXT: xvmuldp 35, 35, 37 750; PC64LE9-NEXT: xvmuldp 34, 34, 36 751; PC64LE9-NEXT: blr 752entry: 753 %mul = call <4 x double> @llvm.experimental.constrained.fmul.v4f64( 754 <4 x double> %x, 755 <4 x double> %y, 756 metadata !"round.dynamic", 757 metadata !"fpexcept.strict") #1 758 ret <4 x double> %mul 759} 760 761define <1 x float> @constrained_vector_fadd_v1f32(<1 x float> %x, <1 x float> %y) #0 { 762; PC64LE-LABEL: constrained_vector_fadd_v1f32: 763; PC64LE: # %bb.0: # %entry 764; PC64LE-NEXT: xsaddsp 1, 1, 2 765; PC64LE-NEXT: blr 766; 767; PC64LE9-LABEL: constrained_vector_fadd_v1f32: 768; PC64LE9: # %bb.0: # %entry 769; PC64LE9-NEXT: xsaddsp 1, 1, 2 770; PC64LE9-NEXT: blr 771entry: 772 %add = call <1 x float> @llvm.experimental.constrained.fadd.v1f32( 773 <1 x float> %x, 774 <1 x float> %y, 775 metadata !"round.dynamic", 776 metadata !"fpexcept.strict") #1 777 ret <1 x float> %add 778} 779 780define <2 x double> @constrained_vector_fadd_v2f64(<2 x double> %x, <2 x double> %y) #0 { 781; PC64LE-LABEL: constrained_vector_fadd_v2f64: 782; PC64LE: # %bb.0: # %entry 783; PC64LE-NEXT: xvadddp 34, 34, 35 784; PC64LE-NEXT: blr 785; 786; PC64LE9-LABEL: constrained_vector_fadd_v2f64: 787; PC64LE9: # %bb.0: # %entry 788; PC64LE9-NEXT: xvadddp 34, 34, 35 789; PC64LE9-NEXT: blr 790entry: 791 %add = call <2 x double> @llvm.experimental.constrained.fadd.v2f64( 792 <2 x double> %x, 793 <2 x double> %y, 794 metadata !"round.dynamic", 795 metadata !"fpexcept.strict") #1 796 ret <2 x double> %add 797} 798 799define <3 x float> @constrained_vector_fadd_v3f32(<3 x float> %x, <3 x float> %y) #0 { 800; PC64LE-LABEL: constrained_vector_fadd_v3f32: 801; PC64LE: # %bb.0: # %entry 802; PC64LE-NEXT: xxswapd 0, 35 803; PC64LE-NEXT: xxsldwi 1, 35, 35, 3 804; PC64LE-NEXT: addis 3, 2, .LCPI17_0@toc@ha 805; PC64LE-NEXT: xxsldwi 2, 34, 34, 3 806; PC64LE-NEXT: xxswapd 3, 34 807; PC64LE-NEXT: addi 3, 3, .LCPI17_0@toc@l 808; PC64LE-NEXT: xxsldwi 4, 35, 35, 1 809; PC64LE-NEXT: xxsldwi 5, 34, 34, 1 810; PC64LE-NEXT: lvx 4, 0, 3 811; PC64LE-NEXT: xscvspdpn 0, 0 812; PC64LE-NEXT: xscvspdpn 1, 1 813; PC64LE-NEXT: xscvspdpn 2, 2 814; PC64LE-NEXT: xscvspdpn 3, 3 815; PC64LE-NEXT: xscvspdpn 4, 4 816; PC64LE-NEXT: xscvspdpn 5, 5 817; PC64LE-NEXT: xsaddsp 1, 2, 1 818; PC64LE-NEXT: xsaddsp 0, 3, 0 819; PC64LE-NEXT: xsaddsp 2, 5, 4 820; PC64LE-NEXT: xscvdpspn 1, 1 821; PC64LE-NEXT: xscvdpspn 0, 0 822; PC64LE-NEXT: xscvdpspn 34, 2 823; PC64LE-NEXT: xxmrghw 35, 0, 1 824; PC64LE-NEXT: vperm 2, 2, 3, 4 825; PC64LE-NEXT: blr 826; 827; PC64LE9-LABEL: constrained_vector_fadd_v3f32: 828; PC64LE9: # %bb.0: # %entry 829; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1 830; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1 831; PC64LE9-NEXT: addis 3, 2, .LCPI17_0@toc@ha 832; PC64LE9-NEXT: addi 3, 3, .LCPI17_0@toc@l 833; PC64LE9-NEXT: xxswapd 2, 34 834; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3 835; PC64LE9-NEXT: xscvspdpn 0, 0 836; PC64LE9-NEXT: xscvspdpn 1, 1 837; PC64LE9-NEXT: xscvspdpn 2, 2 838; PC64LE9-NEXT: xscvspdpn 3, 3 839; PC64LE9-NEXT: lxv 36, 0(3) 840; PC64LE9-NEXT: xsaddsp 0, 1, 0 841; PC64LE9-NEXT: xxswapd 1, 35 842; PC64LE9-NEXT: xscvspdpn 1, 1 843; PC64LE9-NEXT: xsaddsp 1, 2, 1 844; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3 845; PC64LE9-NEXT: xscvdpspn 35, 0 846; PC64LE9-NEXT: xscvspdpn 2, 2 847; PC64LE9-NEXT: xsaddsp 2, 3, 2 848; PC64LE9-NEXT: xscvdpspn 1, 1 849; PC64LE9-NEXT: xscvdpspn 2, 2 850; PC64LE9-NEXT: xxmrghw 34, 1, 2 851; PC64LE9-NEXT: vperm 2, 3, 2, 4 852; PC64LE9-NEXT: blr 853entry: 854 %add = call <3 x float> @llvm.experimental.constrained.fadd.v3f32( 855 <3 x float> %x, 856 <3 x float> %y, 857 metadata !"round.dynamic", 858 metadata !"fpexcept.strict") #1 859 ret <3 x float> %add 860} 861 862define <3 x double> @constrained_vector_fadd_v3f64(<3 x double> %x, <3 x double> %y) #0 { 863; PC64LE-LABEL: constrained_vector_fadd_v3f64: 864; PC64LE: # %bb.0: # %entry 865; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 866; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5 867; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4 868; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 869; PC64LE-NEXT: xxmrghd 0, 5, 4 870; PC64LE-NEXT: xsadddp 3, 3, 6 871; PC64LE-NEXT: xxmrghd 1, 2, 1 872; PC64LE-NEXT: xvadddp 2, 1, 0 873; PC64LE-NEXT: xxswapd 1, 2 874; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 875; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 876; PC64LE-NEXT: blr 877; 878; PC64LE9-LABEL: constrained_vector_fadd_v3f64: 879; PC64LE9: # %bb.0: # %entry 880; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5 881; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4 882; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 883; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 884; PC64LE9-NEXT: xxmrghd 0, 5, 4 885; PC64LE9-NEXT: xxmrghd 1, 2, 1 886; PC64LE9-NEXT: xsadddp 3, 3, 6 887; PC64LE9-NEXT: xvadddp 2, 1, 0 888; PC64LE9-NEXT: xxswapd 1, 2 889; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 890; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 891; PC64LE9-NEXT: blr 892entry: 893 %add = call <3 x double> @llvm.experimental.constrained.fadd.v3f64( 894 <3 x double> %x, 895 <3 x double> %y, 896 metadata !"round.dynamic", 897 metadata !"fpexcept.strict") #1 898 ret <3 x double> %add 899} 900 901define <4 x double> @constrained_vector_fadd_v4f64(<4 x double> %x, <4 x double> %y) #0 { 902; PC64LE-LABEL: constrained_vector_fadd_v4f64: 903; PC64LE: # %bb.0: # %entry 904; PC64LE-NEXT: xvadddp 35, 35, 37 905; PC64LE-NEXT: xvadddp 34, 34, 36 906; PC64LE-NEXT: blr 907; 908; PC64LE9-LABEL: constrained_vector_fadd_v4f64: 909; PC64LE9: # %bb.0: # %entry 910; PC64LE9-NEXT: xvadddp 35, 35, 37 911; PC64LE9-NEXT: xvadddp 34, 34, 36 912; PC64LE9-NEXT: blr 913entry: 914 %add = call <4 x double> @llvm.experimental.constrained.fadd.v4f64( 915 <4 x double> %x, 916 <4 x double> %y, 917 metadata !"round.dynamic", 918 metadata !"fpexcept.strict") #1 919 ret <4 x double> %add 920} 921 922define <1 x float> @constrained_vector_fsub_v1f32(<1 x float> %x, <1 x float> %y) #0 { 923; PC64LE-LABEL: constrained_vector_fsub_v1f32: 924; PC64LE: # %bb.0: # %entry 925; PC64LE-NEXT: xssubsp 1, 1, 2 926; PC64LE-NEXT: blr 927; 928; PC64LE9-LABEL: constrained_vector_fsub_v1f32: 929; PC64LE9: # %bb.0: # %entry 930; PC64LE9-NEXT: xssubsp 1, 1, 2 931; PC64LE9-NEXT: blr 932entry: 933 %sub = call <1 x float> @llvm.experimental.constrained.fsub.v1f32( 934 <1 x float> %x, 935 <1 x float> %y, 936 metadata !"round.dynamic", 937 metadata !"fpexcept.strict") #1 938 ret <1 x float> %sub 939} 940 941define <2 x double> @constrained_vector_fsub_v2f64(<2 x double> %x, <2 x double> %y) #0 { 942; PC64LE-LABEL: constrained_vector_fsub_v2f64: 943; PC64LE: # %bb.0: # %entry 944; PC64LE-NEXT: xvsubdp 34, 34, 35 945; PC64LE-NEXT: blr 946; 947; PC64LE9-LABEL: constrained_vector_fsub_v2f64: 948; PC64LE9: # %bb.0: # %entry 949; PC64LE9-NEXT: xvsubdp 34, 34, 35 950; PC64LE9-NEXT: blr 951entry: 952 %sub = call <2 x double> @llvm.experimental.constrained.fsub.v2f64( 953 <2 x double> %x, 954 <2 x double> %y, 955 metadata !"round.dynamic", 956 metadata !"fpexcept.strict") #1 957 ret <2 x double> %sub 958} 959 960define <3 x float> @constrained_vector_fsub_v3f32(<3 x float> %x, <3 x float> %y) #0 { 961; PC64LE-LABEL: constrained_vector_fsub_v3f32: 962; PC64LE: # %bb.0: # %entry 963; PC64LE-NEXT: xxswapd 0, 35 964; PC64LE-NEXT: xxsldwi 1, 35, 35, 3 965; PC64LE-NEXT: addis 3, 2, .LCPI22_0@toc@ha 966; PC64LE-NEXT: xxsldwi 2, 34, 34, 3 967; PC64LE-NEXT: xxswapd 3, 34 968; PC64LE-NEXT: addi 3, 3, .LCPI22_0@toc@l 969; PC64LE-NEXT: xxsldwi 4, 35, 35, 1 970; PC64LE-NEXT: xxsldwi 5, 34, 34, 1 971; PC64LE-NEXT: lvx 4, 0, 3 972; PC64LE-NEXT: xscvspdpn 0, 0 973; PC64LE-NEXT: xscvspdpn 1, 1 974; PC64LE-NEXT: xscvspdpn 2, 2 975; PC64LE-NEXT: xscvspdpn 3, 3 976; PC64LE-NEXT: xscvspdpn 4, 4 977; PC64LE-NEXT: xscvspdpn 5, 5 978; PC64LE-NEXT: xssubsp 1, 2, 1 979; PC64LE-NEXT: xssubsp 0, 3, 0 980; PC64LE-NEXT: xssubsp 2, 5, 4 981; PC64LE-NEXT: xscvdpspn 1, 1 982; PC64LE-NEXT: xscvdpspn 0, 0 983; PC64LE-NEXT: xscvdpspn 34, 2 984; PC64LE-NEXT: xxmrghw 35, 0, 1 985; PC64LE-NEXT: vperm 2, 2, 3, 4 986; PC64LE-NEXT: blr 987; 988; PC64LE9-LABEL: constrained_vector_fsub_v3f32: 989; PC64LE9: # %bb.0: # %entry 990; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1 991; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1 992; PC64LE9-NEXT: addis 3, 2, .LCPI22_0@toc@ha 993; PC64LE9-NEXT: addi 3, 3, .LCPI22_0@toc@l 994; PC64LE9-NEXT: xxswapd 2, 34 995; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3 996; PC64LE9-NEXT: xscvspdpn 0, 0 997; PC64LE9-NEXT: xscvspdpn 1, 1 998; PC64LE9-NEXT: xscvspdpn 2, 2 999; PC64LE9-NEXT: xscvspdpn 3, 3 1000; PC64LE9-NEXT: lxv 36, 0(3) 1001; PC64LE9-NEXT: xssubsp 0, 1, 0 1002; PC64LE9-NEXT: xxswapd 1, 35 1003; PC64LE9-NEXT: xscvspdpn 1, 1 1004; PC64LE9-NEXT: xssubsp 1, 2, 1 1005; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3 1006; PC64LE9-NEXT: xscvdpspn 35, 0 1007; PC64LE9-NEXT: xscvspdpn 2, 2 1008; PC64LE9-NEXT: xssubsp 2, 3, 2 1009; PC64LE9-NEXT: xscvdpspn 1, 1 1010; PC64LE9-NEXT: xscvdpspn 2, 2 1011; PC64LE9-NEXT: xxmrghw 34, 1, 2 1012; PC64LE9-NEXT: vperm 2, 3, 2, 4 1013; PC64LE9-NEXT: blr 1014entry: 1015 %sub = call <3 x float> @llvm.experimental.constrained.fsub.v3f32( 1016 <3 x float> %x, 1017 <3 x float> %y, 1018 metadata !"round.dynamic", 1019 metadata !"fpexcept.strict") #1 1020 ret <3 x float> %sub 1021} 1022 1023define <3 x double> @constrained_vector_fsub_v3f64(<3 x double> %x, <3 x double> %y) #0 { 1024; PC64LE-LABEL: constrained_vector_fsub_v3f64: 1025; PC64LE: # %bb.0: # %entry 1026; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1027; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5 1028; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4 1029; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 1030; PC64LE-NEXT: xxmrghd 0, 5, 4 1031; PC64LE-NEXT: xssubdp 3, 3, 6 1032; PC64LE-NEXT: xxmrghd 1, 2, 1 1033; PC64LE-NEXT: xvsubdp 2, 1, 0 1034; PC64LE-NEXT: xxswapd 1, 2 1035; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1036; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1037; PC64LE-NEXT: blr 1038; 1039; PC64LE9-LABEL: constrained_vector_fsub_v3f64: 1040; PC64LE9: # %bb.0: # %entry 1041; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5 1042; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4 1043; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 1044; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1045; PC64LE9-NEXT: xxmrghd 0, 5, 4 1046; PC64LE9-NEXT: xxmrghd 1, 2, 1 1047; PC64LE9-NEXT: xssubdp 3, 3, 6 1048; PC64LE9-NEXT: xvsubdp 2, 1, 0 1049; PC64LE9-NEXT: xxswapd 1, 2 1050; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1051; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1052; PC64LE9-NEXT: blr 1053entry: 1054 %sub = call <3 x double> @llvm.experimental.constrained.fsub.v3f64( 1055 <3 x double> %x, 1056 <3 x double> %y, 1057 metadata !"round.dynamic", 1058 metadata !"fpexcept.strict") #1 1059 ret <3 x double> %sub 1060} 1061 1062define <4 x double> @constrained_vector_fsub_v4f64(<4 x double> %x, <4 x double> %y) #0 { 1063; PC64LE-LABEL: constrained_vector_fsub_v4f64: 1064; PC64LE: # %bb.0: # %entry 1065; PC64LE-NEXT: xvsubdp 35, 35, 37 1066; PC64LE-NEXT: xvsubdp 34, 34, 36 1067; PC64LE-NEXT: blr 1068; 1069; PC64LE9-LABEL: constrained_vector_fsub_v4f64: 1070; PC64LE9: # %bb.0: # %entry 1071; PC64LE9-NEXT: xvsubdp 35, 35, 37 1072; PC64LE9-NEXT: xvsubdp 34, 34, 36 1073; PC64LE9-NEXT: blr 1074entry: 1075 %sub = call <4 x double> @llvm.experimental.constrained.fsub.v4f64( 1076 <4 x double> %x, 1077 <4 x double> %y, 1078 metadata !"round.dynamic", 1079 metadata !"fpexcept.strict") #1 1080 ret <4 x double> %sub 1081} 1082 1083define <1 x float> @constrained_vector_sqrt_v1f32(<1 x float> %x) #0 { 1084; PC64LE-LABEL: constrained_vector_sqrt_v1f32: 1085; PC64LE: # %bb.0: # %entry 1086; PC64LE-NEXT: xssqrtsp 1, 1 1087; PC64LE-NEXT: blr 1088; 1089; PC64LE9-LABEL: constrained_vector_sqrt_v1f32: 1090; PC64LE9: # %bb.0: # %entry 1091; PC64LE9-NEXT: xssqrtsp 1, 1 1092; PC64LE9-NEXT: blr 1093entry: 1094 %sqrt = call <1 x float> @llvm.experimental.constrained.sqrt.v1f32( 1095 <1 x float> %x, 1096 metadata !"round.dynamic", 1097 metadata !"fpexcept.strict") #1 1098 ret <1 x float> %sqrt 1099} 1100 1101define <2 x double> @constrained_vector_sqrt_v2f64(<2 x double> %x) #0 { 1102; PC64LE-LABEL: constrained_vector_sqrt_v2f64: 1103; PC64LE: # %bb.0: # %entry 1104; PC64LE-NEXT: xvsqrtdp 34, 34 1105; PC64LE-NEXT: blr 1106; 1107; PC64LE9-LABEL: constrained_vector_sqrt_v2f64: 1108; PC64LE9: # %bb.0: # %entry 1109; PC64LE9-NEXT: xvsqrtdp 34, 34 1110; PC64LE9-NEXT: blr 1111entry: 1112 %sqrt = call <2 x double> @llvm.experimental.constrained.sqrt.v2f64( 1113 <2 x double> %x, 1114 metadata !"round.dynamic", 1115 metadata !"fpexcept.strict") #1 1116 ret <2 x double> %sqrt 1117} 1118 1119define <3 x float> @constrained_vector_sqrt_v3f32(<3 x float> %x) #0 { 1120; PC64LE-LABEL: constrained_vector_sqrt_v3f32: 1121; PC64LE: # %bb.0: # %entry 1122; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 1123; PC64LE-NEXT: xxswapd 1, 34 1124; PC64LE-NEXT: addis 3, 2, .LCPI27_0@toc@ha 1125; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 1126; PC64LE-NEXT: addi 3, 3, .LCPI27_0@toc@l 1127; PC64LE-NEXT: lvx 4, 0, 3 1128; PC64LE-NEXT: xscvspdpn 0, 0 1129; PC64LE-NEXT: xscvspdpn 1, 1 1130; PC64LE-NEXT: xscvspdpn 2, 2 1131; PC64LE-NEXT: xssqrtsp 0, 0 1132; PC64LE-NEXT: xssqrtsp 1, 1 1133; PC64LE-NEXT: xssqrtsp 2, 2 1134; PC64LE-NEXT: xscvdpspn 0, 0 1135; PC64LE-NEXT: xscvdpspn 1, 1 1136; PC64LE-NEXT: xscvdpspn 34, 2 1137; PC64LE-NEXT: xxmrghw 35, 1, 0 1138; PC64LE-NEXT: vperm 2, 2, 3, 4 1139; PC64LE-NEXT: blr 1140; 1141; PC64LE9-LABEL: constrained_vector_sqrt_v3f32: 1142; PC64LE9: # %bb.0: # %entry 1143; PC64LE9-NEXT: xxswapd 1, 34 1144; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3 1145; PC64LE9-NEXT: addis 3, 2, .LCPI27_0@toc@ha 1146; PC64LE9-NEXT: addi 3, 3, .LCPI27_0@toc@l 1147; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 1148; PC64LE9-NEXT: xscvspdpn 1, 1 1149; PC64LE9-NEXT: xscvspdpn 2, 2 1150; PC64LE9-NEXT: xscvspdpn 0, 0 1151; PC64LE9-NEXT: lxv 35, 0(3) 1152; PC64LE9-NEXT: xssqrtsp 1, 1 1153; PC64LE9-NEXT: xssqrtsp 2, 2 1154; PC64LE9-NEXT: xssqrtsp 0, 0 1155; PC64LE9-NEXT: xscvdpspn 2, 2 1156; PC64LE9-NEXT: xscvdpspn 1, 1 1157; PC64LE9-NEXT: xscvdpspn 36, 0 1158; PC64LE9-NEXT: xxmrghw 34, 1, 2 1159; PC64LE9-NEXT: vperm 2, 4, 2, 3 1160; PC64LE9-NEXT: blr 1161entry: 1162 %sqrt = call <3 x float> @llvm.experimental.constrained.sqrt.v3f32( 1163 <3 x float> %x, 1164 metadata !"round.dynamic", 1165 metadata !"fpexcept.strict") #1 1166 ret <3 x float> %sqrt 1167} 1168 1169define <3 x double> @constrained_vector_sqrt_v3f64(<3 x double> %x) #0 { 1170; PC64LE-LABEL: constrained_vector_sqrt_v3f64: 1171; PC64LE: # %bb.0: # %entry 1172; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 1173; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1174; PC64LE-NEXT: xxmrghd 0, 2, 1 1175; PC64LE-NEXT: xssqrtdp 3, 3 1176; PC64LE-NEXT: xvsqrtdp 2, 0 1177; PC64LE-NEXT: xxswapd 1, 2 1178; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1179; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1180; PC64LE-NEXT: blr 1181; 1182; PC64LE9-LABEL: constrained_vector_sqrt_v3f64: 1183; PC64LE9: # %bb.0: # %entry 1184; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 1185; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1186; PC64LE9-NEXT: xxmrghd 0, 2, 1 1187; PC64LE9-NEXT: xssqrtdp 3, 3 1188; PC64LE9-NEXT: xvsqrtdp 2, 0 1189; PC64LE9-NEXT: xxswapd 1, 2 1190; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1191; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1192; PC64LE9-NEXT: blr 1193entry: 1194 %sqrt = call <3 x double> @llvm.experimental.constrained.sqrt.v3f64( 1195 <3 x double> %x, 1196 metadata !"round.dynamic", 1197 metadata !"fpexcept.strict") #1 1198 ret <3 x double> %sqrt 1199} 1200 1201define <4 x double> @constrained_vector_sqrt_v4f64(<4 x double> %x) #0 { 1202; PC64LE-LABEL: constrained_vector_sqrt_v4f64: 1203; PC64LE: # %bb.0: # %entry 1204; PC64LE-NEXT: xvsqrtdp 35, 35 1205; PC64LE-NEXT: xvsqrtdp 34, 34 1206; PC64LE-NEXT: blr 1207; 1208; PC64LE9-LABEL: constrained_vector_sqrt_v4f64: 1209; PC64LE9: # %bb.0: # %entry 1210; PC64LE9-NEXT: xvsqrtdp 35, 35 1211; PC64LE9-NEXT: xvsqrtdp 34, 34 1212; PC64LE9-NEXT: blr 1213 entry: 1214 %sqrt = call <4 x double> @llvm.experimental.constrained.sqrt.v4f64( 1215 <4 x double> %x, 1216 metadata !"round.dynamic", 1217 metadata !"fpexcept.strict") #1 1218 ret <4 x double> %sqrt 1219} 1220 1221define <1 x float> @constrained_vector_pow_v1f32(<1 x float> %x, <1 x float> %y) #0 { 1222; PC64LE-LABEL: constrained_vector_pow_v1f32: 1223; PC64LE: # %bb.0: # %entry 1224; PC64LE-NEXT: mflr 0 1225; PC64LE-NEXT: std 0, 16(1) 1226; PC64LE-NEXT: stdu 1, -32(1) 1227; PC64LE-NEXT: bl powf 1228; PC64LE-NEXT: nop 1229; PC64LE-NEXT: addi 1, 1, 32 1230; PC64LE-NEXT: ld 0, 16(1) 1231; PC64LE-NEXT: mtlr 0 1232; PC64LE-NEXT: blr 1233; 1234; PC64LE9-LABEL: constrained_vector_pow_v1f32: 1235; PC64LE9: # %bb.0: # %entry 1236; PC64LE9-NEXT: mflr 0 1237; PC64LE9-NEXT: std 0, 16(1) 1238; PC64LE9-NEXT: stdu 1, -32(1) 1239; PC64LE9-NEXT: bl powf 1240; PC64LE9-NEXT: nop 1241; PC64LE9-NEXT: addi 1, 1, 32 1242; PC64LE9-NEXT: ld 0, 16(1) 1243; PC64LE9-NEXT: mtlr 0 1244; PC64LE9-NEXT: blr 1245entry: 1246 %pow = call <1 x float> @llvm.experimental.constrained.pow.v1f32( 1247 <1 x float> %x, 1248 <1 x float> %y, 1249 metadata !"round.dynamic", 1250 metadata !"fpexcept.strict") #1 1251 ret <1 x float> %pow 1252} 1253 1254define <2 x double> @constrained_vector_pow_v2f64(<2 x double> %x, <2 x double> %y) #0 { 1255; PC64LE-LABEL: constrained_vector_pow_v2f64: 1256; PC64LE: # %bb.0: # %entry 1257; PC64LE-NEXT: mflr 0 1258; PC64LE-NEXT: std 0, 16(1) 1259; PC64LE-NEXT: stdu 1, -96(1) 1260; PC64LE-NEXT: li 3, 48 1261; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill 1262; PC64LE-NEXT: li 3, 64 1263; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 1264; PC64LE-NEXT: li 3, 80 1265; PC64LE-NEXT: vmr 30, 2 1266; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 1267; PC64LE-NEXT: vmr 31, 3 1268; PC64LE-NEXT: xxlor 1, 62, 62 1269; PC64LE-NEXT: xxlor 2, 63, 63 1270; PC64LE-NEXT: bl pow 1271; PC64LE-NEXT: nop 1272; PC64LE-NEXT: xxlor 61, 1, 1 1273; PC64LE-NEXT: xxswapd 1, 62 1274; PC64LE-NEXT: xxswapd 2, 63 1275; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1276; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1277; PC64LE-NEXT: bl pow 1278; PC64LE-NEXT: nop 1279; PC64LE-NEXT: li 3, 80 1280; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1281; PC64LE-NEXT: xxmrghd 34, 61, 1 1282; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 1283; PC64LE-NEXT: li 3, 64 1284; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 1285; PC64LE-NEXT: li 3, 48 1286; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload 1287; PC64LE-NEXT: addi 1, 1, 96 1288; PC64LE-NEXT: ld 0, 16(1) 1289; PC64LE-NEXT: mtlr 0 1290; PC64LE-NEXT: blr 1291; 1292; PC64LE9-LABEL: constrained_vector_pow_v2f64: 1293; PC64LE9: # %bb.0: # %entry 1294; PC64LE9-NEXT: mflr 0 1295; PC64LE9-NEXT: std 0, 16(1) 1296; PC64LE9-NEXT: stdu 1, -80(1) 1297; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill 1298; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill 1299; PC64LE9-NEXT: vmr 31, 3 1300; PC64LE9-NEXT: xscpsgndp 2, 63, 63 1301; PC64LE9-NEXT: vmr 30, 2 1302; PC64LE9-NEXT: xscpsgndp 1, 62, 62 1303; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill 1304; PC64LE9-NEXT: bl pow 1305; PC64LE9-NEXT: nop 1306; PC64LE9-NEXT: xscpsgndp 61, 1, 1 1307; PC64LE9-NEXT: xxswapd 1, 62 1308; PC64LE9-NEXT: xxswapd 2, 63 1309; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1310; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1311; PC64LE9-NEXT: bl pow 1312; PC64LE9-NEXT: nop 1313; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1314; PC64LE9-NEXT: xxmrghd 34, 61, 1 1315; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload 1316; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload 1317; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload 1318; PC64LE9-NEXT: addi 1, 1, 80 1319; PC64LE9-NEXT: ld 0, 16(1) 1320; PC64LE9-NEXT: mtlr 0 1321; PC64LE9-NEXT: blr 1322entry: 1323 %pow = call <2 x double> @llvm.experimental.constrained.pow.v2f64( 1324 <2 x double> %x, 1325 <2 x double> %y, 1326 metadata !"round.dynamic", 1327 metadata !"fpexcept.strict") #1 1328 ret <2 x double> %pow 1329} 1330 1331define <3 x float> @constrained_vector_pow_v3f32(<3 x float> %x, <3 x float> %y) #0 { 1332; PC64LE-LABEL: constrained_vector_pow_v3f32: 1333; PC64LE: # %bb.0: # %entry 1334; PC64LE-NEXT: mflr 0 1335; PC64LE-NEXT: std 0, 16(1) 1336; PC64LE-NEXT: stdu 1, -96(1) 1337; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 1338; PC64LE-NEXT: xxsldwi 2, 35, 35, 1 1339; PC64LE-NEXT: li 3, 48 1340; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 1341; PC64LE-NEXT: li 3, 64 1342; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill 1343; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 1344; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 1345; PC64LE-NEXT: xscvspdpn 1, 0 1346; PC64LE-NEXT: xscvspdpn 2, 2 1347; PC64LE-NEXT: vmr 31, 3 1348; PC64LE-NEXT: vmr 30, 2 1349; PC64LE-NEXT: bl powf 1350; PC64LE-NEXT: nop 1351; PC64LE-NEXT: xxswapd 0, 62 1352; PC64LE-NEXT: xxswapd 2, 63 1353; PC64LE-NEXT: fmr 31, 1 1354; PC64LE-NEXT: xscvspdpn 1, 0 1355; PC64LE-NEXT: xscvspdpn 2, 2 1356; PC64LE-NEXT: bl powf 1357; PC64LE-NEXT: nop 1358; PC64LE-NEXT: xxsldwi 0, 62, 62, 3 1359; PC64LE-NEXT: xxsldwi 2, 63, 63, 3 1360; PC64LE-NEXT: fmr 30, 1 1361; PC64LE-NEXT: xscvspdpn 1, 0 1362; PC64LE-NEXT: xscvspdpn 2, 2 1363; PC64LE-NEXT: bl powf 1364; PC64LE-NEXT: nop 1365; PC64LE-NEXT: xscvdpspn 0, 30 1366; PC64LE-NEXT: addis 3, 2, .LCPI32_0@toc@ha 1367; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload 1368; PC64LE-NEXT: xscvdpspn 1, 1 1369; PC64LE-NEXT: addi 3, 3, .LCPI32_0@toc@l 1370; PC64LE-NEXT: xscvdpspn 34, 31 1371; PC64LE-NEXT: lvx 4, 0, 3 1372; PC64LE-NEXT: li 3, 64 1373; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 1374; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 1375; PC64LE-NEXT: li 3, 48 1376; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 1377; PC64LE-NEXT: xxmrghw 35, 0, 1 1378; PC64LE-NEXT: vperm 2, 2, 3, 4 1379; PC64LE-NEXT: addi 1, 1, 96 1380; PC64LE-NEXT: ld 0, 16(1) 1381; PC64LE-NEXT: mtlr 0 1382; PC64LE-NEXT: blr 1383; 1384; PC64LE9-LABEL: constrained_vector_pow_v3f32: 1385; PC64LE9: # %bb.0: # %entry 1386; PC64LE9-NEXT: mflr 0 1387; PC64LE9-NEXT: std 0, 16(1) 1388; PC64LE9-NEXT: stdu 1, -80(1) 1389; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 1390; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 1391; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 1392; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 1393; PC64LE9-NEXT: xscvspdpn 1, 0 1394; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1 1395; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 1396; PC64LE9-NEXT: xscvspdpn 2, 0 1397; PC64LE9-NEXT: vmr 31, 3 1398; PC64LE9-NEXT: vmr 30, 2 1399; PC64LE9-NEXT: bl powf 1400; PC64LE9-NEXT: nop 1401; PC64LE9-NEXT: xxswapd 0, 62 1402; PC64LE9-NEXT: fmr 31, 1 1403; PC64LE9-NEXT: xscvspdpn 1, 0 1404; PC64LE9-NEXT: xxswapd 0, 63 1405; PC64LE9-NEXT: xscvspdpn 2, 0 1406; PC64LE9-NEXT: bl powf 1407; PC64LE9-NEXT: nop 1408; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3 1409; PC64LE9-NEXT: fmr 30, 1 1410; PC64LE9-NEXT: xscvspdpn 1, 0 1411; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 1412; PC64LE9-NEXT: xscvspdpn 2, 0 1413; PC64LE9-NEXT: bl powf 1414; PC64LE9-NEXT: nop 1415; PC64LE9-NEXT: xscvdpspn 0, 1 1416; PC64LE9-NEXT: xscvdpspn 1, 30 1417; PC64LE9-NEXT: addis 3, 2, .LCPI32_0@toc@ha 1418; PC64LE9-NEXT: xscvdpspn 35, 31 1419; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 1420; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 1421; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 1422; PC64LE9-NEXT: addi 3, 3, .LCPI32_0@toc@l 1423; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 1424; PC64LE9-NEXT: lxv 36, 0(3) 1425; PC64LE9-NEXT: xxmrghw 34, 1, 0 1426; PC64LE9-NEXT: vperm 2, 3, 2, 4 1427; PC64LE9-NEXT: addi 1, 1, 80 1428; PC64LE9-NEXT: ld 0, 16(1) 1429; PC64LE9-NEXT: mtlr 0 1430; PC64LE9-NEXT: blr 1431entry: 1432 %pow = call <3 x float> @llvm.experimental.constrained.pow.v3f32( 1433 <3 x float> %x, 1434 <3 x float> %y, 1435 metadata !"round.dynamic", 1436 metadata !"fpexcept.strict") #1 1437 ret <3 x float> %pow 1438} 1439 1440define <3 x double> @constrained_vector_pow_v3f64(<3 x double> %x, <3 x double> %y) #0 { 1441; PC64LE-LABEL: constrained_vector_pow_v3f64: 1442; PC64LE: # %bb.0: # %entry 1443; PC64LE-NEXT: mflr 0 1444; PC64LE-NEXT: std 0, 16(1) 1445; PC64LE-NEXT: stdu 1, -96(1) 1446; PC64LE-NEXT: stfd 28, 64(1) # 8-byte Folded Spill 1447; PC64LE-NEXT: fmr 28, 2 1448; PC64LE-NEXT: li 3, 48 1449; PC64LE-NEXT: fmr 2, 4 1450; PC64LE-NEXT: stfd 29, 72(1) # 8-byte Folded Spill 1451; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill 1452; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 1453; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 1454; PC64LE-NEXT: fmr 31, 6 1455; PC64LE-NEXT: fmr 30, 5 1456; PC64LE-NEXT: fmr 29, 3 1457; PC64LE-NEXT: bl pow 1458; PC64LE-NEXT: nop 1459; PC64LE-NEXT: xxlor 63, 1, 1 1460; PC64LE-NEXT: fmr 1, 28 1461; PC64LE-NEXT: fmr 2, 30 1462; PC64LE-NEXT: bl pow 1463; PC64LE-NEXT: nop 1464; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1465; PC64LE-NEXT: xxmrghd 63, 1, 63 1466; PC64LE-NEXT: fmr 2, 31 1467; PC64LE-NEXT: fmr 1, 29 1468; PC64LE-NEXT: bl pow 1469; PC64LE-NEXT: nop 1470; PC64LE-NEXT: xxswapd 0, 63 1471; PC64LE-NEXT: li 3, 48 1472; PC64LE-NEXT: xxlor 2, 63, 63 1473; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 1474; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload 1475; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 1476; PC64LE-NEXT: lfd 29, 72(1) # 8-byte Folded Reload 1477; PC64LE-NEXT: fmr 3, 1 1478; PC64LE-NEXT: lfd 28, 64(1) # 8-byte Folded Reload 1479; PC64LE-NEXT: fmr 1, 0 1480; PC64LE-NEXT: addi 1, 1, 96 1481; PC64LE-NEXT: ld 0, 16(1) 1482; PC64LE-NEXT: mtlr 0 1483; PC64LE-NEXT: blr 1484; 1485; PC64LE9-LABEL: constrained_vector_pow_v3f64: 1486; PC64LE9: # %bb.0: # %entry 1487; PC64LE9-NEXT: mflr 0 1488; PC64LE9-NEXT: std 0, 16(1) 1489; PC64LE9-NEXT: stdu 1, -80(1) 1490; PC64LE9-NEXT: stfd 28, 48(1) # 8-byte Folded Spill 1491; PC64LE9-NEXT: fmr 28, 2 1492; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 1493; PC64LE9-NEXT: fmr 2, 4 1494; PC64LE9-NEXT: stfd 29, 56(1) # 8-byte Folded Spill 1495; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 1496; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 1497; PC64LE9-NEXT: fmr 31, 6 1498; PC64LE9-NEXT: fmr 30, 5 1499; PC64LE9-NEXT: fmr 29, 3 1500; PC64LE9-NEXT: bl pow 1501; PC64LE9-NEXT: nop 1502; PC64LE9-NEXT: xscpsgndp 63, 1, 1 1503; PC64LE9-NEXT: fmr 1, 28 1504; PC64LE9-NEXT: fmr 2, 30 1505; PC64LE9-NEXT: bl pow 1506; PC64LE9-NEXT: nop 1507; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1508; PC64LE9-NEXT: xxmrghd 63, 1, 63 1509; PC64LE9-NEXT: fmr 1, 29 1510; PC64LE9-NEXT: fmr 2, 31 1511; PC64LE9-NEXT: bl pow 1512; PC64LE9-NEXT: nop 1513; PC64LE9-NEXT: fmr 3, 1 1514; PC64LE9-NEXT: xxswapd 1, 63 1515; PC64LE9-NEXT: xscpsgndp 2, 63, 63 1516; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 1517; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 1518; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1519; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 1520; PC64LE9-NEXT: lfd 29, 56(1) # 8-byte Folded Reload 1521; PC64LE9-NEXT: lfd 28, 48(1) # 8-byte Folded Reload 1522; PC64LE9-NEXT: addi 1, 1, 80 1523; PC64LE9-NEXT: ld 0, 16(1) 1524; PC64LE9-NEXT: mtlr 0 1525; PC64LE9-NEXT: blr 1526entry: 1527 %pow = call <3 x double> @llvm.experimental.constrained.pow.v3f64( 1528 <3 x double> %x, 1529 <3 x double> %y, 1530 metadata !"round.dynamic", 1531 metadata !"fpexcept.strict") #1 1532 ret <3 x double> %pow 1533} 1534 1535define <4 x double> @constrained_vector_pow_v4f64(<4 x double> %x, <4 x double> %y) #0 { 1536; PC64LE-LABEL: constrained_vector_pow_v4f64: 1537; PC64LE: # %bb.0: # %entry 1538; PC64LE-NEXT: mflr 0 1539; PC64LE-NEXT: std 0, 16(1) 1540; PC64LE-NEXT: stdu 1, -128(1) 1541; PC64LE-NEXT: li 3, 48 1542; PC64LE-NEXT: stxvd2x 59, 1, 3 # 16-byte Folded Spill 1543; PC64LE-NEXT: li 3, 64 1544; PC64LE-NEXT: stxvd2x 60, 1, 3 # 16-byte Folded Spill 1545; PC64LE-NEXT: li 3, 80 1546; PC64LE-NEXT: vmr 28, 2 1547; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill 1548; PC64LE-NEXT: li 3, 96 1549; PC64LE-NEXT: vmr 29, 3 1550; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 1551; PC64LE-NEXT: vmr 30, 4 1552; PC64LE-NEXT: li 3, 112 1553; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 1554; PC64LE-NEXT: vmr 31, 5 1555; PC64LE-NEXT: xxlor 1, 60, 60 1556; PC64LE-NEXT: xxlor 2, 62, 62 1557; PC64LE-NEXT: bl pow 1558; PC64LE-NEXT: nop 1559; PC64LE-NEXT: xxlor 59, 1, 1 1560; PC64LE-NEXT: xxswapd 1, 60 1561; PC64LE-NEXT: xxswapd 2, 62 1562; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1563; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1564; PC64LE-NEXT: bl pow 1565; PC64LE-NEXT: nop 1566; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1567; PC64LE-NEXT: xxmrghd 62, 59, 1 1568; PC64LE-NEXT: xxlor 2, 63, 63 1569; PC64LE-NEXT: xxlor 1, 61, 61 1570; PC64LE-NEXT: bl pow 1571; PC64LE-NEXT: nop 1572; PC64LE-NEXT: xxlor 60, 1, 1 1573; PC64LE-NEXT: xxswapd 1, 61 1574; PC64LE-NEXT: xxswapd 2, 63 1575; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1576; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1577; PC64LE-NEXT: bl pow 1578; PC64LE-NEXT: nop 1579; PC64LE-NEXT: li 3, 112 1580; PC64LE-NEXT: vmr 2, 30 1581; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1582; PC64LE-NEXT: xxmrghd 35, 60, 1 1583; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 1584; PC64LE-NEXT: li 3, 96 1585; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 1586; PC64LE-NEXT: li 3, 80 1587; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload 1588; PC64LE-NEXT: li 3, 64 1589; PC64LE-NEXT: lxvd2x 60, 1, 3 # 16-byte Folded Reload 1590; PC64LE-NEXT: li 3, 48 1591; PC64LE-NEXT: lxvd2x 59, 1, 3 # 16-byte Folded Reload 1592; PC64LE-NEXT: addi 1, 1, 128 1593; PC64LE-NEXT: ld 0, 16(1) 1594; PC64LE-NEXT: mtlr 0 1595; PC64LE-NEXT: blr 1596; 1597; PC64LE9-LABEL: constrained_vector_pow_v4f64: 1598; PC64LE9: # %bb.0: # %entry 1599; PC64LE9-NEXT: mflr 0 1600; PC64LE9-NEXT: std 0, 16(1) 1601; PC64LE9-NEXT: stdu 1, -112(1) 1602; PC64LE9-NEXT: stxv 60, 48(1) # 16-byte Folded Spill 1603; PC64LE9-NEXT: stxv 62, 80(1) # 16-byte Folded Spill 1604; PC64LE9-NEXT: vmr 30, 4 1605; PC64LE9-NEXT: xscpsgndp 2, 62, 62 1606; PC64LE9-NEXT: vmr 28, 2 1607; PC64LE9-NEXT: xscpsgndp 1, 60, 60 1608; PC64LE9-NEXT: stxv 59, 32(1) # 16-byte Folded Spill 1609; PC64LE9-NEXT: stxv 61, 64(1) # 16-byte Folded Spill 1610; PC64LE9-NEXT: stxv 63, 96(1) # 16-byte Folded Spill 1611; PC64LE9-NEXT: vmr 31, 5 1612; PC64LE9-NEXT: vmr 29, 3 1613; PC64LE9-NEXT: bl pow 1614; PC64LE9-NEXT: nop 1615; PC64LE9-NEXT: xscpsgndp 59, 1, 1 1616; PC64LE9-NEXT: xxswapd 1, 60 1617; PC64LE9-NEXT: xxswapd 2, 62 1618; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1619; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1620; PC64LE9-NEXT: bl pow 1621; PC64LE9-NEXT: nop 1622; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1623; PC64LE9-NEXT: xxmrghd 62, 59, 1 1624; PC64LE9-NEXT: xscpsgndp 1, 61, 61 1625; PC64LE9-NEXT: xscpsgndp 2, 63, 63 1626; PC64LE9-NEXT: bl pow 1627; PC64LE9-NEXT: nop 1628; PC64LE9-NEXT: xscpsgndp 60, 1, 1 1629; PC64LE9-NEXT: xxswapd 1, 61 1630; PC64LE9-NEXT: xxswapd 2, 63 1631; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1632; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 1633; PC64LE9-NEXT: bl pow 1634; PC64LE9-NEXT: nop 1635; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1636; PC64LE9-NEXT: xxmrghd 35, 60, 1 1637; PC64LE9-NEXT: vmr 2, 30 1638; PC64LE9-NEXT: lxv 63, 96(1) # 16-byte Folded Reload 1639; PC64LE9-NEXT: lxv 62, 80(1) # 16-byte Folded Reload 1640; PC64LE9-NEXT: lxv 61, 64(1) # 16-byte Folded Reload 1641; PC64LE9-NEXT: lxv 60, 48(1) # 16-byte Folded Reload 1642; PC64LE9-NEXT: lxv 59, 32(1) # 16-byte Folded Reload 1643; PC64LE9-NEXT: addi 1, 1, 112 1644; PC64LE9-NEXT: ld 0, 16(1) 1645; PC64LE9-NEXT: mtlr 0 1646; PC64LE9-NEXT: blr 1647entry: 1648 %pow = call <4 x double> @llvm.experimental.constrained.pow.v4f64( 1649 <4 x double> %x, 1650 <4 x double> %y, 1651 metadata !"round.dynamic", 1652 metadata !"fpexcept.strict") #1 1653 ret <4 x double> %pow 1654} 1655 1656define <1 x float> @constrained_vector_powi_v1f32(<1 x float> %x, i32 %y) #0 { 1657; PC64LE-LABEL: constrained_vector_powi_v1f32: 1658; PC64LE: # %bb.0: # %entry 1659; PC64LE-NEXT: mflr 0 1660; PC64LE-NEXT: std 0, 16(1) 1661; PC64LE-NEXT: stdu 1, -32(1) 1662; PC64LE-NEXT: clrldi 4, 4, 32 1663; PC64LE-NEXT: bl __powisf2 1664; PC64LE-NEXT: nop 1665; PC64LE-NEXT: addi 1, 1, 32 1666; PC64LE-NEXT: ld 0, 16(1) 1667; PC64LE-NEXT: mtlr 0 1668; PC64LE-NEXT: blr 1669; 1670; PC64LE9-LABEL: constrained_vector_powi_v1f32: 1671; PC64LE9: # %bb.0: # %entry 1672; PC64LE9-NEXT: mflr 0 1673; PC64LE9-NEXT: std 0, 16(1) 1674; PC64LE9-NEXT: stdu 1, -32(1) 1675; PC64LE9-NEXT: clrldi 4, 4, 32 1676; PC64LE9-NEXT: bl __powisf2 1677; PC64LE9-NEXT: nop 1678; PC64LE9-NEXT: addi 1, 1, 32 1679; PC64LE9-NEXT: ld 0, 16(1) 1680; PC64LE9-NEXT: mtlr 0 1681; PC64LE9-NEXT: blr 1682entry: 1683 %powi = call <1 x float> @llvm.experimental.constrained.powi.v1f32( 1684 <1 x float> %x, 1685 i32 %y, 1686 metadata !"round.dynamic", 1687 metadata !"fpexcept.strict") #1 1688 ret <1 x float> %powi 1689} 1690 1691define <2 x double> @constrained_vector_powi_v2f64(<2 x double> %x, i32 %y) #0 { 1692; PC64LE-LABEL: constrained_vector_powi_v2f64: 1693; PC64LE: # %bb.0: # %entry 1694; PC64LE-NEXT: mflr 0 1695; PC64LE-NEXT: std 0, 16(1) 1696; PC64LE-NEXT: stdu 1, -96(1) 1697; PC64LE-NEXT: li 3, 48 1698; PC64LE-NEXT: std 30, 80(1) # 8-byte Folded Spill 1699; PC64LE-NEXT: clrldi 30, 5, 32 1700; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 1701; PC64LE-NEXT: li 3, 64 1702; PC64LE-NEXT: mr 4, 30 1703; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 1704; PC64LE-NEXT: vmr 31, 2 1705; PC64LE-NEXT: xxlor 1, 63, 63 1706; PC64LE-NEXT: bl __powidf2 1707; PC64LE-NEXT: nop 1708; PC64LE-NEXT: xxlor 62, 1, 1 1709; PC64LE-NEXT: xxswapd 1, 63 1710; PC64LE-NEXT: mr 4, 30 1711; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1712; PC64LE-NEXT: bl __powidf2 1713; PC64LE-NEXT: nop 1714; PC64LE-NEXT: li 3, 64 1715; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1716; PC64LE-NEXT: xxmrghd 34, 62, 1 1717; PC64LE-NEXT: ld 30, 80(1) # 8-byte Folded Reload 1718; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 1719; PC64LE-NEXT: li 3, 48 1720; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 1721; PC64LE-NEXT: addi 1, 1, 96 1722; PC64LE-NEXT: ld 0, 16(1) 1723; PC64LE-NEXT: mtlr 0 1724; PC64LE-NEXT: blr 1725; 1726; PC64LE9-LABEL: constrained_vector_powi_v2f64: 1727; PC64LE9: # %bb.0: # %entry 1728; PC64LE9-NEXT: mflr 0 1729; PC64LE9-NEXT: std 0, 16(1) 1730; PC64LE9-NEXT: stdu 1, -80(1) 1731; PC64LE9-NEXT: std 30, 64(1) # 8-byte Folded Spill 1732; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 1733; PC64LE9-NEXT: vmr 31, 2 1734; PC64LE9-NEXT: clrldi 30, 5, 32 1735; PC64LE9-NEXT: xscpsgndp 1, 63, 63 1736; PC64LE9-NEXT: mr 4, 30 1737; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 1738; PC64LE9-NEXT: bl __powidf2 1739; PC64LE9-NEXT: nop 1740; PC64LE9-NEXT: mr 4, 30 1741; PC64LE9-NEXT: xscpsgndp 62, 1, 1 1742; PC64LE9-NEXT: xxswapd 1, 63 1743; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1744; PC64LE9-NEXT: bl __powidf2 1745; PC64LE9-NEXT: nop 1746; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1747; PC64LE9-NEXT: xxmrghd 34, 62, 1 1748; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 1749; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 1750; PC64LE9-NEXT: ld 30, 64(1) # 8-byte Folded Reload 1751; PC64LE9-NEXT: addi 1, 1, 80 1752; PC64LE9-NEXT: ld 0, 16(1) 1753; PC64LE9-NEXT: mtlr 0 1754; PC64LE9-NEXT: blr 1755entry: 1756 %powi = call <2 x double> @llvm.experimental.constrained.powi.v2f64( 1757 <2 x double> %x, 1758 i32 %y, 1759 metadata !"round.dynamic", 1760 metadata !"fpexcept.strict") #1 1761 ret <2 x double> %powi 1762} 1763 1764define <3 x float> @constrained_vector_powi_v3f32(<3 x float> %x, i32 %y) #0 { 1765; 1766; 1767; PC64LE-LABEL: constrained_vector_powi_v3f32: 1768; PC64LE: # %bb.0: # %entry 1769; PC64LE-NEXT: mflr 0 1770; PC64LE-NEXT: std 0, 16(1) 1771; PC64LE-NEXT: stdu 1, -96(1) 1772; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 1773; PC64LE-NEXT: std 30, 64(1) # 8-byte Folded Spill 1774; PC64LE-NEXT: clrldi 30, 5, 32 1775; PC64LE-NEXT: li 3, 48 1776; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill 1777; PC64LE-NEXT: mr 4, 30 1778; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 1779; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 1780; PC64LE-NEXT: vmr 31, 2 1781; PC64LE-NEXT: xscvspdpn 1, 0 1782; PC64LE-NEXT: bl __powisf2 1783; PC64LE-NEXT: nop 1784; PC64LE-NEXT: xxswapd 0, 63 1785; PC64LE-NEXT: fmr 31, 1 1786; PC64LE-NEXT: mr 4, 30 1787; PC64LE-NEXT: xscvspdpn 1, 0 1788; PC64LE-NEXT: bl __powisf2 1789; PC64LE-NEXT: nop 1790; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 1791; PC64LE-NEXT: fmr 30, 1 1792; PC64LE-NEXT: mr 4, 30 1793; PC64LE-NEXT: xscvspdpn 1, 0 1794; PC64LE-NEXT: bl __powisf2 1795; PC64LE-NEXT: nop 1796; PC64LE-NEXT: xscvdpspn 0, 30 1797; PC64LE-NEXT: addis 3, 2, .LCPI37_0@toc@ha 1798; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload 1799; PC64LE-NEXT: ld 30, 64(1) # 8-byte Folded Reload 1800; PC64LE-NEXT: xscvdpspn 1, 1 1801; PC64LE-NEXT: addi 3, 3, .LCPI37_0@toc@l 1802; PC64LE-NEXT: xscvdpspn 34, 31 1803; PC64LE-NEXT: lvx 4, 0, 3 1804; PC64LE-NEXT: li 3, 48 1805; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 1806; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 1807; PC64LE-NEXT: xxmrghw 35, 0, 1 1808; PC64LE-NEXT: vperm 2, 2, 3, 4 1809; PC64LE-NEXT: addi 1, 1, 96 1810; PC64LE-NEXT: ld 0, 16(1) 1811; PC64LE-NEXT: mtlr 0 1812; PC64LE-NEXT: blr 1813; 1814; PC64LE9-LABEL: constrained_vector_powi_v3f32: 1815; PC64LE9: # %bb.0: # %entry 1816; PC64LE9-NEXT: mflr 0 1817; PC64LE9-NEXT: std 0, 16(1) 1818; PC64LE9-NEXT: stdu 1, -80(1) 1819; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 1820; PC64LE9-NEXT: std 30, 48(1) # 8-byte Folded Spill 1821; PC64LE9-NEXT: clrldi 30, 5, 32 1822; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 1823; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 1824; PC64LE9-NEXT: vmr 31, 2 1825; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 1826; PC64LE9-NEXT: mr 4, 30 1827; PC64LE9-NEXT: xscvspdpn 1, 0 1828; PC64LE9-NEXT: bl __powisf2 1829; PC64LE9-NEXT: nop 1830; PC64LE9-NEXT: xxswapd 0, 63 1831; PC64LE9-NEXT: fmr 31, 1 1832; PC64LE9-NEXT: mr 4, 30 1833; PC64LE9-NEXT: xscvspdpn 1, 0 1834; PC64LE9-NEXT: bl __powisf2 1835; PC64LE9-NEXT: nop 1836; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 1837; PC64LE9-NEXT: fmr 30, 1 1838; PC64LE9-NEXT: mr 4, 30 1839; PC64LE9-NEXT: xscvspdpn 1, 0 1840; PC64LE9-NEXT: bl __powisf2 1841; PC64LE9-NEXT: nop 1842; PC64LE9-NEXT: xscvdpspn 0, 1 1843; PC64LE9-NEXT: xscvdpspn 1, 30 1844; PC64LE9-NEXT: addis 3, 2, .LCPI37_0@toc@ha 1845; PC64LE9-NEXT: xscvdpspn 35, 31 1846; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 1847; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 1848; PC64LE9-NEXT: ld 30, 48(1) # 8-byte Folded Reload 1849; PC64LE9-NEXT: addi 3, 3, .LCPI37_0@toc@l 1850; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 1851; PC64LE9-NEXT: lxv 36, 0(3) 1852; PC64LE9-NEXT: xxmrghw 34, 1, 0 1853; PC64LE9-NEXT: vperm 2, 3, 2, 4 1854; PC64LE9-NEXT: addi 1, 1, 80 1855; PC64LE9-NEXT: ld 0, 16(1) 1856; PC64LE9-NEXT: mtlr 0 1857; PC64LE9-NEXT: blr 1858entry: 1859 %powi = call <3 x float> @llvm.experimental.constrained.powi.v3f32( 1860 <3 x float> %x, 1861 i32 %y, 1862 metadata !"round.dynamic", 1863 metadata !"fpexcept.strict") #1 1864 ret <3 x float> %powi 1865} 1866 1867define <3 x double> @constrained_vector_powi_v3f64(<3 x double> %x, i32 %y) #0 { 1868; PC64LE-LABEL: constrained_vector_powi_v3f64: 1869; PC64LE: # %bb.0: # %entry 1870; PC64LE-NEXT: mflr 0 1871; PC64LE-NEXT: std 0, 16(1) 1872; PC64LE-NEXT: stdu 1, -96(1) 1873; PC64LE-NEXT: std 30, 64(1) # 8-byte Folded Spill 1874; PC64LE-NEXT: clrldi 30, 6, 32 1875; PC64LE-NEXT: li 3, 48 1876; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill 1877; PC64LE-NEXT: fmr 30, 2 1878; PC64LE-NEXT: mr 4, 30 1879; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 1880; PC64LE-NEXT: fmr 31, 3 1881; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 1882; PC64LE-NEXT: bl __powidf2 1883; PC64LE-NEXT: nop 1884; PC64LE-NEXT: xxlor 63, 1, 1 1885; PC64LE-NEXT: fmr 1, 30 1886; PC64LE-NEXT: mr 4, 30 1887; PC64LE-NEXT: bl __powidf2 1888; PC64LE-NEXT: nop 1889; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1890; PC64LE-NEXT: xxmrghd 63, 1, 63 1891; PC64LE-NEXT: mr 4, 30 1892; PC64LE-NEXT: fmr 1, 31 1893; PC64LE-NEXT: bl __powidf2 1894; PC64LE-NEXT: nop 1895; PC64LE-NEXT: xxswapd 0, 63 1896; PC64LE-NEXT: li 3, 48 1897; PC64LE-NEXT: xxlor 2, 63, 63 1898; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 1899; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload 1900; PC64LE-NEXT: ld 30, 64(1) # 8-byte Folded Reload 1901; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 1902; PC64LE-NEXT: fmr 3, 1 1903; PC64LE-NEXT: fmr 1, 0 1904; PC64LE-NEXT: addi 1, 1, 96 1905; PC64LE-NEXT: ld 0, 16(1) 1906; PC64LE-NEXT: mtlr 0 1907; PC64LE-NEXT: blr 1908; 1909; PC64LE9-LABEL: constrained_vector_powi_v3f64: 1910; PC64LE9: # %bb.0: # %entry 1911; PC64LE9-NEXT: mflr 0 1912; PC64LE9-NEXT: std 0, 16(1) 1913; PC64LE9-NEXT: stdu 1, -80(1) 1914; PC64LE9-NEXT: std 30, 48(1) # 8-byte Folded Spill 1915; PC64LE9-NEXT: clrldi 30, 6, 32 1916; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 1917; PC64LE9-NEXT: mr 4, 30 1918; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 1919; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 1920; PC64LE9-NEXT: fmr 31, 3 1921; PC64LE9-NEXT: fmr 30, 2 1922; PC64LE9-NEXT: bl __powidf2 1923; PC64LE9-NEXT: nop 1924; PC64LE9-NEXT: xscpsgndp 63, 1, 1 1925; PC64LE9-NEXT: fmr 1, 30 1926; PC64LE9-NEXT: mr 4, 30 1927; PC64LE9-NEXT: bl __powidf2 1928; PC64LE9-NEXT: nop 1929; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 1930; PC64LE9-NEXT: xxmrghd 63, 1, 63 1931; PC64LE9-NEXT: fmr 1, 31 1932; PC64LE9-NEXT: mr 4, 30 1933; PC64LE9-NEXT: bl __powidf2 1934; PC64LE9-NEXT: nop 1935; PC64LE9-NEXT: fmr 3, 1 1936; PC64LE9-NEXT: xxswapd 1, 63 1937; PC64LE9-NEXT: xscpsgndp 2, 63, 63 1938; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 1939; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 1940; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1941; PC64LE9-NEXT: ld 30, 48(1) # 8-byte Folded Reload 1942; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 1943; PC64LE9-NEXT: addi 1, 1, 80 1944; PC64LE9-NEXT: ld 0, 16(1) 1945; PC64LE9-NEXT: mtlr 0 1946; PC64LE9-NEXT: blr 1947entry: 1948 %powi = call <3 x double> @llvm.experimental.constrained.powi.v3f64( 1949 <3 x double> %x, 1950 i32 %y, 1951 metadata !"round.dynamic", 1952 metadata !"fpexcept.strict") #1 1953 ret <3 x double> %powi 1954} 1955 1956define <4 x double> @constrained_vector_powi_v4f64(<4 x double> %x, i32 %y) #0 { 1957; PC64LE-LABEL: constrained_vector_powi_v4f64: 1958; PC64LE: # %bb.0: # %entry 1959; PC64LE-NEXT: mflr 0 1960; PC64LE-NEXT: std 0, 16(1) 1961; PC64LE-NEXT: stdu 1, -112(1) 1962; PC64LE-NEXT: li 3, 48 1963; PC64LE-NEXT: std 30, 96(1) # 8-byte Folded Spill 1964; PC64LE-NEXT: clrldi 30, 7, 32 1965; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill 1966; PC64LE-NEXT: li 3, 64 1967; PC64LE-NEXT: mr 4, 30 1968; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 1969; PC64LE-NEXT: vmr 30, 2 1970; PC64LE-NEXT: li 3, 80 1971; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 1972; PC64LE-NEXT: vmr 31, 3 1973; PC64LE-NEXT: xxlor 1, 62, 62 1974; PC64LE-NEXT: bl __powidf2 1975; PC64LE-NEXT: nop 1976; PC64LE-NEXT: xxlor 61, 1, 1 1977; PC64LE-NEXT: xxswapd 1, 62 1978; PC64LE-NEXT: mr 4, 30 1979; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1980; PC64LE-NEXT: bl __powidf2 1981; PC64LE-NEXT: nop 1982; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1983; PC64LE-NEXT: xxmrghd 62, 61, 1 1984; PC64LE-NEXT: mr 4, 30 1985; PC64LE-NEXT: xxlor 1, 63, 63 1986; PC64LE-NEXT: bl __powidf2 1987; PC64LE-NEXT: nop 1988; PC64LE-NEXT: xxlor 61, 1, 1 1989; PC64LE-NEXT: xxswapd 1, 63 1990; PC64LE-NEXT: mr 4, 30 1991; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 1992; PC64LE-NEXT: bl __powidf2 1993; PC64LE-NEXT: nop 1994; PC64LE-NEXT: li 3, 80 1995; PC64LE-NEXT: vmr 2, 30 1996; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 1997; PC64LE-NEXT: xxmrghd 35, 61, 1 1998; PC64LE-NEXT: ld 30, 96(1) # 8-byte Folded Reload 1999; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2000; PC64LE-NEXT: li 3, 64 2001; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 2002; PC64LE-NEXT: li 3, 48 2003; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload 2004; PC64LE-NEXT: addi 1, 1, 112 2005; PC64LE-NEXT: ld 0, 16(1) 2006; PC64LE-NEXT: mtlr 0 2007; PC64LE-NEXT: blr 2008; 2009; PC64LE9-LABEL: constrained_vector_powi_v4f64: 2010; PC64LE9: # %bb.0: # %entry 2011; PC64LE9-NEXT: mflr 0 2012; PC64LE9-NEXT: std 0, 16(1) 2013; PC64LE9-NEXT: stdu 1, -96(1) 2014; PC64LE9-NEXT: std 30, 80(1) # 8-byte Folded Spill 2015; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill 2016; PC64LE9-NEXT: vmr 30, 2 2017; PC64LE9-NEXT: clrldi 30, 7, 32 2018; PC64LE9-NEXT: xscpsgndp 1, 62, 62 2019; PC64LE9-NEXT: mr 4, 30 2020; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill 2021; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill 2022; PC64LE9-NEXT: vmr 31, 3 2023; PC64LE9-NEXT: bl __powidf2 2024; PC64LE9-NEXT: nop 2025; PC64LE9-NEXT: mr 4, 30 2026; PC64LE9-NEXT: xscpsgndp 61, 1, 1 2027; PC64LE9-NEXT: xxswapd 1, 62 2028; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2029; PC64LE9-NEXT: bl __powidf2 2030; PC64LE9-NEXT: nop 2031; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2032; PC64LE9-NEXT: xxmrghd 62, 61, 1 2033; PC64LE9-NEXT: xscpsgndp 1, 63, 63 2034; PC64LE9-NEXT: mr 4, 30 2035; PC64LE9-NEXT: bl __powidf2 2036; PC64LE9-NEXT: nop 2037; PC64LE9-NEXT: mr 4, 30 2038; PC64LE9-NEXT: xscpsgndp 61, 1, 1 2039; PC64LE9-NEXT: xxswapd 1, 63 2040; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2041; PC64LE9-NEXT: bl __powidf2 2042; PC64LE9-NEXT: nop 2043; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2044; PC64LE9-NEXT: xxmrghd 35, 61, 1 2045; PC64LE9-NEXT: vmr 2, 30 2046; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload 2047; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload 2048; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload 2049; PC64LE9-NEXT: ld 30, 80(1) # 8-byte Folded Reload 2050; PC64LE9-NEXT: addi 1, 1, 96 2051; PC64LE9-NEXT: ld 0, 16(1) 2052; PC64LE9-NEXT: mtlr 0 2053; PC64LE9-NEXT: blr 2054entry: 2055 %powi = call <4 x double> @llvm.experimental.constrained.powi.v4f64( 2056 <4 x double> %x, 2057 i32 %y, 2058 metadata !"round.dynamic", 2059 metadata !"fpexcept.strict") #1 2060 ret <4 x double> %powi 2061} 2062 2063define <1 x float> @constrained_vector_sin_v1f32(<1 x float> %x) #0 { 2064; PC64LE-LABEL: constrained_vector_sin_v1f32: 2065; PC64LE: # %bb.0: # %entry 2066; PC64LE-NEXT: mflr 0 2067; PC64LE-NEXT: std 0, 16(1) 2068; PC64LE-NEXT: stdu 1, -32(1) 2069; PC64LE-NEXT: bl sinf 2070; PC64LE-NEXT: nop 2071; PC64LE-NEXT: addi 1, 1, 32 2072; PC64LE-NEXT: ld 0, 16(1) 2073; PC64LE-NEXT: mtlr 0 2074; PC64LE-NEXT: blr 2075; 2076; PC64LE9-LABEL: constrained_vector_sin_v1f32: 2077; PC64LE9: # %bb.0: # %entry 2078; PC64LE9-NEXT: mflr 0 2079; PC64LE9-NEXT: std 0, 16(1) 2080; PC64LE9-NEXT: stdu 1, -32(1) 2081; PC64LE9-NEXT: bl sinf 2082; PC64LE9-NEXT: nop 2083; PC64LE9-NEXT: addi 1, 1, 32 2084; PC64LE9-NEXT: ld 0, 16(1) 2085; PC64LE9-NEXT: mtlr 0 2086; PC64LE9-NEXT: blr 2087entry: 2088 %sin = call <1 x float> @llvm.experimental.constrained.sin.v1f32( 2089 <1 x float> %x, 2090 metadata !"round.dynamic", 2091 metadata !"fpexcept.strict") #1 2092 ret <1 x float> %sin 2093} 2094 2095define <2 x double> @constrained_vector_sin_v2f64(<2 x double> %x) #0 { 2096; PC64LE-LABEL: constrained_vector_sin_v2f64: 2097; PC64LE: # %bb.0: # %entry 2098; PC64LE-NEXT: mflr 0 2099; PC64LE-NEXT: std 0, 16(1) 2100; PC64LE-NEXT: stdu 1, -80(1) 2101; PC64LE-NEXT: li 3, 48 2102; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 2103; PC64LE-NEXT: li 3, 64 2104; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2105; PC64LE-NEXT: vmr 31, 2 2106; PC64LE-NEXT: xxlor 1, 63, 63 2107; PC64LE-NEXT: bl sin 2108; PC64LE-NEXT: nop 2109; PC64LE-NEXT: xxlor 62, 1, 1 2110; PC64LE-NEXT: xxswapd 1, 63 2111; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2112; PC64LE-NEXT: bl sin 2113; PC64LE-NEXT: nop 2114; PC64LE-NEXT: li 3, 64 2115; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2116; PC64LE-NEXT: xxmrghd 34, 62, 1 2117; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2118; PC64LE-NEXT: li 3, 48 2119; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 2120; PC64LE-NEXT: addi 1, 1, 80 2121; PC64LE-NEXT: ld 0, 16(1) 2122; PC64LE-NEXT: mtlr 0 2123; PC64LE-NEXT: blr 2124; 2125; PC64LE9-LABEL: constrained_vector_sin_v2f64: 2126; PC64LE9: # %bb.0: # %entry 2127; PC64LE9-NEXT: mflr 0 2128; PC64LE9-NEXT: std 0, 16(1) 2129; PC64LE9-NEXT: stdu 1, -64(1) 2130; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2131; PC64LE9-NEXT: vmr 31, 2 2132; PC64LE9-NEXT: xscpsgndp 1, 63, 63 2133; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 2134; PC64LE9-NEXT: bl sin 2135; PC64LE9-NEXT: nop 2136; PC64LE9-NEXT: xscpsgndp 62, 1, 1 2137; PC64LE9-NEXT: xxswapd 1, 63 2138; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2139; PC64LE9-NEXT: bl sin 2140; PC64LE9-NEXT: nop 2141; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2142; PC64LE9-NEXT: xxmrghd 34, 62, 1 2143; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2144; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 2145; PC64LE9-NEXT: addi 1, 1, 64 2146; PC64LE9-NEXT: ld 0, 16(1) 2147; PC64LE9-NEXT: mtlr 0 2148; PC64LE9-NEXT: blr 2149entry: 2150 %sin = call <2 x double> @llvm.experimental.constrained.sin.v2f64( 2151 <2 x double> %x, 2152 metadata !"round.dynamic", 2153 metadata !"fpexcept.strict") #1 2154 ret <2 x double> %sin 2155} 2156 2157define <3 x float> @constrained_vector_sin_v3f32(<3 x float> %x) #0 { 2158; PC64LE-LABEL: constrained_vector_sin_v3f32: 2159; PC64LE: # %bb.0: # %entry 2160; PC64LE-NEXT: mflr 0 2161; PC64LE-NEXT: std 0, 16(1) 2162; PC64LE-NEXT: stdu 1, -80(1) 2163; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 2164; PC64LE-NEXT: li 3, 48 2165; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 2166; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 2167; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2168; PC64LE-NEXT: vmr 31, 2 2169; PC64LE-NEXT: xscvspdpn 1, 0 2170; PC64LE-NEXT: bl sinf 2171; PC64LE-NEXT: nop 2172; PC64LE-NEXT: xxswapd 0, 63 2173; PC64LE-NEXT: fmr 31, 1 2174; PC64LE-NEXT: xscvspdpn 1, 0 2175; PC64LE-NEXT: bl sinf 2176; PC64LE-NEXT: nop 2177; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 2178; PC64LE-NEXT: fmr 30, 1 2179; PC64LE-NEXT: xscvspdpn 1, 0 2180; PC64LE-NEXT: bl sinf 2181; PC64LE-NEXT: nop 2182; PC64LE-NEXT: xscvdpspn 0, 30 2183; PC64LE-NEXT: addis 3, 2, .LCPI42_0@toc@ha 2184; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 2185; PC64LE-NEXT: xscvdpspn 1, 1 2186; PC64LE-NEXT: addi 3, 3, .LCPI42_0@toc@l 2187; PC64LE-NEXT: xscvdpspn 34, 31 2188; PC64LE-NEXT: lvx 4, 0, 3 2189; PC64LE-NEXT: li 3, 48 2190; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 2191; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2192; PC64LE-NEXT: xxmrghw 35, 0, 1 2193; PC64LE-NEXT: vperm 2, 2, 3, 4 2194; PC64LE-NEXT: addi 1, 1, 80 2195; PC64LE-NEXT: ld 0, 16(1) 2196; PC64LE-NEXT: mtlr 0 2197; PC64LE-NEXT: blr 2198; 2199; PC64LE9-LABEL: constrained_vector_sin_v3f32: 2200; PC64LE9: # %bb.0: # %entry 2201; PC64LE9-NEXT: mflr 0 2202; PC64LE9-NEXT: std 0, 16(1) 2203; PC64LE9-NEXT: stdu 1, -64(1) 2204; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 2205; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill 2206; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 2207; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 2208; PC64LE9-NEXT: xscvspdpn 1, 0 2209; PC64LE9-NEXT: vmr 31, 2 2210; PC64LE9-NEXT: bl sinf 2211; PC64LE9-NEXT: nop 2212; PC64LE9-NEXT: xxswapd 0, 63 2213; PC64LE9-NEXT: fmr 31, 1 2214; PC64LE9-NEXT: xscvspdpn 1, 0 2215; PC64LE9-NEXT: bl sinf 2216; PC64LE9-NEXT: nop 2217; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 2218; PC64LE9-NEXT: fmr 30, 1 2219; PC64LE9-NEXT: xscvspdpn 1, 0 2220; PC64LE9-NEXT: bl sinf 2221; PC64LE9-NEXT: nop 2222; PC64LE9-NEXT: xscvdpspn 0, 1 2223; PC64LE9-NEXT: xscvdpspn 1, 30 2224; PC64LE9-NEXT: addis 3, 2, .LCPI42_0@toc@ha 2225; PC64LE9-NEXT: xscvdpspn 36, 31 2226; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 2227; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 2228; PC64LE9-NEXT: addi 3, 3, .LCPI42_0@toc@l 2229; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload 2230; PC64LE9-NEXT: lxv 35, 0(3) 2231; PC64LE9-NEXT: xxmrghw 34, 1, 0 2232; PC64LE9-NEXT: vperm 2, 4, 2, 3 2233; PC64LE9-NEXT: addi 1, 1, 64 2234; PC64LE9-NEXT: ld 0, 16(1) 2235; PC64LE9-NEXT: mtlr 0 2236; PC64LE9-NEXT: blr 2237entry: 2238 %sin = call <3 x float> @llvm.experimental.constrained.sin.v3f32( 2239 <3 x float> %x, 2240 metadata !"round.dynamic", 2241 metadata !"fpexcept.strict") #1 2242 ret <3 x float> %sin 2243} 2244 2245define <3 x double> @constrained_vector_sin_v3f64(<3 x double> %x) #0 { 2246; PC64LE-LABEL: constrained_vector_sin_v3f64: 2247; PC64LE: # %bb.0: # %entry 2248; PC64LE-NEXT: mflr 0 2249; PC64LE-NEXT: std 0, 16(1) 2250; PC64LE-NEXT: stdu 1, -80(1) 2251; PC64LE-NEXT: li 3, 48 2252; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 2253; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 2254; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2255; PC64LE-NEXT: fmr 31, 3 2256; PC64LE-NEXT: fmr 30, 2 2257; PC64LE-NEXT: bl sin 2258; PC64LE-NEXT: nop 2259; PC64LE-NEXT: xxlor 63, 1, 1 2260; PC64LE-NEXT: fmr 1, 30 2261; PC64LE-NEXT: bl sin 2262; PC64LE-NEXT: nop 2263; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2264; PC64LE-NEXT: xxmrghd 63, 1, 63 2265; PC64LE-NEXT: fmr 1, 31 2266; PC64LE-NEXT: bl sin 2267; PC64LE-NEXT: nop 2268; PC64LE-NEXT: xxswapd 0, 63 2269; PC64LE-NEXT: li 3, 48 2270; PC64LE-NEXT: xxlor 2, 63, 63 2271; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 2272; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 2273; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2274; PC64LE-NEXT: fmr 3, 1 2275; PC64LE-NEXT: fmr 1, 0 2276; PC64LE-NEXT: addi 1, 1, 80 2277; PC64LE-NEXT: ld 0, 16(1) 2278; PC64LE-NEXT: mtlr 0 2279; PC64LE-NEXT: blr 2280; 2281; PC64LE9-LABEL: constrained_vector_sin_v3f64: 2282; PC64LE9: # %bb.0: # %entry 2283; PC64LE9-NEXT: mflr 0 2284; PC64LE9-NEXT: std 0, 16(1) 2285; PC64LE9-NEXT: stdu 1, -64(1) 2286; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill 2287; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 2288; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 2289; PC64LE9-NEXT: fmr 31, 3 2290; PC64LE9-NEXT: fmr 30, 2 2291; PC64LE9-NEXT: bl sin 2292; PC64LE9-NEXT: nop 2293; PC64LE9-NEXT: xscpsgndp 63, 1, 1 2294; PC64LE9-NEXT: fmr 1, 30 2295; PC64LE9-NEXT: bl sin 2296; PC64LE9-NEXT: nop 2297; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2298; PC64LE9-NEXT: xxmrghd 63, 1, 63 2299; PC64LE9-NEXT: fmr 1, 31 2300; PC64LE9-NEXT: bl sin 2301; PC64LE9-NEXT: nop 2302; PC64LE9-NEXT: fmr 3, 1 2303; PC64LE9-NEXT: xxswapd 1, 63 2304; PC64LE9-NEXT: xscpsgndp 2, 63, 63 2305; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 2306; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 2307; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2308; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload 2309; PC64LE9-NEXT: addi 1, 1, 64 2310; PC64LE9-NEXT: ld 0, 16(1) 2311; PC64LE9-NEXT: mtlr 0 2312; PC64LE9-NEXT: blr 2313entry: 2314 %sin = call <3 x double> @llvm.experimental.constrained.sin.v3f64( 2315 <3 x double> %x, 2316 metadata !"round.dynamic", 2317 metadata !"fpexcept.strict") #1 2318 ret <3 x double> %sin 2319} 2320 2321define <4 x double> @constrained_vector_sin_v4f64(<4 x double> %x) #0 { 2322; PC64LE-LABEL: constrained_vector_sin_v4f64: 2323; PC64LE: # %bb.0: # %entry 2324; PC64LE-NEXT: mflr 0 2325; PC64LE-NEXT: std 0, 16(1) 2326; PC64LE-NEXT: stdu 1, -96(1) 2327; PC64LE-NEXT: li 3, 48 2328; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill 2329; PC64LE-NEXT: li 3, 64 2330; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 2331; PC64LE-NEXT: vmr 30, 2 2332; PC64LE-NEXT: li 3, 80 2333; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2334; PC64LE-NEXT: vmr 31, 3 2335; PC64LE-NEXT: xxlor 1, 62, 62 2336; PC64LE-NEXT: bl sin 2337; PC64LE-NEXT: nop 2338; PC64LE-NEXT: xxlor 61, 1, 1 2339; PC64LE-NEXT: xxswapd 1, 62 2340; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2341; PC64LE-NEXT: bl sin 2342; PC64LE-NEXT: nop 2343; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2344; PC64LE-NEXT: xxmrghd 62, 61, 1 2345; PC64LE-NEXT: xxlor 1, 63, 63 2346; PC64LE-NEXT: bl sin 2347; PC64LE-NEXT: nop 2348; PC64LE-NEXT: xxlor 61, 1, 1 2349; PC64LE-NEXT: xxswapd 1, 63 2350; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2351; PC64LE-NEXT: bl sin 2352; PC64LE-NEXT: nop 2353; PC64LE-NEXT: li 3, 80 2354; PC64LE-NEXT: vmr 2, 30 2355; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2356; PC64LE-NEXT: xxmrghd 35, 61, 1 2357; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2358; PC64LE-NEXT: li 3, 64 2359; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 2360; PC64LE-NEXT: li 3, 48 2361; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload 2362; PC64LE-NEXT: addi 1, 1, 96 2363; PC64LE-NEXT: ld 0, 16(1) 2364; PC64LE-NEXT: mtlr 0 2365; PC64LE-NEXT: blr 2366; 2367; PC64LE9-LABEL: constrained_vector_sin_v4f64: 2368; PC64LE9: # %bb.0: # %entry 2369; PC64LE9-NEXT: mflr 0 2370; PC64LE9-NEXT: std 0, 16(1) 2371; PC64LE9-NEXT: stdu 1, -80(1) 2372; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill 2373; PC64LE9-NEXT: vmr 30, 2 2374; PC64LE9-NEXT: xscpsgndp 1, 62, 62 2375; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill 2376; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill 2377; PC64LE9-NEXT: vmr 31, 3 2378; PC64LE9-NEXT: bl sin 2379; PC64LE9-NEXT: nop 2380; PC64LE9-NEXT: xscpsgndp 61, 1, 1 2381; PC64LE9-NEXT: xxswapd 1, 62 2382; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2383; PC64LE9-NEXT: bl sin 2384; PC64LE9-NEXT: nop 2385; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2386; PC64LE9-NEXT: xxmrghd 62, 61, 1 2387; PC64LE9-NEXT: xscpsgndp 1, 63, 63 2388; PC64LE9-NEXT: bl sin 2389; PC64LE9-NEXT: nop 2390; PC64LE9-NEXT: xscpsgndp 61, 1, 1 2391; PC64LE9-NEXT: xxswapd 1, 63 2392; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2393; PC64LE9-NEXT: bl sin 2394; PC64LE9-NEXT: nop 2395; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2396; PC64LE9-NEXT: xxmrghd 35, 61, 1 2397; PC64LE9-NEXT: vmr 2, 30 2398; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload 2399; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload 2400; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload 2401; PC64LE9-NEXT: addi 1, 1, 80 2402; PC64LE9-NEXT: ld 0, 16(1) 2403; PC64LE9-NEXT: mtlr 0 2404; PC64LE9-NEXT: blr 2405entry: 2406 %sin = call <4 x double> @llvm.experimental.constrained.sin.v4f64( 2407 <4 x double> %x, 2408 metadata !"round.dynamic", 2409 metadata !"fpexcept.strict") #1 2410 ret <4 x double> %sin 2411} 2412 2413define <1 x float> @constrained_vector_cos_v1f32(<1 x float> %x) #0 { 2414; PC64LE-LABEL: constrained_vector_cos_v1f32: 2415; PC64LE: # %bb.0: # %entry 2416; PC64LE-NEXT: mflr 0 2417; PC64LE-NEXT: std 0, 16(1) 2418; PC64LE-NEXT: stdu 1, -32(1) 2419; PC64LE-NEXT: bl cosf 2420; PC64LE-NEXT: nop 2421; PC64LE-NEXT: addi 1, 1, 32 2422; PC64LE-NEXT: ld 0, 16(1) 2423; PC64LE-NEXT: mtlr 0 2424; PC64LE-NEXT: blr 2425; 2426; PC64LE9-LABEL: constrained_vector_cos_v1f32: 2427; PC64LE9: # %bb.0: # %entry 2428; PC64LE9-NEXT: mflr 0 2429; PC64LE9-NEXT: std 0, 16(1) 2430; PC64LE9-NEXT: stdu 1, -32(1) 2431; PC64LE9-NEXT: bl cosf 2432; PC64LE9-NEXT: nop 2433; PC64LE9-NEXT: addi 1, 1, 32 2434; PC64LE9-NEXT: ld 0, 16(1) 2435; PC64LE9-NEXT: mtlr 0 2436; PC64LE9-NEXT: blr 2437entry: 2438 %cos = call <1 x float> @llvm.experimental.constrained.cos.v1f32( 2439 <1 x float> %x, 2440 metadata !"round.dynamic", 2441 metadata !"fpexcept.strict") #1 2442 ret <1 x float> %cos 2443} 2444 2445define <2 x double> @constrained_vector_cos_v2f64(<2 x double> %x) #0 { 2446; PC64LE-LABEL: constrained_vector_cos_v2f64: 2447; PC64LE: # %bb.0: # %entry 2448; PC64LE-NEXT: mflr 0 2449; PC64LE-NEXT: std 0, 16(1) 2450; PC64LE-NEXT: stdu 1, -80(1) 2451; PC64LE-NEXT: li 3, 48 2452; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 2453; PC64LE-NEXT: li 3, 64 2454; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2455; PC64LE-NEXT: vmr 31, 2 2456; PC64LE-NEXT: xxlor 1, 63, 63 2457; PC64LE-NEXT: bl cos 2458; PC64LE-NEXT: nop 2459; PC64LE-NEXT: xxlor 62, 1, 1 2460; PC64LE-NEXT: xxswapd 1, 63 2461; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2462; PC64LE-NEXT: bl cos 2463; PC64LE-NEXT: nop 2464; PC64LE-NEXT: li 3, 64 2465; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2466; PC64LE-NEXT: xxmrghd 34, 62, 1 2467; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2468; PC64LE-NEXT: li 3, 48 2469; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 2470; PC64LE-NEXT: addi 1, 1, 80 2471; PC64LE-NEXT: ld 0, 16(1) 2472; PC64LE-NEXT: mtlr 0 2473; PC64LE-NEXT: blr 2474; 2475; PC64LE9-LABEL: constrained_vector_cos_v2f64: 2476; PC64LE9: # %bb.0: # %entry 2477; PC64LE9-NEXT: mflr 0 2478; PC64LE9-NEXT: std 0, 16(1) 2479; PC64LE9-NEXT: stdu 1, -64(1) 2480; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2481; PC64LE9-NEXT: vmr 31, 2 2482; PC64LE9-NEXT: xscpsgndp 1, 63, 63 2483; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 2484; PC64LE9-NEXT: bl cos 2485; PC64LE9-NEXT: nop 2486; PC64LE9-NEXT: xscpsgndp 62, 1, 1 2487; PC64LE9-NEXT: xxswapd 1, 63 2488; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2489; PC64LE9-NEXT: bl cos 2490; PC64LE9-NEXT: nop 2491; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2492; PC64LE9-NEXT: xxmrghd 34, 62, 1 2493; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2494; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 2495; PC64LE9-NEXT: addi 1, 1, 64 2496; PC64LE9-NEXT: ld 0, 16(1) 2497; PC64LE9-NEXT: mtlr 0 2498; PC64LE9-NEXT: blr 2499entry: 2500 %cos = call <2 x double> @llvm.experimental.constrained.cos.v2f64( 2501 <2 x double> %x, 2502 metadata !"round.dynamic", 2503 metadata !"fpexcept.strict") #1 2504 ret <2 x double> %cos 2505} 2506 2507define <3 x float> @constrained_vector_cos_v3f32(<3 x float> %x) #0 { 2508; PC64LE-LABEL: constrained_vector_cos_v3f32: 2509; PC64LE: # %bb.0: # %entry 2510; PC64LE-NEXT: mflr 0 2511; PC64LE-NEXT: std 0, 16(1) 2512; PC64LE-NEXT: stdu 1, -80(1) 2513; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 2514; PC64LE-NEXT: li 3, 48 2515; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 2516; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 2517; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2518; PC64LE-NEXT: vmr 31, 2 2519; PC64LE-NEXT: xscvspdpn 1, 0 2520; PC64LE-NEXT: bl cosf 2521; PC64LE-NEXT: nop 2522; PC64LE-NEXT: xxswapd 0, 63 2523; PC64LE-NEXT: fmr 31, 1 2524; PC64LE-NEXT: xscvspdpn 1, 0 2525; PC64LE-NEXT: bl cosf 2526; PC64LE-NEXT: nop 2527; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 2528; PC64LE-NEXT: fmr 30, 1 2529; PC64LE-NEXT: xscvspdpn 1, 0 2530; PC64LE-NEXT: bl cosf 2531; PC64LE-NEXT: nop 2532; PC64LE-NEXT: xscvdpspn 0, 30 2533; PC64LE-NEXT: addis 3, 2, .LCPI47_0@toc@ha 2534; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 2535; PC64LE-NEXT: xscvdpspn 1, 1 2536; PC64LE-NEXT: addi 3, 3, .LCPI47_0@toc@l 2537; PC64LE-NEXT: xscvdpspn 34, 31 2538; PC64LE-NEXT: lvx 4, 0, 3 2539; PC64LE-NEXT: li 3, 48 2540; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 2541; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2542; PC64LE-NEXT: xxmrghw 35, 0, 1 2543; PC64LE-NEXT: vperm 2, 2, 3, 4 2544; PC64LE-NEXT: addi 1, 1, 80 2545; PC64LE-NEXT: ld 0, 16(1) 2546; PC64LE-NEXT: mtlr 0 2547; PC64LE-NEXT: blr 2548; 2549; PC64LE9-LABEL: constrained_vector_cos_v3f32: 2550; PC64LE9: # %bb.0: # %entry 2551; PC64LE9-NEXT: mflr 0 2552; PC64LE9-NEXT: std 0, 16(1) 2553; PC64LE9-NEXT: stdu 1, -64(1) 2554; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 2555; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill 2556; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 2557; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 2558; PC64LE9-NEXT: xscvspdpn 1, 0 2559; PC64LE9-NEXT: vmr 31, 2 2560; PC64LE9-NEXT: bl cosf 2561; PC64LE9-NEXT: nop 2562; PC64LE9-NEXT: xxswapd 0, 63 2563; PC64LE9-NEXT: fmr 31, 1 2564; PC64LE9-NEXT: xscvspdpn 1, 0 2565; PC64LE9-NEXT: bl cosf 2566; PC64LE9-NEXT: nop 2567; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 2568; PC64LE9-NEXT: fmr 30, 1 2569; PC64LE9-NEXT: xscvspdpn 1, 0 2570; PC64LE9-NEXT: bl cosf 2571; PC64LE9-NEXT: nop 2572; PC64LE9-NEXT: xscvdpspn 0, 1 2573; PC64LE9-NEXT: xscvdpspn 1, 30 2574; PC64LE9-NEXT: addis 3, 2, .LCPI47_0@toc@ha 2575; PC64LE9-NEXT: xscvdpspn 36, 31 2576; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 2577; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 2578; PC64LE9-NEXT: addi 3, 3, .LCPI47_0@toc@l 2579; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload 2580; PC64LE9-NEXT: lxv 35, 0(3) 2581; PC64LE9-NEXT: xxmrghw 34, 1, 0 2582; PC64LE9-NEXT: vperm 2, 4, 2, 3 2583; PC64LE9-NEXT: addi 1, 1, 64 2584; PC64LE9-NEXT: ld 0, 16(1) 2585; PC64LE9-NEXT: mtlr 0 2586; PC64LE9-NEXT: blr 2587entry: 2588 %cos = call <3 x float> @llvm.experimental.constrained.cos.v3f32( 2589 <3 x float> %x, 2590 metadata !"round.dynamic", 2591 metadata !"fpexcept.strict") #1 2592 ret <3 x float> %cos 2593} 2594 2595define <3 x double> @constrained_vector_cos_v3f64(<3 x double> %x) #0 { 2596; PC64LE-LABEL: constrained_vector_cos_v3f64: 2597; PC64LE: # %bb.0: # %entry 2598; PC64LE-NEXT: mflr 0 2599; PC64LE-NEXT: std 0, 16(1) 2600; PC64LE-NEXT: stdu 1, -80(1) 2601; PC64LE-NEXT: li 3, 48 2602; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 2603; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 2604; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2605; PC64LE-NEXT: fmr 31, 3 2606; PC64LE-NEXT: fmr 30, 2 2607; PC64LE-NEXT: bl cos 2608; PC64LE-NEXT: nop 2609; PC64LE-NEXT: xxlor 63, 1, 1 2610; PC64LE-NEXT: fmr 1, 30 2611; PC64LE-NEXT: bl cos 2612; PC64LE-NEXT: nop 2613; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2614; PC64LE-NEXT: xxmrghd 63, 1, 63 2615; PC64LE-NEXT: fmr 1, 31 2616; PC64LE-NEXT: bl cos 2617; PC64LE-NEXT: nop 2618; PC64LE-NEXT: xxswapd 0, 63 2619; PC64LE-NEXT: li 3, 48 2620; PC64LE-NEXT: xxlor 2, 63, 63 2621; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 2622; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 2623; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2624; PC64LE-NEXT: fmr 3, 1 2625; PC64LE-NEXT: fmr 1, 0 2626; PC64LE-NEXT: addi 1, 1, 80 2627; PC64LE-NEXT: ld 0, 16(1) 2628; PC64LE-NEXT: mtlr 0 2629; PC64LE-NEXT: blr 2630; 2631; PC64LE9-LABEL: constrained_vector_cos_v3f64: 2632; PC64LE9: # %bb.0: # %entry 2633; PC64LE9-NEXT: mflr 0 2634; PC64LE9-NEXT: std 0, 16(1) 2635; PC64LE9-NEXT: stdu 1, -64(1) 2636; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill 2637; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 2638; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 2639; PC64LE9-NEXT: fmr 31, 3 2640; PC64LE9-NEXT: fmr 30, 2 2641; PC64LE9-NEXT: bl cos 2642; PC64LE9-NEXT: nop 2643; PC64LE9-NEXT: xscpsgndp 63, 1, 1 2644; PC64LE9-NEXT: fmr 1, 30 2645; PC64LE9-NEXT: bl cos 2646; PC64LE9-NEXT: nop 2647; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2648; PC64LE9-NEXT: xxmrghd 63, 1, 63 2649; PC64LE9-NEXT: fmr 1, 31 2650; PC64LE9-NEXT: bl cos 2651; PC64LE9-NEXT: nop 2652; PC64LE9-NEXT: fmr 3, 1 2653; PC64LE9-NEXT: xxswapd 1, 63 2654; PC64LE9-NEXT: xscpsgndp 2, 63, 63 2655; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 2656; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 2657; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2658; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload 2659; PC64LE9-NEXT: addi 1, 1, 64 2660; PC64LE9-NEXT: ld 0, 16(1) 2661; PC64LE9-NEXT: mtlr 0 2662; PC64LE9-NEXT: blr 2663entry: 2664 %cos = call <3 x double> @llvm.experimental.constrained.cos.v3f64( 2665 <3 x double> %x, 2666 metadata !"round.dynamic", 2667 metadata !"fpexcept.strict") #1 2668 ret <3 x double> %cos 2669} 2670 2671define <4 x double> @constrained_vector_cos_v4f64(<4 x double> %x) #0 { 2672; PC64LE-LABEL: constrained_vector_cos_v4f64: 2673; PC64LE: # %bb.0: # %entry 2674; PC64LE-NEXT: mflr 0 2675; PC64LE-NEXT: std 0, 16(1) 2676; PC64LE-NEXT: stdu 1, -96(1) 2677; PC64LE-NEXT: li 3, 48 2678; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill 2679; PC64LE-NEXT: li 3, 64 2680; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 2681; PC64LE-NEXT: vmr 30, 2 2682; PC64LE-NEXT: li 3, 80 2683; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2684; PC64LE-NEXT: vmr 31, 3 2685; PC64LE-NEXT: xxlor 1, 62, 62 2686; PC64LE-NEXT: bl cos 2687; PC64LE-NEXT: nop 2688; PC64LE-NEXT: xxlor 61, 1, 1 2689; PC64LE-NEXT: xxswapd 1, 62 2690; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2691; PC64LE-NEXT: bl cos 2692; PC64LE-NEXT: nop 2693; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2694; PC64LE-NEXT: xxmrghd 62, 61, 1 2695; PC64LE-NEXT: xxlor 1, 63, 63 2696; PC64LE-NEXT: bl cos 2697; PC64LE-NEXT: nop 2698; PC64LE-NEXT: xxlor 61, 1, 1 2699; PC64LE-NEXT: xxswapd 1, 63 2700; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2701; PC64LE-NEXT: bl cos 2702; PC64LE-NEXT: nop 2703; PC64LE-NEXT: li 3, 80 2704; PC64LE-NEXT: vmr 2, 30 2705; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2706; PC64LE-NEXT: xxmrghd 35, 61, 1 2707; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2708; PC64LE-NEXT: li 3, 64 2709; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 2710; PC64LE-NEXT: li 3, 48 2711; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload 2712; PC64LE-NEXT: addi 1, 1, 96 2713; PC64LE-NEXT: ld 0, 16(1) 2714; PC64LE-NEXT: mtlr 0 2715; PC64LE-NEXT: blr 2716; 2717; PC64LE9-LABEL: constrained_vector_cos_v4f64: 2718; PC64LE9: # %bb.0: # %entry 2719; PC64LE9-NEXT: mflr 0 2720; PC64LE9-NEXT: std 0, 16(1) 2721; PC64LE9-NEXT: stdu 1, -80(1) 2722; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill 2723; PC64LE9-NEXT: vmr 30, 2 2724; PC64LE9-NEXT: xscpsgndp 1, 62, 62 2725; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill 2726; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill 2727; PC64LE9-NEXT: vmr 31, 3 2728; PC64LE9-NEXT: bl cos 2729; PC64LE9-NEXT: nop 2730; PC64LE9-NEXT: xscpsgndp 61, 1, 1 2731; PC64LE9-NEXT: xxswapd 1, 62 2732; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2733; PC64LE9-NEXT: bl cos 2734; PC64LE9-NEXT: nop 2735; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2736; PC64LE9-NEXT: xxmrghd 62, 61, 1 2737; PC64LE9-NEXT: xscpsgndp 1, 63, 63 2738; PC64LE9-NEXT: bl cos 2739; PC64LE9-NEXT: nop 2740; PC64LE9-NEXT: xscpsgndp 61, 1, 1 2741; PC64LE9-NEXT: xxswapd 1, 63 2742; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2743; PC64LE9-NEXT: bl cos 2744; PC64LE9-NEXT: nop 2745; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2746; PC64LE9-NEXT: xxmrghd 35, 61, 1 2747; PC64LE9-NEXT: vmr 2, 30 2748; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload 2749; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload 2750; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload 2751; PC64LE9-NEXT: addi 1, 1, 80 2752; PC64LE9-NEXT: ld 0, 16(1) 2753; PC64LE9-NEXT: mtlr 0 2754; PC64LE9-NEXT: blr 2755entry: 2756 %cos = call <4 x double> @llvm.experimental.constrained.cos.v4f64( 2757 <4 x double> %x, 2758 metadata !"round.dynamic", 2759 metadata !"fpexcept.strict") #1 2760 ret <4 x double> %cos 2761} 2762 2763define <1 x float> @constrained_vector_exp_v1f32(<1 x float> %x) #0 { 2764; PC64LE-LABEL: constrained_vector_exp_v1f32: 2765; PC64LE: # %bb.0: # %entry 2766; PC64LE-NEXT: mflr 0 2767; PC64LE-NEXT: std 0, 16(1) 2768; PC64LE-NEXT: stdu 1, -32(1) 2769; PC64LE-NEXT: bl expf 2770; PC64LE-NEXT: nop 2771; PC64LE-NEXT: addi 1, 1, 32 2772; PC64LE-NEXT: ld 0, 16(1) 2773; PC64LE-NEXT: mtlr 0 2774; PC64LE-NEXT: blr 2775; 2776; PC64LE9-LABEL: constrained_vector_exp_v1f32: 2777; PC64LE9: # %bb.0: # %entry 2778; PC64LE9-NEXT: mflr 0 2779; PC64LE9-NEXT: std 0, 16(1) 2780; PC64LE9-NEXT: stdu 1, -32(1) 2781; PC64LE9-NEXT: bl expf 2782; PC64LE9-NEXT: nop 2783; PC64LE9-NEXT: addi 1, 1, 32 2784; PC64LE9-NEXT: ld 0, 16(1) 2785; PC64LE9-NEXT: mtlr 0 2786; PC64LE9-NEXT: blr 2787entry: 2788 %exp = call <1 x float> @llvm.experimental.constrained.exp.v1f32( 2789 <1 x float> %x, 2790 metadata !"round.dynamic", 2791 metadata !"fpexcept.strict") #1 2792 ret <1 x float> %exp 2793} 2794 2795define <2 x double> @constrained_vector_exp_v2f64(<2 x double> %x) #0 { 2796; PC64LE-LABEL: constrained_vector_exp_v2f64: 2797; PC64LE: # %bb.0: # %entry 2798; PC64LE-NEXT: mflr 0 2799; PC64LE-NEXT: std 0, 16(1) 2800; PC64LE-NEXT: stdu 1, -80(1) 2801; PC64LE-NEXT: li 3, 48 2802; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 2803; PC64LE-NEXT: li 3, 64 2804; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2805; PC64LE-NEXT: vmr 31, 2 2806; PC64LE-NEXT: xxlor 1, 63, 63 2807; PC64LE-NEXT: bl exp 2808; PC64LE-NEXT: nop 2809; PC64LE-NEXT: xxlor 62, 1, 1 2810; PC64LE-NEXT: xxswapd 1, 63 2811; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2812; PC64LE-NEXT: bl exp 2813; PC64LE-NEXT: nop 2814; PC64LE-NEXT: li 3, 64 2815; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2816; PC64LE-NEXT: xxmrghd 34, 62, 1 2817; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2818; PC64LE-NEXT: li 3, 48 2819; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 2820; PC64LE-NEXT: addi 1, 1, 80 2821; PC64LE-NEXT: ld 0, 16(1) 2822; PC64LE-NEXT: mtlr 0 2823; PC64LE-NEXT: blr 2824; 2825; PC64LE9-LABEL: constrained_vector_exp_v2f64: 2826; PC64LE9: # %bb.0: # %entry 2827; PC64LE9-NEXT: mflr 0 2828; PC64LE9-NEXT: std 0, 16(1) 2829; PC64LE9-NEXT: stdu 1, -64(1) 2830; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 2831; PC64LE9-NEXT: vmr 31, 2 2832; PC64LE9-NEXT: xscpsgndp 1, 63, 63 2833; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 2834; PC64LE9-NEXT: bl exp 2835; PC64LE9-NEXT: nop 2836; PC64LE9-NEXT: xscpsgndp 62, 1, 1 2837; PC64LE9-NEXT: xxswapd 1, 63 2838; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 2839; PC64LE9-NEXT: bl exp 2840; PC64LE9-NEXT: nop 2841; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2842; PC64LE9-NEXT: xxmrghd 34, 62, 1 2843; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 2844; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 2845; PC64LE9-NEXT: addi 1, 1, 64 2846; PC64LE9-NEXT: ld 0, 16(1) 2847; PC64LE9-NEXT: mtlr 0 2848; PC64LE9-NEXT: blr 2849entry: 2850 %exp = call <2 x double> @llvm.experimental.constrained.exp.v2f64( 2851 <2 x double> %x, 2852 metadata !"round.dynamic", 2853 metadata !"fpexcept.strict") #1 2854 ret <2 x double> %exp 2855} 2856 2857define <3 x float> @constrained_vector_exp_v3f32(<3 x float> %x) #0 { 2858; PC64LE-LABEL: constrained_vector_exp_v3f32: 2859; PC64LE: # %bb.0: # %entry 2860; PC64LE-NEXT: mflr 0 2861; PC64LE-NEXT: std 0, 16(1) 2862; PC64LE-NEXT: stdu 1, -80(1) 2863; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 2864; PC64LE-NEXT: li 3, 48 2865; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 2866; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 2867; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2868; PC64LE-NEXT: vmr 31, 2 2869; PC64LE-NEXT: xscvspdpn 1, 0 2870; PC64LE-NEXT: bl expf 2871; PC64LE-NEXT: nop 2872; PC64LE-NEXT: xxswapd 0, 63 2873; PC64LE-NEXT: fmr 31, 1 2874; PC64LE-NEXT: xscvspdpn 1, 0 2875; PC64LE-NEXT: bl expf 2876; PC64LE-NEXT: nop 2877; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 2878; PC64LE-NEXT: fmr 30, 1 2879; PC64LE-NEXT: xscvspdpn 1, 0 2880; PC64LE-NEXT: bl expf 2881; PC64LE-NEXT: nop 2882; PC64LE-NEXT: xscvdpspn 0, 30 2883; PC64LE-NEXT: addis 3, 2, .LCPI52_0@toc@ha 2884; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 2885; PC64LE-NEXT: xscvdpspn 1, 1 2886; PC64LE-NEXT: addi 3, 3, .LCPI52_0@toc@l 2887; PC64LE-NEXT: xscvdpspn 34, 31 2888; PC64LE-NEXT: lvx 4, 0, 3 2889; PC64LE-NEXT: li 3, 48 2890; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 2891; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2892; PC64LE-NEXT: xxmrghw 35, 0, 1 2893; PC64LE-NEXT: vperm 2, 2, 3, 4 2894; PC64LE-NEXT: addi 1, 1, 80 2895; PC64LE-NEXT: ld 0, 16(1) 2896; PC64LE-NEXT: mtlr 0 2897; PC64LE-NEXT: blr 2898; 2899; PC64LE9-LABEL: constrained_vector_exp_v3f32: 2900; PC64LE9: # %bb.0: # %entry 2901; PC64LE9-NEXT: mflr 0 2902; PC64LE9-NEXT: std 0, 16(1) 2903; PC64LE9-NEXT: stdu 1, -64(1) 2904; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 2905; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill 2906; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 2907; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 2908; PC64LE9-NEXT: xscvspdpn 1, 0 2909; PC64LE9-NEXT: vmr 31, 2 2910; PC64LE9-NEXT: bl expf 2911; PC64LE9-NEXT: nop 2912; PC64LE9-NEXT: xxswapd 0, 63 2913; PC64LE9-NEXT: fmr 31, 1 2914; PC64LE9-NEXT: xscvspdpn 1, 0 2915; PC64LE9-NEXT: bl expf 2916; PC64LE9-NEXT: nop 2917; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 2918; PC64LE9-NEXT: fmr 30, 1 2919; PC64LE9-NEXT: xscvspdpn 1, 0 2920; PC64LE9-NEXT: bl expf 2921; PC64LE9-NEXT: nop 2922; PC64LE9-NEXT: xscvdpspn 0, 1 2923; PC64LE9-NEXT: xscvdpspn 1, 30 2924; PC64LE9-NEXT: addis 3, 2, .LCPI52_0@toc@ha 2925; PC64LE9-NEXT: xscvdpspn 36, 31 2926; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 2927; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 2928; PC64LE9-NEXT: addi 3, 3, .LCPI52_0@toc@l 2929; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload 2930; PC64LE9-NEXT: lxv 35, 0(3) 2931; PC64LE9-NEXT: xxmrghw 34, 1, 0 2932; PC64LE9-NEXT: vperm 2, 4, 2, 3 2933; PC64LE9-NEXT: addi 1, 1, 64 2934; PC64LE9-NEXT: ld 0, 16(1) 2935; PC64LE9-NEXT: mtlr 0 2936; PC64LE9-NEXT: blr 2937entry: 2938 %exp = call <3 x float> @llvm.experimental.constrained.exp.v3f32( 2939 <3 x float> %x, 2940 metadata !"round.dynamic", 2941 metadata !"fpexcept.strict") #1 2942 ret <3 x float> %exp 2943} 2944 2945define <3 x double> @constrained_vector_exp_v3f64(<3 x double> %x) #0 { 2946; PC64LE-LABEL: constrained_vector_exp_v3f64: 2947; PC64LE: # %bb.0: # %entry 2948; PC64LE-NEXT: mflr 0 2949; PC64LE-NEXT: std 0, 16(1) 2950; PC64LE-NEXT: stdu 1, -80(1) 2951; PC64LE-NEXT: li 3, 48 2952; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 2953; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 2954; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 2955; PC64LE-NEXT: fmr 31, 3 2956; PC64LE-NEXT: fmr 30, 2 2957; PC64LE-NEXT: bl exp 2958; PC64LE-NEXT: nop 2959; PC64LE-NEXT: xxlor 63, 1, 1 2960; PC64LE-NEXT: fmr 1, 30 2961; PC64LE-NEXT: bl exp 2962; PC64LE-NEXT: nop 2963; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 2964; PC64LE-NEXT: xxmrghd 63, 1, 63 2965; PC64LE-NEXT: fmr 1, 31 2966; PC64LE-NEXT: bl exp 2967; PC64LE-NEXT: nop 2968; PC64LE-NEXT: xxswapd 0, 63 2969; PC64LE-NEXT: li 3, 48 2970; PC64LE-NEXT: xxlor 2, 63, 63 2971; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 2972; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 2973; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 2974; PC64LE-NEXT: fmr 3, 1 2975; PC64LE-NEXT: fmr 1, 0 2976; PC64LE-NEXT: addi 1, 1, 80 2977; PC64LE-NEXT: ld 0, 16(1) 2978; PC64LE-NEXT: mtlr 0 2979; PC64LE-NEXT: blr 2980; 2981; PC64LE9-LABEL: constrained_vector_exp_v3f64: 2982; PC64LE9: # %bb.0: # %entry 2983; PC64LE9-NEXT: mflr 0 2984; PC64LE9-NEXT: std 0, 16(1) 2985; PC64LE9-NEXT: stdu 1, -64(1) 2986; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill 2987; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 2988; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 2989; PC64LE9-NEXT: fmr 31, 3 2990; PC64LE9-NEXT: fmr 30, 2 2991; PC64LE9-NEXT: bl exp 2992; PC64LE9-NEXT: nop 2993; PC64LE9-NEXT: xscpsgndp 63, 1, 1 2994; PC64LE9-NEXT: fmr 1, 30 2995; PC64LE9-NEXT: bl exp 2996; PC64LE9-NEXT: nop 2997; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 2998; PC64LE9-NEXT: xxmrghd 63, 1, 63 2999; PC64LE9-NEXT: fmr 1, 31 3000; PC64LE9-NEXT: bl exp 3001; PC64LE9-NEXT: nop 3002; PC64LE9-NEXT: fmr 3, 1 3003; PC64LE9-NEXT: xxswapd 1, 63 3004; PC64LE9-NEXT: xscpsgndp 2, 63, 63 3005; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 3006; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 3007; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3008; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload 3009; PC64LE9-NEXT: addi 1, 1, 64 3010; PC64LE9-NEXT: ld 0, 16(1) 3011; PC64LE9-NEXT: mtlr 0 3012; PC64LE9-NEXT: blr 3013entry: 3014 %exp = call <3 x double> @llvm.experimental.constrained.exp.v3f64( 3015 <3 x double> %x, 3016 metadata !"round.dynamic", 3017 metadata !"fpexcept.strict") #1 3018 ret <3 x double> %exp 3019} 3020 3021define <4 x double> @constrained_vector_exp_v4f64(<4 x double> %x) #0 { 3022; PC64LE-LABEL: constrained_vector_exp_v4f64: 3023; PC64LE: # %bb.0: # %entry 3024; PC64LE-NEXT: mflr 0 3025; PC64LE-NEXT: std 0, 16(1) 3026; PC64LE-NEXT: stdu 1, -96(1) 3027; PC64LE-NEXT: li 3, 48 3028; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill 3029; PC64LE-NEXT: li 3, 64 3030; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 3031; PC64LE-NEXT: vmr 30, 2 3032; PC64LE-NEXT: li 3, 80 3033; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3034; PC64LE-NEXT: vmr 31, 3 3035; PC64LE-NEXT: xxlor 1, 62, 62 3036; PC64LE-NEXT: bl exp 3037; PC64LE-NEXT: nop 3038; PC64LE-NEXT: xxlor 61, 1, 1 3039; PC64LE-NEXT: xxswapd 1, 62 3040; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3041; PC64LE-NEXT: bl exp 3042; PC64LE-NEXT: nop 3043; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3044; PC64LE-NEXT: xxmrghd 62, 61, 1 3045; PC64LE-NEXT: xxlor 1, 63, 63 3046; PC64LE-NEXT: bl exp 3047; PC64LE-NEXT: nop 3048; PC64LE-NEXT: xxlor 61, 1, 1 3049; PC64LE-NEXT: xxswapd 1, 63 3050; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3051; PC64LE-NEXT: bl exp 3052; PC64LE-NEXT: nop 3053; PC64LE-NEXT: li 3, 80 3054; PC64LE-NEXT: vmr 2, 30 3055; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3056; PC64LE-NEXT: xxmrghd 35, 61, 1 3057; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3058; PC64LE-NEXT: li 3, 64 3059; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 3060; PC64LE-NEXT: li 3, 48 3061; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload 3062; PC64LE-NEXT: addi 1, 1, 96 3063; PC64LE-NEXT: ld 0, 16(1) 3064; PC64LE-NEXT: mtlr 0 3065; PC64LE-NEXT: blr 3066; 3067; PC64LE9-LABEL: constrained_vector_exp_v4f64: 3068; PC64LE9: # %bb.0: # %entry 3069; PC64LE9-NEXT: mflr 0 3070; PC64LE9-NEXT: std 0, 16(1) 3071; PC64LE9-NEXT: stdu 1, -80(1) 3072; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill 3073; PC64LE9-NEXT: vmr 30, 2 3074; PC64LE9-NEXT: xscpsgndp 1, 62, 62 3075; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill 3076; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill 3077; PC64LE9-NEXT: vmr 31, 3 3078; PC64LE9-NEXT: bl exp 3079; PC64LE9-NEXT: nop 3080; PC64LE9-NEXT: xscpsgndp 61, 1, 1 3081; PC64LE9-NEXT: xxswapd 1, 62 3082; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3083; PC64LE9-NEXT: bl exp 3084; PC64LE9-NEXT: nop 3085; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3086; PC64LE9-NEXT: xxmrghd 62, 61, 1 3087; PC64LE9-NEXT: xscpsgndp 1, 63, 63 3088; PC64LE9-NEXT: bl exp 3089; PC64LE9-NEXT: nop 3090; PC64LE9-NEXT: xscpsgndp 61, 1, 1 3091; PC64LE9-NEXT: xxswapd 1, 63 3092; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3093; PC64LE9-NEXT: bl exp 3094; PC64LE9-NEXT: nop 3095; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3096; PC64LE9-NEXT: xxmrghd 35, 61, 1 3097; PC64LE9-NEXT: vmr 2, 30 3098; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload 3099; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload 3100; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload 3101; PC64LE9-NEXT: addi 1, 1, 80 3102; PC64LE9-NEXT: ld 0, 16(1) 3103; PC64LE9-NEXT: mtlr 0 3104; PC64LE9-NEXT: blr 3105entry: 3106 %exp = call <4 x double> @llvm.experimental.constrained.exp.v4f64( 3107 <4 x double> %x, 3108 metadata !"round.dynamic", 3109 metadata !"fpexcept.strict") #1 3110 ret <4 x double> %exp 3111} 3112 3113define <1 x float> @constrained_vector_exp2_v1f32(<1 x float> %x) #0 { 3114; PC64LE-LABEL: constrained_vector_exp2_v1f32: 3115; PC64LE: # %bb.0: # %entry 3116; PC64LE-NEXT: mflr 0 3117; PC64LE-NEXT: std 0, 16(1) 3118; PC64LE-NEXT: stdu 1, -32(1) 3119; PC64LE-NEXT: bl exp2f 3120; PC64LE-NEXT: nop 3121; PC64LE-NEXT: addi 1, 1, 32 3122; PC64LE-NEXT: ld 0, 16(1) 3123; PC64LE-NEXT: mtlr 0 3124; PC64LE-NEXT: blr 3125; 3126; PC64LE9-LABEL: constrained_vector_exp2_v1f32: 3127; PC64LE9: # %bb.0: # %entry 3128; PC64LE9-NEXT: mflr 0 3129; PC64LE9-NEXT: std 0, 16(1) 3130; PC64LE9-NEXT: stdu 1, -32(1) 3131; PC64LE9-NEXT: bl exp2f 3132; PC64LE9-NEXT: nop 3133; PC64LE9-NEXT: addi 1, 1, 32 3134; PC64LE9-NEXT: ld 0, 16(1) 3135; PC64LE9-NEXT: mtlr 0 3136; PC64LE9-NEXT: blr 3137entry: 3138 %exp2 = call <1 x float> @llvm.experimental.constrained.exp2.v1f32( 3139 <1 x float> %x, 3140 metadata !"round.dynamic", 3141 metadata !"fpexcept.strict") #1 3142 ret <1 x float> %exp2 3143} 3144 3145define <2 x double> @constrained_vector_exp2_v2f64(<2 x double> %x) #0 { 3146; PC64LE-LABEL: constrained_vector_exp2_v2f64: 3147; PC64LE: # %bb.0: # %entry 3148; PC64LE-NEXT: mflr 0 3149; PC64LE-NEXT: std 0, 16(1) 3150; PC64LE-NEXT: stdu 1, -80(1) 3151; PC64LE-NEXT: li 3, 48 3152; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 3153; PC64LE-NEXT: li 3, 64 3154; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3155; PC64LE-NEXT: vmr 31, 2 3156; PC64LE-NEXT: xxlor 1, 63, 63 3157; PC64LE-NEXT: bl exp2 3158; PC64LE-NEXT: nop 3159; PC64LE-NEXT: xxlor 62, 1, 1 3160; PC64LE-NEXT: xxswapd 1, 63 3161; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3162; PC64LE-NEXT: bl exp2 3163; PC64LE-NEXT: nop 3164; PC64LE-NEXT: li 3, 64 3165; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3166; PC64LE-NEXT: xxmrghd 34, 62, 1 3167; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3168; PC64LE-NEXT: li 3, 48 3169; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 3170; PC64LE-NEXT: addi 1, 1, 80 3171; PC64LE-NEXT: ld 0, 16(1) 3172; PC64LE-NEXT: mtlr 0 3173; PC64LE-NEXT: blr 3174; 3175; PC64LE9-LABEL: constrained_vector_exp2_v2f64: 3176; PC64LE9: # %bb.0: # %entry 3177; PC64LE9-NEXT: mflr 0 3178; PC64LE9-NEXT: std 0, 16(1) 3179; PC64LE9-NEXT: stdu 1, -64(1) 3180; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3181; PC64LE9-NEXT: vmr 31, 2 3182; PC64LE9-NEXT: xscpsgndp 1, 63, 63 3183; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 3184; PC64LE9-NEXT: bl exp2 3185; PC64LE9-NEXT: nop 3186; PC64LE9-NEXT: xscpsgndp 62, 1, 1 3187; PC64LE9-NEXT: xxswapd 1, 63 3188; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3189; PC64LE9-NEXT: bl exp2 3190; PC64LE9-NEXT: nop 3191; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3192; PC64LE9-NEXT: xxmrghd 34, 62, 1 3193; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3194; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 3195; PC64LE9-NEXT: addi 1, 1, 64 3196; PC64LE9-NEXT: ld 0, 16(1) 3197; PC64LE9-NEXT: mtlr 0 3198; PC64LE9-NEXT: blr 3199entry: 3200 %exp2 = call <2 x double> @llvm.experimental.constrained.exp2.v2f64( 3201 <2 x double> %x, 3202 metadata !"round.dynamic", 3203 metadata !"fpexcept.strict") #1 3204 ret <2 x double> %exp2 3205} 3206 3207define <3 x float> @constrained_vector_exp2_v3f32(<3 x float> %x) #0 { 3208; PC64LE-LABEL: constrained_vector_exp2_v3f32: 3209; PC64LE: # %bb.0: # %entry 3210; PC64LE-NEXT: mflr 0 3211; PC64LE-NEXT: std 0, 16(1) 3212; PC64LE-NEXT: stdu 1, -80(1) 3213; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 3214; PC64LE-NEXT: li 3, 48 3215; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 3216; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 3217; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3218; PC64LE-NEXT: vmr 31, 2 3219; PC64LE-NEXT: xscvspdpn 1, 0 3220; PC64LE-NEXT: bl exp2f 3221; PC64LE-NEXT: nop 3222; PC64LE-NEXT: xxswapd 0, 63 3223; PC64LE-NEXT: fmr 31, 1 3224; PC64LE-NEXT: xscvspdpn 1, 0 3225; PC64LE-NEXT: bl exp2f 3226; PC64LE-NEXT: nop 3227; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 3228; PC64LE-NEXT: fmr 30, 1 3229; PC64LE-NEXT: xscvspdpn 1, 0 3230; PC64LE-NEXT: bl exp2f 3231; PC64LE-NEXT: nop 3232; PC64LE-NEXT: xscvdpspn 0, 30 3233; PC64LE-NEXT: addis 3, 2, .LCPI57_0@toc@ha 3234; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 3235; PC64LE-NEXT: xscvdpspn 1, 1 3236; PC64LE-NEXT: addi 3, 3, .LCPI57_0@toc@l 3237; PC64LE-NEXT: xscvdpspn 34, 31 3238; PC64LE-NEXT: lvx 4, 0, 3 3239; PC64LE-NEXT: li 3, 48 3240; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 3241; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3242; PC64LE-NEXT: xxmrghw 35, 0, 1 3243; PC64LE-NEXT: vperm 2, 2, 3, 4 3244; PC64LE-NEXT: addi 1, 1, 80 3245; PC64LE-NEXT: ld 0, 16(1) 3246; PC64LE-NEXT: mtlr 0 3247; PC64LE-NEXT: blr 3248; 3249; PC64LE9-LABEL: constrained_vector_exp2_v3f32: 3250; PC64LE9: # %bb.0: # %entry 3251; PC64LE9-NEXT: mflr 0 3252; PC64LE9-NEXT: std 0, 16(1) 3253; PC64LE9-NEXT: stdu 1, -64(1) 3254; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 3255; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill 3256; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 3257; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 3258; PC64LE9-NEXT: xscvspdpn 1, 0 3259; PC64LE9-NEXT: vmr 31, 2 3260; PC64LE9-NEXT: bl exp2f 3261; PC64LE9-NEXT: nop 3262; PC64LE9-NEXT: xxswapd 0, 63 3263; PC64LE9-NEXT: fmr 31, 1 3264; PC64LE9-NEXT: xscvspdpn 1, 0 3265; PC64LE9-NEXT: bl exp2f 3266; PC64LE9-NEXT: nop 3267; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 3268; PC64LE9-NEXT: fmr 30, 1 3269; PC64LE9-NEXT: xscvspdpn 1, 0 3270; PC64LE9-NEXT: bl exp2f 3271; PC64LE9-NEXT: nop 3272; PC64LE9-NEXT: xscvdpspn 0, 1 3273; PC64LE9-NEXT: xscvdpspn 1, 30 3274; PC64LE9-NEXT: addis 3, 2, .LCPI57_0@toc@ha 3275; PC64LE9-NEXT: xscvdpspn 36, 31 3276; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 3277; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 3278; PC64LE9-NEXT: addi 3, 3, .LCPI57_0@toc@l 3279; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload 3280; PC64LE9-NEXT: lxv 35, 0(3) 3281; PC64LE9-NEXT: xxmrghw 34, 1, 0 3282; PC64LE9-NEXT: vperm 2, 4, 2, 3 3283; PC64LE9-NEXT: addi 1, 1, 64 3284; PC64LE9-NEXT: ld 0, 16(1) 3285; PC64LE9-NEXT: mtlr 0 3286; PC64LE9-NEXT: blr 3287entry: 3288 %exp2 = call <3 x float> @llvm.experimental.constrained.exp2.v3f32( 3289 <3 x float> %x, 3290 metadata !"round.dynamic", 3291 metadata !"fpexcept.strict") #1 3292 ret <3 x float> %exp2 3293} 3294 3295define <3 x double> @constrained_vector_exp2_v3f64(<3 x double> %x) #0 { 3296; PC64LE-LABEL: constrained_vector_exp2_v3f64: 3297; PC64LE: # %bb.0: # %entry 3298; PC64LE-NEXT: mflr 0 3299; PC64LE-NEXT: std 0, 16(1) 3300; PC64LE-NEXT: stdu 1, -80(1) 3301; PC64LE-NEXT: li 3, 48 3302; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 3303; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 3304; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3305; PC64LE-NEXT: fmr 31, 3 3306; PC64LE-NEXT: fmr 30, 2 3307; PC64LE-NEXT: bl exp2 3308; PC64LE-NEXT: nop 3309; PC64LE-NEXT: xxlor 63, 1, 1 3310; PC64LE-NEXT: fmr 1, 30 3311; PC64LE-NEXT: bl exp2 3312; PC64LE-NEXT: nop 3313; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3314; PC64LE-NEXT: xxmrghd 63, 1, 63 3315; PC64LE-NEXT: fmr 1, 31 3316; PC64LE-NEXT: bl exp2 3317; PC64LE-NEXT: nop 3318; PC64LE-NEXT: xxswapd 0, 63 3319; PC64LE-NEXT: li 3, 48 3320; PC64LE-NEXT: xxlor 2, 63, 63 3321; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 3322; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 3323; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3324; PC64LE-NEXT: fmr 3, 1 3325; PC64LE-NEXT: fmr 1, 0 3326; PC64LE-NEXT: addi 1, 1, 80 3327; PC64LE-NEXT: ld 0, 16(1) 3328; PC64LE-NEXT: mtlr 0 3329; PC64LE-NEXT: blr 3330; 3331; PC64LE9-LABEL: constrained_vector_exp2_v3f64: 3332; PC64LE9: # %bb.0: # %entry 3333; PC64LE9-NEXT: mflr 0 3334; PC64LE9-NEXT: std 0, 16(1) 3335; PC64LE9-NEXT: stdu 1, -64(1) 3336; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill 3337; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 3338; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 3339; PC64LE9-NEXT: fmr 31, 3 3340; PC64LE9-NEXT: fmr 30, 2 3341; PC64LE9-NEXT: bl exp2 3342; PC64LE9-NEXT: nop 3343; PC64LE9-NEXT: xscpsgndp 63, 1, 1 3344; PC64LE9-NEXT: fmr 1, 30 3345; PC64LE9-NEXT: bl exp2 3346; PC64LE9-NEXT: nop 3347; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3348; PC64LE9-NEXT: xxmrghd 63, 1, 63 3349; PC64LE9-NEXT: fmr 1, 31 3350; PC64LE9-NEXT: bl exp2 3351; PC64LE9-NEXT: nop 3352; PC64LE9-NEXT: fmr 3, 1 3353; PC64LE9-NEXT: xxswapd 1, 63 3354; PC64LE9-NEXT: xscpsgndp 2, 63, 63 3355; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 3356; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 3357; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3358; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload 3359; PC64LE9-NEXT: addi 1, 1, 64 3360; PC64LE9-NEXT: ld 0, 16(1) 3361; PC64LE9-NEXT: mtlr 0 3362; PC64LE9-NEXT: blr 3363entry: 3364 %exp2 = call <3 x double> @llvm.experimental.constrained.exp2.v3f64( 3365 <3 x double> %x, 3366 metadata !"round.dynamic", 3367 metadata !"fpexcept.strict") #1 3368 ret <3 x double> %exp2 3369} 3370 3371define <4 x double> @constrained_vector_exp2_v4f64(<4 x double> %x) #0 { 3372; PC64LE-LABEL: constrained_vector_exp2_v4f64: 3373; PC64LE: # %bb.0: # %entry 3374; PC64LE-NEXT: mflr 0 3375; PC64LE-NEXT: std 0, 16(1) 3376; PC64LE-NEXT: stdu 1, -96(1) 3377; PC64LE-NEXT: li 3, 48 3378; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill 3379; PC64LE-NEXT: li 3, 64 3380; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 3381; PC64LE-NEXT: vmr 30, 2 3382; PC64LE-NEXT: li 3, 80 3383; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3384; PC64LE-NEXT: vmr 31, 3 3385; PC64LE-NEXT: xxlor 1, 62, 62 3386; PC64LE-NEXT: bl exp2 3387; PC64LE-NEXT: nop 3388; PC64LE-NEXT: xxlor 61, 1, 1 3389; PC64LE-NEXT: xxswapd 1, 62 3390; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3391; PC64LE-NEXT: bl exp2 3392; PC64LE-NEXT: nop 3393; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3394; PC64LE-NEXT: xxmrghd 62, 61, 1 3395; PC64LE-NEXT: xxlor 1, 63, 63 3396; PC64LE-NEXT: bl exp2 3397; PC64LE-NEXT: nop 3398; PC64LE-NEXT: xxlor 61, 1, 1 3399; PC64LE-NEXT: xxswapd 1, 63 3400; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3401; PC64LE-NEXT: bl exp2 3402; PC64LE-NEXT: nop 3403; PC64LE-NEXT: li 3, 80 3404; PC64LE-NEXT: vmr 2, 30 3405; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3406; PC64LE-NEXT: xxmrghd 35, 61, 1 3407; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3408; PC64LE-NEXT: li 3, 64 3409; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 3410; PC64LE-NEXT: li 3, 48 3411; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload 3412; PC64LE-NEXT: addi 1, 1, 96 3413; PC64LE-NEXT: ld 0, 16(1) 3414; PC64LE-NEXT: mtlr 0 3415; PC64LE-NEXT: blr 3416; 3417; PC64LE9-LABEL: constrained_vector_exp2_v4f64: 3418; PC64LE9: # %bb.0: # %entry 3419; PC64LE9-NEXT: mflr 0 3420; PC64LE9-NEXT: std 0, 16(1) 3421; PC64LE9-NEXT: stdu 1, -80(1) 3422; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill 3423; PC64LE9-NEXT: vmr 30, 2 3424; PC64LE9-NEXT: xscpsgndp 1, 62, 62 3425; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill 3426; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill 3427; PC64LE9-NEXT: vmr 31, 3 3428; PC64LE9-NEXT: bl exp2 3429; PC64LE9-NEXT: nop 3430; PC64LE9-NEXT: xscpsgndp 61, 1, 1 3431; PC64LE9-NEXT: xxswapd 1, 62 3432; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3433; PC64LE9-NEXT: bl exp2 3434; PC64LE9-NEXT: nop 3435; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3436; PC64LE9-NEXT: xxmrghd 62, 61, 1 3437; PC64LE9-NEXT: xscpsgndp 1, 63, 63 3438; PC64LE9-NEXT: bl exp2 3439; PC64LE9-NEXT: nop 3440; PC64LE9-NEXT: xscpsgndp 61, 1, 1 3441; PC64LE9-NEXT: xxswapd 1, 63 3442; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3443; PC64LE9-NEXT: bl exp2 3444; PC64LE9-NEXT: nop 3445; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3446; PC64LE9-NEXT: xxmrghd 35, 61, 1 3447; PC64LE9-NEXT: vmr 2, 30 3448; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload 3449; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload 3450; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload 3451; PC64LE9-NEXT: addi 1, 1, 80 3452; PC64LE9-NEXT: ld 0, 16(1) 3453; PC64LE9-NEXT: mtlr 0 3454; PC64LE9-NEXT: blr 3455entry: 3456 %exp2 = call <4 x double> @llvm.experimental.constrained.exp2.v4f64( 3457 <4 x double> %x, 3458 metadata !"round.dynamic", 3459 metadata !"fpexcept.strict") #1 3460 ret <4 x double> %exp2 3461} 3462 3463define <1 x float> @constrained_vector_log_v1f32(<1 x float> %x) #0 { 3464; PC64LE-LABEL: constrained_vector_log_v1f32: 3465; PC64LE: # %bb.0: # %entry 3466; PC64LE-NEXT: mflr 0 3467; PC64LE-NEXT: std 0, 16(1) 3468; PC64LE-NEXT: stdu 1, -32(1) 3469; PC64LE-NEXT: bl logf 3470; PC64LE-NEXT: nop 3471; PC64LE-NEXT: addi 1, 1, 32 3472; PC64LE-NEXT: ld 0, 16(1) 3473; PC64LE-NEXT: mtlr 0 3474; PC64LE-NEXT: blr 3475; 3476; PC64LE9-LABEL: constrained_vector_log_v1f32: 3477; PC64LE9: # %bb.0: # %entry 3478; PC64LE9-NEXT: mflr 0 3479; PC64LE9-NEXT: std 0, 16(1) 3480; PC64LE9-NEXT: stdu 1, -32(1) 3481; PC64LE9-NEXT: bl logf 3482; PC64LE9-NEXT: nop 3483; PC64LE9-NEXT: addi 1, 1, 32 3484; PC64LE9-NEXT: ld 0, 16(1) 3485; PC64LE9-NEXT: mtlr 0 3486; PC64LE9-NEXT: blr 3487entry: 3488 %log = call <1 x float> @llvm.experimental.constrained.log.v1f32( 3489 <1 x float> %x, 3490 metadata !"round.dynamic", 3491 metadata !"fpexcept.strict") #1 3492 ret <1 x float> %log 3493} 3494 3495define <2 x double> @constrained_vector_log_v2f64(<2 x double> %x) #0 { 3496; PC64LE-LABEL: constrained_vector_log_v2f64: 3497; PC64LE: # %bb.0: # %entry 3498; PC64LE-NEXT: mflr 0 3499; PC64LE-NEXT: std 0, 16(1) 3500; PC64LE-NEXT: stdu 1, -80(1) 3501; PC64LE-NEXT: li 3, 48 3502; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 3503; PC64LE-NEXT: li 3, 64 3504; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3505; PC64LE-NEXT: vmr 31, 2 3506; PC64LE-NEXT: xxlor 1, 63, 63 3507; PC64LE-NEXT: bl log 3508; PC64LE-NEXT: nop 3509; PC64LE-NEXT: xxlor 62, 1, 1 3510; PC64LE-NEXT: xxswapd 1, 63 3511; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3512; PC64LE-NEXT: bl log 3513; PC64LE-NEXT: nop 3514; PC64LE-NEXT: li 3, 64 3515; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3516; PC64LE-NEXT: xxmrghd 34, 62, 1 3517; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3518; PC64LE-NEXT: li 3, 48 3519; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 3520; PC64LE-NEXT: addi 1, 1, 80 3521; PC64LE-NEXT: ld 0, 16(1) 3522; PC64LE-NEXT: mtlr 0 3523; PC64LE-NEXT: blr 3524; 3525; PC64LE9-LABEL: constrained_vector_log_v2f64: 3526; PC64LE9: # %bb.0: # %entry 3527; PC64LE9-NEXT: mflr 0 3528; PC64LE9-NEXT: std 0, 16(1) 3529; PC64LE9-NEXT: stdu 1, -64(1) 3530; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3531; PC64LE9-NEXT: vmr 31, 2 3532; PC64LE9-NEXT: xscpsgndp 1, 63, 63 3533; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 3534; PC64LE9-NEXT: bl log 3535; PC64LE9-NEXT: nop 3536; PC64LE9-NEXT: xscpsgndp 62, 1, 1 3537; PC64LE9-NEXT: xxswapd 1, 63 3538; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3539; PC64LE9-NEXT: bl log 3540; PC64LE9-NEXT: nop 3541; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3542; PC64LE9-NEXT: xxmrghd 34, 62, 1 3543; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3544; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 3545; PC64LE9-NEXT: addi 1, 1, 64 3546; PC64LE9-NEXT: ld 0, 16(1) 3547; PC64LE9-NEXT: mtlr 0 3548; PC64LE9-NEXT: blr 3549entry: 3550 %log = call <2 x double> @llvm.experimental.constrained.log.v2f64( 3551 <2 x double> %x, 3552 metadata !"round.dynamic", 3553 metadata !"fpexcept.strict") #1 3554 ret <2 x double> %log 3555} 3556 3557define <3 x float> @constrained_vector_log_v3f32(<3 x float> %x) #0 { 3558; PC64LE-LABEL: constrained_vector_log_v3f32: 3559; PC64LE: # %bb.0: # %entry 3560; PC64LE-NEXT: mflr 0 3561; PC64LE-NEXT: std 0, 16(1) 3562; PC64LE-NEXT: stdu 1, -80(1) 3563; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 3564; PC64LE-NEXT: li 3, 48 3565; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 3566; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 3567; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3568; PC64LE-NEXT: vmr 31, 2 3569; PC64LE-NEXT: xscvspdpn 1, 0 3570; PC64LE-NEXT: bl logf 3571; PC64LE-NEXT: nop 3572; PC64LE-NEXT: xxswapd 0, 63 3573; PC64LE-NEXT: fmr 31, 1 3574; PC64LE-NEXT: xscvspdpn 1, 0 3575; PC64LE-NEXT: bl logf 3576; PC64LE-NEXT: nop 3577; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 3578; PC64LE-NEXT: fmr 30, 1 3579; PC64LE-NEXT: xscvspdpn 1, 0 3580; PC64LE-NEXT: bl logf 3581; PC64LE-NEXT: nop 3582; PC64LE-NEXT: xscvdpspn 0, 30 3583; PC64LE-NEXT: addis 3, 2, .LCPI62_0@toc@ha 3584; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 3585; PC64LE-NEXT: xscvdpspn 1, 1 3586; PC64LE-NEXT: addi 3, 3, .LCPI62_0@toc@l 3587; PC64LE-NEXT: xscvdpspn 34, 31 3588; PC64LE-NEXT: lvx 4, 0, 3 3589; PC64LE-NEXT: li 3, 48 3590; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 3591; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3592; PC64LE-NEXT: xxmrghw 35, 0, 1 3593; PC64LE-NEXT: vperm 2, 2, 3, 4 3594; PC64LE-NEXT: addi 1, 1, 80 3595; PC64LE-NEXT: ld 0, 16(1) 3596; PC64LE-NEXT: mtlr 0 3597; PC64LE-NEXT: blr 3598; 3599; PC64LE9-LABEL: constrained_vector_log_v3f32: 3600; PC64LE9: # %bb.0: # %entry 3601; PC64LE9-NEXT: mflr 0 3602; PC64LE9-NEXT: std 0, 16(1) 3603; PC64LE9-NEXT: stdu 1, -64(1) 3604; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 3605; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill 3606; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 3607; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 3608; PC64LE9-NEXT: xscvspdpn 1, 0 3609; PC64LE9-NEXT: vmr 31, 2 3610; PC64LE9-NEXT: bl logf 3611; PC64LE9-NEXT: nop 3612; PC64LE9-NEXT: xxswapd 0, 63 3613; PC64LE9-NEXT: fmr 31, 1 3614; PC64LE9-NEXT: xscvspdpn 1, 0 3615; PC64LE9-NEXT: bl logf 3616; PC64LE9-NEXT: nop 3617; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 3618; PC64LE9-NEXT: fmr 30, 1 3619; PC64LE9-NEXT: xscvspdpn 1, 0 3620; PC64LE9-NEXT: bl logf 3621; PC64LE9-NEXT: nop 3622; PC64LE9-NEXT: xscvdpspn 0, 1 3623; PC64LE9-NEXT: xscvdpspn 1, 30 3624; PC64LE9-NEXT: addis 3, 2, .LCPI62_0@toc@ha 3625; PC64LE9-NEXT: xscvdpspn 36, 31 3626; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 3627; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 3628; PC64LE9-NEXT: addi 3, 3, .LCPI62_0@toc@l 3629; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload 3630; PC64LE9-NEXT: lxv 35, 0(3) 3631; PC64LE9-NEXT: xxmrghw 34, 1, 0 3632; PC64LE9-NEXT: vperm 2, 4, 2, 3 3633; PC64LE9-NEXT: addi 1, 1, 64 3634; PC64LE9-NEXT: ld 0, 16(1) 3635; PC64LE9-NEXT: mtlr 0 3636; PC64LE9-NEXT: blr 3637entry: 3638 %log = call <3 x float> @llvm.experimental.constrained.log.v3f32( 3639 <3 x float> %x, 3640 metadata !"round.dynamic", 3641 metadata !"fpexcept.strict") #1 3642 ret <3 x float> %log 3643} 3644 3645define <3 x double> @constrained_vector_log_v3f64(<3 x double> %x) #0 { 3646; PC64LE-LABEL: constrained_vector_log_v3f64: 3647; PC64LE: # %bb.0: # %entry 3648; PC64LE-NEXT: mflr 0 3649; PC64LE-NEXT: std 0, 16(1) 3650; PC64LE-NEXT: stdu 1, -80(1) 3651; PC64LE-NEXT: li 3, 48 3652; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 3653; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 3654; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3655; PC64LE-NEXT: fmr 31, 3 3656; PC64LE-NEXT: fmr 30, 2 3657; PC64LE-NEXT: bl log 3658; PC64LE-NEXT: nop 3659; PC64LE-NEXT: xxlor 63, 1, 1 3660; PC64LE-NEXT: fmr 1, 30 3661; PC64LE-NEXT: bl log 3662; PC64LE-NEXT: nop 3663; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3664; PC64LE-NEXT: xxmrghd 63, 1, 63 3665; PC64LE-NEXT: fmr 1, 31 3666; PC64LE-NEXT: bl log 3667; PC64LE-NEXT: nop 3668; PC64LE-NEXT: xxswapd 0, 63 3669; PC64LE-NEXT: li 3, 48 3670; PC64LE-NEXT: xxlor 2, 63, 63 3671; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 3672; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 3673; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3674; PC64LE-NEXT: fmr 3, 1 3675; PC64LE-NEXT: fmr 1, 0 3676; PC64LE-NEXT: addi 1, 1, 80 3677; PC64LE-NEXT: ld 0, 16(1) 3678; PC64LE-NEXT: mtlr 0 3679; PC64LE-NEXT: blr 3680; 3681; PC64LE9-LABEL: constrained_vector_log_v3f64: 3682; PC64LE9: # %bb.0: # %entry 3683; PC64LE9-NEXT: mflr 0 3684; PC64LE9-NEXT: std 0, 16(1) 3685; PC64LE9-NEXT: stdu 1, -64(1) 3686; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill 3687; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 3688; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 3689; PC64LE9-NEXT: fmr 31, 3 3690; PC64LE9-NEXT: fmr 30, 2 3691; PC64LE9-NEXT: bl log 3692; PC64LE9-NEXT: nop 3693; PC64LE9-NEXT: xscpsgndp 63, 1, 1 3694; PC64LE9-NEXT: fmr 1, 30 3695; PC64LE9-NEXT: bl log 3696; PC64LE9-NEXT: nop 3697; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3698; PC64LE9-NEXT: xxmrghd 63, 1, 63 3699; PC64LE9-NEXT: fmr 1, 31 3700; PC64LE9-NEXT: bl log 3701; PC64LE9-NEXT: nop 3702; PC64LE9-NEXT: fmr 3, 1 3703; PC64LE9-NEXT: xxswapd 1, 63 3704; PC64LE9-NEXT: xscpsgndp 2, 63, 63 3705; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 3706; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 3707; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3708; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload 3709; PC64LE9-NEXT: addi 1, 1, 64 3710; PC64LE9-NEXT: ld 0, 16(1) 3711; PC64LE9-NEXT: mtlr 0 3712; PC64LE9-NEXT: blr 3713entry: 3714 %log = call <3 x double> @llvm.experimental.constrained.log.v3f64( 3715 <3 x double> %x, 3716 metadata !"round.dynamic", 3717 metadata !"fpexcept.strict") #1 3718 ret <3 x double> %log 3719} 3720 3721define <4 x double> @constrained_vector_log_v4f64(<4 x double> %x) #0 { 3722; PC64LE-LABEL: constrained_vector_log_v4f64: 3723; PC64LE: # %bb.0: # %entry 3724; PC64LE-NEXT: mflr 0 3725; PC64LE-NEXT: std 0, 16(1) 3726; PC64LE-NEXT: stdu 1, -96(1) 3727; PC64LE-NEXT: li 3, 48 3728; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill 3729; PC64LE-NEXT: li 3, 64 3730; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 3731; PC64LE-NEXT: vmr 30, 2 3732; PC64LE-NEXT: li 3, 80 3733; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3734; PC64LE-NEXT: vmr 31, 3 3735; PC64LE-NEXT: xxlor 1, 62, 62 3736; PC64LE-NEXT: bl log 3737; PC64LE-NEXT: nop 3738; PC64LE-NEXT: xxlor 61, 1, 1 3739; PC64LE-NEXT: xxswapd 1, 62 3740; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3741; PC64LE-NEXT: bl log 3742; PC64LE-NEXT: nop 3743; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3744; PC64LE-NEXT: xxmrghd 62, 61, 1 3745; PC64LE-NEXT: xxlor 1, 63, 63 3746; PC64LE-NEXT: bl log 3747; PC64LE-NEXT: nop 3748; PC64LE-NEXT: xxlor 61, 1, 1 3749; PC64LE-NEXT: xxswapd 1, 63 3750; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3751; PC64LE-NEXT: bl log 3752; PC64LE-NEXT: nop 3753; PC64LE-NEXT: li 3, 80 3754; PC64LE-NEXT: vmr 2, 30 3755; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3756; PC64LE-NEXT: xxmrghd 35, 61, 1 3757; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3758; PC64LE-NEXT: li 3, 64 3759; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 3760; PC64LE-NEXT: li 3, 48 3761; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload 3762; PC64LE-NEXT: addi 1, 1, 96 3763; PC64LE-NEXT: ld 0, 16(1) 3764; PC64LE-NEXT: mtlr 0 3765; PC64LE-NEXT: blr 3766; 3767; PC64LE9-LABEL: constrained_vector_log_v4f64: 3768; PC64LE9: # %bb.0: # %entry 3769; PC64LE9-NEXT: mflr 0 3770; PC64LE9-NEXT: std 0, 16(1) 3771; PC64LE9-NEXT: stdu 1, -80(1) 3772; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill 3773; PC64LE9-NEXT: vmr 30, 2 3774; PC64LE9-NEXT: xscpsgndp 1, 62, 62 3775; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill 3776; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill 3777; PC64LE9-NEXT: vmr 31, 3 3778; PC64LE9-NEXT: bl log 3779; PC64LE9-NEXT: nop 3780; PC64LE9-NEXT: xscpsgndp 61, 1, 1 3781; PC64LE9-NEXT: xxswapd 1, 62 3782; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3783; PC64LE9-NEXT: bl log 3784; PC64LE9-NEXT: nop 3785; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3786; PC64LE9-NEXT: xxmrghd 62, 61, 1 3787; PC64LE9-NEXT: xscpsgndp 1, 63, 63 3788; PC64LE9-NEXT: bl log 3789; PC64LE9-NEXT: nop 3790; PC64LE9-NEXT: xscpsgndp 61, 1, 1 3791; PC64LE9-NEXT: xxswapd 1, 63 3792; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3793; PC64LE9-NEXT: bl log 3794; PC64LE9-NEXT: nop 3795; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3796; PC64LE9-NEXT: xxmrghd 35, 61, 1 3797; PC64LE9-NEXT: vmr 2, 30 3798; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload 3799; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload 3800; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload 3801; PC64LE9-NEXT: addi 1, 1, 80 3802; PC64LE9-NEXT: ld 0, 16(1) 3803; PC64LE9-NEXT: mtlr 0 3804; PC64LE9-NEXT: blr 3805entry: 3806 %log = call <4 x double> @llvm.experimental.constrained.log.v4f64( 3807 <4 x double> %x, 3808 metadata !"round.dynamic", 3809 metadata !"fpexcept.strict") #1 3810 ret <4 x double> %log 3811} 3812 3813define <1 x float> @constrained_vector_log10_v1f32(<1 x float> %x) #0 { 3814; PC64LE-LABEL: constrained_vector_log10_v1f32: 3815; PC64LE: # %bb.0: # %entry 3816; PC64LE-NEXT: mflr 0 3817; PC64LE-NEXT: std 0, 16(1) 3818; PC64LE-NEXT: stdu 1, -32(1) 3819; PC64LE-NEXT: bl log10f 3820; PC64LE-NEXT: nop 3821; PC64LE-NEXT: addi 1, 1, 32 3822; PC64LE-NEXT: ld 0, 16(1) 3823; PC64LE-NEXT: mtlr 0 3824; PC64LE-NEXT: blr 3825; 3826; PC64LE9-LABEL: constrained_vector_log10_v1f32: 3827; PC64LE9: # %bb.0: # %entry 3828; PC64LE9-NEXT: mflr 0 3829; PC64LE9-NEXT: std 0, 16(1) 3830; PC64LE9-NEXT: stdu 1, -32(1) 3831; PC64LE9-NEXT: bl log10f 3832; PC64LE9-NEXT: nop 3833; PC64LE9-NEXT: addi 1, 1, 32 3834; PC64LE9-NEXT: ld 0, 16(1) 3835; PC64LE9-NEXT: mtlr 0 3836; PC64LE9-NEXT: blr 3837entry: 3838 %log10 = call <1 x float> @llvm.experimental.constrained.log10.v1f32( 3839 <1 x float> %x, 3840 metadata !"round.dynamic", 3841 metadata !"fpexcept.strict") #1 3842 ret <1 x float> %log10 3843} 3844 3845define <2 x double> @constrained_vector_log10_v2f64(<2 x double> %x) #0 { 3846; PC64LE-LABEL: constrained_vector_log10_v2f64: 3847; PC64LE: # %bb.0: # %entry 3848; PC64LE-NEXT: mflr 0 3849; PC64LE-NEXT: std 0, 16(1) 3850; PC64LE-NEXT: stdu 1, -80(1) 3851; PC64LE-NEXT: li 3, 48 3852; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 3853; PC64LE-NEXT: li 3, 64 3854; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3855; PC64LE-NEXT: vmr 31, 2 3856; PC64LE-NEXT: xxlor 1, 63, 63 3857; PC64LE-NEXT: bl log10 3858; PC64LE-NEXT: nop 3859; PC64LE-NEXT: xxlor 62, 1, 1 3860; PC64LE-NEXT: xxswapd 1, 63 3861; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3862; PC64LE-NEXT: bl log10 3863; PC64LE-NEXT: nop 3864; PC64LE-NEXT: li 3, 64 3865; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 3866; PC64LE-NEXT: xxmrghd 34, 62, 1 3867; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3868; PC64LE-NEXT: li 3, 48 3869; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 3870; PC64LE-NEXT: addi 1, 1, 80 3871; PC64LE-NEXT: ld 0, 16(1) 3872; PC64LE-NEXT: mtlr 0 3873; PC64LE-NEXT: blr 3874; 3875; PC64LE9-LABEL: constrained_vector_log10_v2f64: 3876; PC64LE9: # %bb.0: # %entry 3877; PC64LE9-NEXT: mflr 0 3878; PC64LE9-NEXT: std 0, 16(1) 3879; PC64LE9-NEXT: stdu 1, -64(1) 3880; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 3881; PC64LE9-NEXT: vmr 31, 2 3882; PC64LE9-NEXT: xscpsgndp 1, 63, 63 3883; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 3884; PC64LE9-NEXT: bl log10 3885; PC64LE9-NEXT: nop 3886; PC64LE9-NEXT: xscpsgndp 62, 1, 1 3887; PC64LE9-NEXT: xxswapd 1, 63 3888; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 3889; PC64LE9-NEXT: bl log10 3890; PC64LE9-NEXT: nop 3891; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 3892; PC64LE9-NEXT: xxmrghd 34, 62, 1 3893; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 3894; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 3895; PC64LE9-NEXT: addi 1, 1, 64 3896; PC64LE9-NEXT: ld 0, 16(1) 3897; PC64LE9-NEXT: mtlr 0 3898; PC64LE9-NEXT: blr 3899entry: 3900 %log10 = call <2 x double> @llvm.experimental.constrained.log10.v2f64( 3901 <2 x double> %x, 3902 metadata !"round.dynamic", 3903 metadata !"fpexcept.strict") #1 3904 ret <2 x double> %log10 3905} 3906 3907define <3 x float> @constrained_vector_log10_v3f32(<3 x float> %x) #0 { 3908; PC64LE-LABEL: constrained_vector_log10_v3f32: 3909; PC64LE: # %bb.0: # %entry 3910; PC64LE-NEXT: mflr 0 3911; PC64LE-NEXT: std 0, 16(1) 3912; PC64LE-NEXT: stdu 1, -80(1) 3913; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 3914; PC64LE-NEXT: li 3, 48 3915; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 3916; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 3917; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 3918; PC64LE-NEXT: vmr 31, 2 3919; PC64LE-NEXT: xscvspdpn 1, 0 3920; PC64LE-NEXT: bl log10f 3921; PC64LE-NEXT: nop 3922; PC64LE-NEXT: xxswapd 0, 63 3923; PC64LE-NEXT: fmr 31, 1 3924; PC64LE-NEXT: xscvspdpn 1, 0 3925; PC64LE-NEXT: bl log10f 3926; PC64LE-NEXT: nop 3927; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 3928; PC64LE-NEXT: fmr 30, 1 3929; PC64LE-NEXT: xscvspdpn 1, 0 3930; PC64LE-NEXT: bl log10f 3931; PC64LE-NEXT: nop 3932; PC64LE-NEXT: xscvdpspn 0, 30 3933; PC64LE-NEXT: addis 3, 2, .LCPI67_0@toc@ha 3934; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 3935; PC64LE-NEXT: xscvdpspn 1, 1 3936; PC64LE-NEXT: addi 3, 3, .LCPI67_0@toc@l 3937; PC64LE-NEXT: xscvdpspn 34, 31 3938; PC64LE-NEXT: lvx 4, 0, 3 3939; PC64LE-NEXT: li 3, 48 3940; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 3941; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 3942; PC64LE-NEXT: xxmrghw 35, 0, 1 3943; PC64LE-NEXT: vperm 2, 2, 3, 4 3944; PC64LE-NEXT: addi 1, 1, 80 3945; PC64LE-NEXT: ld 0, 16(1) 3946; PC64LE-NEXT: mtlr 0 3947; PC64LE-NEXT: blr 3948; 3949; PC64LE9-LABEL: constrained_vector_log10_v3f32: 3950; PC64LE9: # %bb.0: # %entry 3951; PC64LE9-NEXT: mflr 0 3952; PC64LE9-NEXT: std 0, 16(1) 3953; PC64LE9-NEXT: stdu 1, -64(1) 3954; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 3955; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill 3956; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 3957; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 3958; PC64LE9-NEXT: xscvspdpn 1, 0 3959; PC64LE9-NEXT: vmr 31, 2 3960; PC64LE9-NEXT: bl log10f 3961; PC64LE9-NEXT: nop 3962; PC64LE9-NEXT: xxswapd 0, 63 3963; PC64LE9-NEXT: fmr 31, 1 3964; PC64LE9-NEXT: xscvspdpn 1, 0 3965; PC64LE9-NEXT: bl log10f 3966; PC64LE9-NEXT: nop 3967; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 3968; PC64LE9-NEXT: fmr 30, 1 3969; PC64LE9-NEXT: xscvspdpn 1, 0 3970; PC64LE9-NEXT: bl log10f 3971; PC64LE9-NEXT: nop 3972; PC64LE9-NEXT: xscvdpspn 0, 1 3973; PC64LE9-NEXT: xscvdpspn 1, 30 3974; PC64LE9-NEXT: addis 3, 2, .LCPI67_0@toc@ha 3975; PC64LE9-NEXT: xscvdpspn 36, 31 3976; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 3977; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 3978; PC64LE9-NEXT: addi 3, 3, .LCPI67_0@toc@l 3979; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload 3980; PC64LE9-NEXT: lxv 35, 0(3) 3981; PC64LE9-NEXT: xxmrghw 34, 1, 0 3982; PC64LE9-NEXT: vperm 2, 4, 2, 3 3983; PC64LE9-NEXT: addi 1, 1, 64 3984; PC64LE9-NEXT: ld 0, 16(1) 3985; PC64LE9-NEXT: mtlr 0 3986; PC64LE9-NEXT: blr 3987entry: 3988 %log10 = call <3 x float> @llvm.experimental.constrained.log10.v3f32( 3989 <3 x float> %x, 3990 metadata !"round.dynamic", 3991 metadata !"fpexcept.strict") #1 3992 ret <3 x float> %log10 3993} 3994 3995define <3 x double> @constrained_vector_log10_v3f64(<3 x double> %x) #0 { 3996; PC64LE-LABEL: constrained_vector_log10_v3f64: 3997; PC64LE: # %bb.0: # %entry 3998; PC64LE-NEXT: mflr 0 3999; PC64LE-NEXT: std 0, 16(1) 4000; PC64LE-NEXT: stdu 1, -80(1) 4001; PC64LE-NEXT: li 3, 48 4002; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 4003; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 4004; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4005; PC64LE-NEXT: fmr 31, 3 4006; PC64LE-NEXT: fmr 30, 2 4007; PC64LE-NEXT: bl log10 4008; PC64LE-NEXT: nop 4009; PC64LE-NEXT: xxlor 63, 1, 1 4010; PC64LE-NEXT: fmr 1, 30 4011; PC64LE-NEXT: bl log10 4012; PC64LE-NEXT: nop 4013; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4014; PC64LE-NEXT: xxmrghd 63, 1, 63 4015; PC64LE-NEXT: fmr 1, 31 4016; PC64LE-NEXT: bl log10 4017; PC64LE-NEXT: nop 4018; PC64LE-NEXT: xxswapd 0, 63 4019; PC64LE-NEXT: li 3, 48 4020; PC64LE-NEXT: xxlor 2, 63, 63 4021; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 4022; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 4023; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4024; PC64LE-NEXT: fmr 3, 1 4025; PC64LE-NEXT: fmr 1, 0 4026; PC64LE-NEXT: addi 1, 1, 80 4027; PC64LE-NEXT: ld 0, 16(1) 4028; PC64LE-NEXT: mtlr 0 4029; PC64LE-NEXT: blr 4030; 4031; PC64LE9-LABEL: constrained_vector_log10_v3f64: 4032; PC64LE9: # %bb.0: # %entry 4033; PC64LE9-NEXT: mflr 0 4034; PC64LE9-NEXT: std 0, 16(1) 4035; PC64LE9-NEXT: stdu 1, -64(1) 4036; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill 4037; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 4038; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 4039; PC64LE9-NEXT: fmr 31, 3 4040; PC64LE9-NEXT: fmr 30, 2 4041; PC64LE9-NEXT: bl log10 4042; PC64LE9-NEXT: nop 4043; PC64LE9-NEXT: xscpsgndp 63, 1, 1 4044; PC64LE9-NEXT: fmr 1, 30 4045; PC64LE9-NEXT: bl log10 4046; PC64LE9-NEXT: nop 4047; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4048; PC64LE9-NEXT: xxmrghd 63, 1, 63 4049; PC64LE9-NEXT: fmr 1, 31 4050; PC64LE9-NEXT: bl log10 4051; PC64LE9-NEXT: nop 4052; PC64LE9-NEXT: fmr 3, 1 4053; PC64LE9-NEXT: xxswapd 1, 63 4054; PC64LE9-NEXT: xscpsgndp 2, 63, 63 4055; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 4056; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 4057; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4058; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload 4059; PC64LE9-NEXT: addi 1, 1, 64 4060; PC64LE9-NEXT: ld 0, 16(1) 4061; PC64LE9-NEXT: mtlr 0 4062; PC64LE9-NEXT: blr 4063entry: 4064 %log10 = call <3 x double> @llvm.experimental.constrained.log10.v3f64( 4065 <3 x double> %x, 4066 metadata !"round.dynamic", 4067 metadata !"fpexcept.strict") #1 4068 ret <3 x double> %log10 4069} 4070 4071define <4 x double> @constrained_vector_log10_v4f64(<4 x double> %x) #0 { 4072; PC64LE-LABEL: constrained_vector_log10_v4f64: 4073; PC64LE: # %bb.0: # %entry 4074; PC64LE-NEXT: mflr 0 4075; PC64LE-NEXT: std 0, 16(1) 4076; PC64LE-NEXT: stdu 1, -96(1) 4077; PC64LE-NEXT: li 3, 48 4078; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill 4079; PC64LE-NEXT: li 3, 64 4080; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 4081; PC64LE-NEXT: vmr 30, 2 4082; PC64LE-NEXT: li 3, 80 4083; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4084; PC64LE-NEXT: vmr 31, 3 4085; PC64LE-NEXT: xxlor 1, 62, 62 4086; PC64LE-NEXT: bl log10 4087; PC64LE-NEXT: nop 4088; PC64LE-NEXT: xxlor 61, 1, 1 4089; PC64LE-NEXT: xxswapd 1, 62 4090; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4091; PC64LE-NEXT: bl log10 4092; PC64LE-NEXT: nop 4093; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4094; PC64LE-NEXT: xxmrghd 62, 61, 1 4095; PC64LE-NEXT: xxlor 1, 63, 63 4096; PC64LE-NEXT: bl log10 4097; PC64LE-NEXT: nop 4098; PC64LE-NEXT: xxlor 61, 1, 1 4099; PC64LE-NEXT: xxswapd 1, 63 4100; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4101; PC64LE-NEXT: bl log10 4102; PC64LE-NEXT: nop 4103; PC64LE-NEXT: li 3, 80 4104; PC64LE-NEXT: vmr 2, 30 4105; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4106; PC64LE-NEXT: xxmrghd 35, 61, 1 4107; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4108; PC64LE-NEXT: li 3, 64 4109; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 4110; PC64LE-NEXT: li 3, 48 4111; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload 4112; PC64LE-NEXT: addi 1, 1, 96 4113; PC64LE-NEXT: ld 0, 16(1) 4114; PC64LE-NEXT: mtlr 0 4115; PC64LE-NEXT: blr 4116; 4117; PC64LE9-LABEL: constrained_vector_log10_v4f64: 4118; PC64LE9: # %bb.0: # %entry 4119; PC64LE9-NEXT: mflr 0 4120; PC64LE9-NEXT: std 0, 16(1) 4121; PC64LE9-NEXT: stdu 1, -80(1) 4122; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill 4123; PC64LE9-NEXT: vmr 30, 2 4124; PC64LE9-NEXT: xscpsgndp 1, 62, 62 4125; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill 4126; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill 4127; PC64LE9-NEXT: vmr 31, 3 4128; PC64LE9-NEXT: bl log10 4129; PC64LE9-NEXT: nop 4130; PC64LE9-NEXT: xscpsgndp 61, 1, 1 4131; PC64LE9-NEXT: xxswapd 1, 62 4132; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4133; PC64LE9-NEXT: bl log10 4134; PC64LE9-NEXT: nop 4135; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4136; PC64LE9-NEXT: xxmrghd 62, 61, 1 4137; PC64LE9-NEXT: xscpsgndp 1, 63, 63 4138; PC64LE9-NEXT: bl log10 4139; PC64LE9-NEXT: nop 4140; PC64LE9-NEXT: xscpsgndp 61, 1, 1 4141; PC64LE9-NEXT: xxswapd 1, 63 4142; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4143; PC64LE9-NEXT: bl log10 4144; PC64LE9-NEXT: nop 4145; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4146; PC64LE9-NEXT: xxmrghd 35, 61, 1 4147; PC64LE9-NEXT: vmr 2, 30 4148; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload 4149; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload 4150; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload 4151; PC64LE9-NEXT: addi 1, 1, 80 4152; PC64LE9-NEXT: ld 0, 16(1) 4153; PC64LE9-NEXT: mtlr 0 4154; PC64LE9-NEXT: blr 4155entry: 4156 %log10 = call <4 x double> @llvm.experimental.constrained.log10.v4f64( 4157 <4 x double> %x, 4158 metadata !"round.dynamic", 4159 metadata !"fpexcept.strict") #1 4160 ret <4 x double> %log10 4161} 4162 4163define <1 x float> @constrained_vector_log2_v1f32(<1 x float> %x) #0 { 4164; PC64LE-LABEL: constrained_vector_log2_v1f32: 4165; PC64LE: # %bb.0: # %entry 4166; PC64LE-NEXT: mflr 0 4167; PC64LE-NEXT: std 0, 16(1) 4168; PC64LE-NEXT: stdu 1, -32(1) 4169; PC64LE-NEXT: bl log2f 4170; PC64LE-NEXT: nop 4171; PC64LE-NEXT: addi 1, 1, 32 4172; PC64LE-NEXT: ld 0, 16(1) 4173; PC64LE-NEXT: mtlr 0 4174; PC64LE-NEXT: blr 4175; 4176; PC64LE9-LABEL: constrained_vector_log2_v1f32: 4177; PC64LE9: # %bb.0: # %entry 4178; PC64LE9-NEXT: mflr 0 4179; PC64LE9-NEXT: std 0, 16(1) 4180; PC64LE9-NEXT: stdu 1, -32(1) 4181; PC64LE9-NEXT: bl log2f 4182; PC64LE9-NEXT: nop 4183; PC64LE9-NEXT: addi 1, 1, 32 4184; PC64LE9-NEXT: ld 0, 16(1) 4185; PC64LE9-NEXT: mtlr 0 4186; PC64LE9-NEXT: blr 4187entry: 4188 %log2 = call <1 x float> @llvm.experimental.constrained.log2.v1f32( 4189 <1 x float> %x, 4190 metadata !"round.dynamic", 4191 metadata !"fpexcept.strict") #1 4192 ret <1 x float> %log2 4193} 4194 4195define <2 x double> @constrained_vector_log2_v2f64(<2 x double> %x) #0 { 4196; PC64LE-LABEL: constrained_vector_log2_v2f64: 4197; PC64LE: # %bb.0: # %entry 4198; PC64LE-NEXT: mflr 0 4199; PC64LE-NEXT: std 0, 16(1) 4200; PC64LE-NEXT: stdu 1, -80(1) 4201; PC64LE-NEXT: li 3, 48 4202; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 4203; PC64LE-NEXT: li 3, 64 4204; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4205; PC64LE-NEXT: vmr 31, 2 4206; PC64LE-NEXT: xxlor 1, 63, 63 4207; PC64LE-NEXT: bl log2 4208; PC64LE-NEXT: nop 4209; PC64LE-NEXT: xxlor 62, 1, 1 4210; PC64LE-NEXT: xxswapd 1, 63 4211; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4212; PC64LE-NEXT: bl log2 4213; PC64LE-NEXT: nop 4214; PC64LE-NEXT: li 3, 64 4215; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4216; PC64LE-NEXT: xxmrghd 34, 62, 1 4217; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4218; PC64LE-NEXT: li 3, 48 4219; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 4220; PC64LE-NEXT: addi 1, 1, 80 4221; PC64LE-NEXT: ld 0, 16(1) 4222; PC64LE-NEXT: mtlr 0 4223; PC64LE-NEXT: blr 4224; 4225; PC64LE9-LABEL: constrained_vector_log2_v2f64: 4226; PC64LE9: # %bb.0: # %entry 4227; PC64LE9-NEXT: mflr 0 4228; PC64LE9-NEXT: std 0, 16(1) 4229; PC64LE9-NEXT: stdu 1, -64(1) 4230; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 4231; PC64LE9-NEXT: vmr 31, 2 4232; PC64LE9-NEXT: xscpsgndp 1, 63, 63 4233; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 4234; PC64LE9-NEXT: bl log2 4235; PC64LE9-NEXT: nop 4236; PC64LE9-NEXT: xscpsgndp 62, 1, 1 4237; PC64LE9-NEXT: xxswapd 1, 63 4238; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4239; PC64LE9-NEXT: bl log2 4240; PC64LE9-NEXT: nop 4241; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4242; PC64LE9-NEXT: xxmrghd 34, 62, 1 4243; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 4244; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 4245; PC64LE9-NEXT: addi 1, 1, 64 4246; PC64LE9-NEXT: ld 0, 16(1) 4247; PC64LE9-NEXT: mtlr 0 4248; PC64LE9-NEXT: blr 4249entry: 4250 %log2 = call <2 x double> @llvm.experimental.constrained.log2.v2f64( 4251 <2 x double> %x, 4252 metadata !"round.dynamic", 4253 metadata !"fpexcept.strict") #1 4254 ret <2 x double> %log2 4255} 4256 4257define <3 x float> @constrained_vector_log2_v3f32(<3 x float> %x) #0 { 4258; PC64LE-LABEL: constrained_vector_log2_v3f32: 4259; PC64LE: # %bb.0: # %entry 4260; PC64LE-NEXT: mflr 0 4261; PC64LE-NEXT: std 0, 16(1) 4262; PC64LE-NEXT: stdu 1, -80(1) 4263; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 4264; PC64LE-NEXT: li 3, 48 4265; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 4266; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 4267; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4268; PC64LE-NEXT: vmr 31, 2 4269; PC64LE-NEXT: xscvspdpn 1, 0 4270; PC64LE-NEXT: bl log2f 4271; PC64LE-NEXT: nop 4272; PC64LE-NEXT: xxswapd 0, 63 4273; PC64LE-NEXT: fmr 31, 1 4274; PC64LE-NEXT: xscvspdpn 1, 0 4275; PC64LE-NEXT: bl log2f 4276; PC64LE-NEXT: nop 4277; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 4278; PC64LE-NEXT: fmr 30, 1 4279; PC64LE-NEXT: xscvspdpn 1, 0 4280; PC64LE-NEXT: bl log2f 4281; PC64LE-NEXT: nop 4282; PC64LE-NEXT: xscvdpspn 0, 30 4283; PC64LE-NEXT: addis 3, 2, .LCPI72_0@toc@ha 4284; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 4285; PC64LE-NEXT: xscvdpspn 1, 1 4286; PC64LE-NEXT: addi 3, 3, .LCPI72_0@toc@l 4287; PC64LE-NEXT: xscvdpspn 34, 31 4288; PC64LE-NEXT: lvx 4, 0, 3 4289; PC64LE-NEXT: li 3, 48 4290; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 4291; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4292; PC64LE-NEXT: xxmrghw 35, 0, 1 4293; PC64LE-NEXT: vperm 2, 2, 3, 4 4294; PC64LE-NEXT: addi 1, 1, 80 4295; PC64LE-NEXT: ld 0, 16(1) 4296; PC64LE-NEXT: mtlr 0 4297; PC64LE-NEXT: blr 4298; 4299; PC64LE9-LABEL: constrained_vector_log2_v3f32: 4300; PC64LE9: # %bb.0: # %entry 4301; PC64LE9-NEXT: mflr 0 4302; PC64LE9-NEXT: std 0, 16(1) 4303; PC64LE9-NEXT: stdu 1, -64(1) 4304; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 4305; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill 4306; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 4307; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 4308; PC64LE9-NEXT: xscvspdpn 1, 0 4309; PC64LE9-NEXT: vmr 31, 2 4310; PC64LE9-NEXT: bl log2f 4311; PC64LE9-NEXT: nop 4312; PC64LE9-NEXT: xxswapd 0, 63 4313; PC64LE9-NEXT: fmr 31, 1 4314; PC64LE9-NEXT: xscvspdpn 1, 0 4315; PC64LE9-NEXT: bl log2f 4316; PC64LE9-NEXT: nop 4317; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 4318; PC64LE9-NEXT: fmr 30, 1 4319; PC64LE9-NEXT: xscvspdpn 1, 0 4320; PC64LE9-NEXT: bl log2f 4321; PC64LE9-NEXT: nop 4322; PC64LE9-NEXT: xscvdpspn 0, 1 4323; PC64LE9-NEXT: xscvdpspn 1, 30 4324; PC64LE9-NEXT: addis 3, 2, .LCPI72_0@toc@ha 4325; PC64LE9-NEXT: xscvdpspn 36, 31 4326; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 4327; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 4328; PC64LE9-NEXT: addi 3, 3, .LCPI72_0@toc@l 4329; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload 4330; PC64LE9-NEXT: lxv 35, 0(3) 4331; PC64LE9-NEXT: xxmrghw 34, 1, 0 4332; PC64LE9-NEXT: vperm 2, 4, 2, 3 4333; PC64LE9-NEXT: addi 1, 1, 64 4334; PC64LE9-NEXT: ld 0, 16(1) 4335; PC64LE9-NEXT: mtlr 0 4336; PC64LE9-NEXT: blr 4337entry: 4338 %log2 = call <3 x float> @llvm.experimental.constrained.log2.v3f32( 4339 <3 x float> %x, 4340 metadata !"round.dynamic", 4341 metadata !"fpexcept.strict") #1 4342 ret <3 x float> %log2 4343} 4344 4345define <3 x double> @constrained_vector_log2_v3f64(<3 x double> %x) #0 { 4346; PC64LE-LABEL: constrained_vector_log2_v3f64: 4347; PC64LE: # %bb.0: # %entry 4348; PC64LE-NEXT: mflr 0 4349; PC64LE-NEXT: std 0, 16(1) 4350; PC64LE-NEXT: stdu 1, -80(1) 4351; PC64LE-NEXT: li 3, 48 4352; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 4353; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 4354; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4355; PC64LE-NEXT: fmr 31, 3 4356; PC64LE-NEXT: fmr 30, 2 4357; PC64LE-NEXT: bl log2 4358; PC64LE-NEXT: nop 4359; PC64LE-NEXT: xxlor 63, 1, 1 4360; PC64LE-NEXT: fmr 1, 30 4361; PC64LE-NEXT: bl log2 4362; PC64LE-NEXT: nop 4363; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4364; PC64LE-NEXT: xxmrghd 63, 1, 63 4365; PC64LE-NEXT: fmr 1, 31 4366; PC64LE-NEXT: bl log2 4367; PC64LE-NEXT: nop 4368; PC64LE-NEXT: xxswapd 0, 63 4369; PC64LE-NEXT: li 3, 48 4370; PC64LE-NEXT: xxlor 2, 63, 63 4371; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 4372; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 4373; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4374; PC64LE-NEXT: fmr 3, 1 4375; PC64LE-NEXT: fmr 1, 0 4376; PC64LE-NEXT: addi 1, 1, 80 4377; PC64LE-NEXT: ld 0, 16(1) 4378; PC64LE-NEXT: mtlr 0 4379; PC64LE-NEXT: blr 4380; 4381; PC64LE9-LABEL: constrained_vector_log2_v3f64: 4382; PC64LE9: # %bb.0: # %entry 4383; PC64LE9-NEXT: mflr 0 4384; PC64LE9-NEXT: std 0, 16(1) 4385; PC64LE9-NEXT: stdu 1, -64(1) 4386; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill 4387; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 4388; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 4389; PC64LE9-NEXT: fmr 31, 3 4390; PC64LE9-NEXT: fmr 30, 2 4391; PC64LE9-NEXT: bl log2 4392; PC64LE9-NEXT: nop 4393; PC64LE9-NEXT: xscpsgndp 63, 1, 1 4394; PC64LE9-NEXT: fmr 1, 30 4395; PC64LE9-NEXT: bl log2 4396; PC64LE9-NEXT: nop 4397; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4398; PC64LE9-NEXT: xxmrghd 63, 1, 63 4399; PC64LE9-NEXT: fmr 1, 31 4400; PC64LE9-NEXT: bl log2 4401; PC64LE9-NEXT: nop 4402; PC64LE9-NEXT: fmr 3, 1 4403; PC64LE9-NEXT: xxswapd 1, 63 4404; PC64LE9-NEXT: xscpsgndp 2, 63, 63 4405; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 4406; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 4407; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4408; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload 4409; PC64LE9-NEXT: addi 1, 1, 64 4410; PC64LE9-NEXT: ld 0, 16(1) 4411; PC64LE9-NEXT: mtlr 0 4412; PC64LE9-NEXT: blr 4413entry: 4414 %log2 = call <3 x double> @llvm.experimental.constrained.log2.v3f64( 4415 <3 x double> %x, 4416 metadata !"round.dynamic", 4417 metadata !"fpexcept.strict") #1 4418 ret <3 x double> %log2 4419} 4420 4421define <4 x double> @constrained_vector_log2_v4f64(<4 x double> %x) #0 { 4422; PC64LE-LABEL: constrained_vector_log2_v4f64: 4423; PC64LE: # %bb.0: # %entry 4424; PC64LE-NEXT: mflr 0 4425; PC64LE-NEXT: std 0, 16(1) 4426; PC64LE-NEXT: stdu 1, -96(1) 4427; PC64LE-NEXT: li 3, 48 4428; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill 4429; PC64LE-NEXT: li 3, 64 4430; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 4431; PC64LE-NEXT: vmr 30, 2 4432; PC64LE-NEXT: li 3, 80 4433; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4434; PC64LE-NEXT: vmr 31, 3 4435; PC64LE-NEXT: xxlor 1, 62, 62 4436; PC64LE-NEXT: bl log2 4437; PC64LE-NEXT: nop 4438; PC64LE-NEXT: xxlor 61, 1, 1 4439; PC64LE-NEXT: xxswapd 1, 62 4440; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4441; PC64LE-NEXT: bl log2 4442; PC64LE-NEXT: nop 4443; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4444; PC64LE-NEXT: xxmrghd 62, 61, 1 4445; PC64LE-NEXT: xxlor 1, 63, 63 4446; PC64LE-NEXT: bl log2 4447; PC64LE-NEXT: nop 4448; PC64LE-NEXT: xxlor 61, 1, 1 4449; PC64LE-NEXT: xxswapd 1, 63 4450; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4451; PC64LE-NEXT: bl log2 4452; PC64LE-NEXT: nop 4453; PC64LE-NEXT: li 3, 80 4454; PC64LE-NEXT: vmr 2, 30 4455; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4456; PC64LE-NEXT: xxmrghd 35, 61, 1 4457; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4458; PC64LE-NEXT: li 3, 64 4459; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 4460; PC64LE-NEXT: li 3, 48 4461; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload 4462; PC64LE-NEXT: addi 1, 1, 96 4463; PC64LE-NEXT: ld 0, 16(1) 4464; PC64LE-NEXT: mtlr 0 4465; PC64LE-NEXT: blr 4466; 4467; PC64LE9-LABEL: constrained_vector_log2_v4f64: 4468; PC64LE9: # %bb.0: # %entry 4469; PC64LE9-NEXT: mflr 0 4470; PC64LE9-NEXT: std 0, 16(1) 4471; PC64LE9-NEXT: stdu 1, -80(1) 4472; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill 4473; PC64LE9-NEXT: vmr 30, 2 4474; PC64LE9-NEXT: xscpsgndp 1, 62, 62 4475; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill 4476; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill 4477; PC64LE9-NEXT: vmr 31, 3 4478; PC64LE9-NEXT: bl log2 4479; PC64LE9-NEXT: nop 4480; PC64LE9-NEXT: xscpsgndp 61, 1, 1 4481; PC64LE9-NEXT: xxswapd 1, 62 4482; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4483; PC64LE9-NEXT: bl log2 4484; PC64LE9-NEXT: nop 4485; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4486; PC64LE9-NEXT: xxmrghd 62, 61, 1 4487; PC64LE9-NEXT: xscpsgndp 1, 63, 63 4488; PC64LE9-NEXT: bl log2 4489; PC64LE9-NEXT: nop 4490; PC64LE9-NEXT: xscpsgndp 61, 1, 1 4491; PC64LE9-NEXT: xxswapd 1, 63 4492; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4493; PC64LE9-NEXT: bl log2 4494; PC64LE9-NEXT: nop 4495; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4496; PC64LE9-NEXT: xxmrghd 35, 61, 1 4497; PC64LE9-NEXT: vmr 2, 30 4498; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload 4499; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload 4500; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload 4501; PC64LE9-NEXT: addi 1, 1, 80 4502; PC64LE9-NEXT: ld 0, 16(1) 4503; PC64LE9-NEXT: mtlr 0 4504; PC64LE9-NEXT: blr 4505entry: 4506 %log2 = call <4 x double> @llvm.experimental.constrained.log2.v4f64( 4507 <4 x double> %x, 4508 metadata !"round.dynamic", 4509 metadata !"fpexcept.strict") #1 4510 ret <4 x double> %log2 4511} 4512 4513define <1 x float> @constrained_vector_rint_v1f32(<1 x float> %x) #0 { 4514; PC64LE-LABEL: constrained_vector_rint_v1f32: 4515; PC64LE: # %bb.0: # %entry 4516; PC64LE-NEXT: xsrdpic 1, 1 4517; PC64LE-NEXT: blr 4518; 4519; PC64LE9-LABEL: constrained_vector_rint_v1f32: 4520; PC64LE9: # %bb.0: # %entry 4521; PC64LE9-NEXT: xsrdpic 1, 1 4522; PC64LE9-NEXT: blr 4523entry: 4524 %rint = call <1 x float> @llvm.experimental.constrained.rint.v1f32( 4525 <1 x float> %x, 4526 metadata !"round.dynamic", 4527 metadata !"fpexcept.strict") #1 4528 ret <1 x float> %rint 4529} 4530 4531define <2 x double> @constrained_vector_rint_v2f64(<2 x double> %x) #0 { 4532; PC64LE-LABEL: constrained_vector_rint_v2f64: 4533; PC64LE: # %bb.0: # %entry 4534; PC64LE-NEXT: xvrdpic 34, 34 4535; PC64LE-NEXT: blr 4536; 4537; PC64LE9-LABEL: constrained_vector_rint_v2f64: 4538; PC64LE9: # %bb.0: # %entry 4539; PC64LE9-NEXT: xvrdpic 34, 34 4540; PC64LE9-NEXT: blr 4541entry: 4542 %rint = call <2 x double> @llvm.experimental.constrained.rint.v2f64( 4543 <2 x double> %x, 4544 metadata !"round.dynamic", 4545 metadata !"fpexcept.strict") #1 4546 ret <2 x double> %rint 4547} 4548 4549define <3 x float> @constrained_vector_rint_v3f32(<3 x float> %x) #0 { 4550; PC64LE-LABEL: constrained_vector_rint_v3f32: 4551; PC64LE: # %bb.0: # %entry 4552; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 4553; PC64LE-NEXT: xxswapd 1, 34 4554; PC64LE-NEXT: addis 3, 2, .LCPI77_0@toc@ha 4555; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 4556; PC64LE-NEXT: addi 3, 3, .LCPI77_0@toc@l 4557; PC64LE-NEXT: lvx 4, 0, 3 4558; PC64LE-NEXT: xscvspdpn 0, 0 4559; PC64LE-NEXT: xscvspdpn 1, 1 4560; PC64LE-NEXT: xscvspdpn 2, 2 4561; PC64LE-NEXT: xsrdpic 0, 0 4562; PC64LE-NEXT: xsrdpic 1, 1 4563; PC64LE-NEXT: xsrdpic 2, 2 4564; PC64LE-NEXT: xscvdpspn 0, 0 4565; PC64LE-NEXT: xscvdpspn 1, 1 4566; PC64LE-NEXT: xscvdpspn 34, 2 4567; PC64LE-NEXT: xxmrghw 35, 1, 0 4568; PC64LE-NEXT: vperm 2, 2, 3, 4 4569; PC64LE-NEXT: blr 4570; 4571; PC64LE9-LABEL: constrained_vector_rint_v3f32: 4572; PC64LE9: # %bb.0: # %entry 4573; PC64LE9-NEXT: xxswapd 1, 34 4574; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3 4575; PC64LE9-NEXT: addis 3, 2, .LCPI77_0@toc@ha 4576; PC64LE9-NEXT: addi 3, 3, .LCPI77_0@toc@l 4577; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 4578; PC64LE9-NEXT: xscvspdpn 1, 1 4579; PC64LE9-NEXT: xscvspdpn 2, 2 4580; PC64LE9-NEXT: xscvspdpn 0, 0 4581; PC64LE9-NEXT: lxv 35, 0(3) 4582; PC64LE9-NEXT: xsrdpic 1, 1 4583; PC64LE9-NEXT: xsrdpic 2, 2 4584; PC64LE9-NEXT: xsrdpic 0, 0 4585; PC64LE9-NEXT: xscvdpspn 2, 2 4586; PC64LE9-NEXT: xscvdpspn 1, 1 4587; PC64LE9-NEXT: xscvdpspn 36, 0 4588; PC64LE9-NEXT: xxmrghw 34, 1, 2 4589; PC64LE9-NEXT: vperm 2, 4, 2, 3 4590; PC64LE9-NEXT: blr 4591 entry: 4592 %rint = call <3 x float> @llvm.experimental.constrained.rint.v3f32( 4593 <3 x float> %x, 4594 metadata !"round.dynamic", 4595 metadata !"fpexcept.strict") #1 4596 ret <3 x float> %rint 4597} 4598 4599define <3 x double> @constrained_vector_rint_v3f64(<3 x double> %x) #0 { 4600; PC64LE-LABEL: constrained_vector_rint_v3f64: 4601; PC64LE: # %bb.0: # %entry 4602; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 4603; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4604; PC64LE-NEXT: xxmrghd 0, 2, 1 4605; PC64LE-NEXT: xsrdpic 3, 3 4606; PC64LE-NEXT: xvrdpic 2, 0 4607; PC64LE-NEXT: xxswapd 1, 2 4608; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 4609; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4610; PC64LE-NEXT: blr 4611; 4612; PC64LE9-LABEL: constrained_vector_rint_v3f64: 4613; PC64LE9: # %bb.0: # %entry 4614; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 4615; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4616; PC64LE9-NEXT: xxmrghd 0, 2, 1 4617; PC64LE9-NEXT: xsrdpic 3, 3 4618; PC64LE9-NEXT: xvrdpic 2, 0 4619; PC64LE9-NEXT: xxswapd 1, 2 4620; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4621; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 4622; PC64LE9-NEXT: blr 4623entry: 4624 %rint = call <3 x double> @llvm.experimental.constrained.rint.v3f64( 4625 <3 x double> %x, 4626 metadata !"round.dynamic", 4627 metadata !"fpexcept.strict") #1 4628 ret <3 x double> %rint 4629} 4630 4631define <4 x double> @constrained_vector_rint_v4f64(<4 x double> %x) #0 { 4632; PC64LE-LABEL: constrained_vector_rint_v4f64: 4633; PC64LE: # %bb.0: # %entry 4634; PC64LE-NEXT: xvrdpic 35, 35 4635; PC64LE-NEXT: xvrdpic 34, 34 4636; PC64LE-NEXT: blr 4637; 4638; PC64LE9-LABEL: constrained_vector_rint_v4f64: 4639; PC64LE9: # %bb.0: # %entry 4640; PC64LE9-NEXT: xvrdpic 35, 35 4641; PC64LE9-NEXT: xvrdpic 34, 34 4642; PC64LE9-NEXT: blr 4643entry: 4644 %rint = call <4 x double> @llvm.experimental.constrained.rint.v4f64( 4645 <4 x double> %x, 4646 metadata !"round.dynamic", 4647 metadata !"fpexcept.strict") #1 4648 ret <4 x double> %rint 4649} 4650 4651define <1 x float> @constrained_vector_nearbyint_v1f32(<1 x float> %x) #0 { 4652; PC64LE-LABEL: constrained_vector_nearbyint_v1f32: 4653; PC64LE: # %bb.0: # %entry 4654; PC64LE-NEXT: mflr 0 4655; PC64LE-NEXT: std 0, 16(1) 4656; PC64LE-NEXT: stdu 1, -32(1) 4657; PC64LE-NEXT: bl nearbyintf 4658; PC64LE-NEXT: nop 4659; PC64LE-NEXT: addi 1, 1, 32 4660; PC64LE-NEXT: ld 0, 16(1) 4661; PC64LE-NEXT: mtlr 0 4662; PC64LE-NEXT: blr 4663; 4664; PC64LE9-LABEL: constrained_vector_nearbyint_v1f32: 4665; PC64LE9: # %bb.0: # %entry 4666; PC64LE9-NEXT: mflr 0 4667; PC64LE9-NEXT: std 0, 16(1) 4668; PC64LE9-NEXT: stdu 1, -32(1) 4669; PC64LE9-NEXT: bl nearbyintf 4670; PC64LE9-NEXT: nop 4671; PC64LE9-NEXT: addi 1, 1, 32 4672; PC64LE9-NEXT: ld 0, 16(1) 4673; PC64LE9-NEXT: mtlr 0 4674; PC64LE9-NEXT: blr 4675entry: 4676 %nearby = call <1 x float> @llvm.experimental.constrained.nearbyint.v1f32( 4677 <1 x float> %x, 4678 metadata !"round.dynamic", 4679 metadata !"fpexcept.strict") #1 4680 ret <1 x float> %nearby 4681} 4682 4683define <2 x double> @constrained_vector_nearbyint_v2f64(<2 x double> %x) #0 { 4684; PC64LE-LABEL: constrained_vector_nearbyint_v2f64: 4685; PC64LE: # %bb.0: # %entry 4686; PC64LE-NEXT: mflr 0 4687; PC64LE-NEXT: std 0, 16(1) 4688; PC64LE-NEXT: stdu 1, -80(1) 4689; PC64LE-NEXT: li 3, 48 4690; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 4691; PC64LE-NEXT: li 3, 64 4692; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4693; PC64LE-NEXT: vmr 31, 2 4694; PC64LE-NEXT: xxlor 1, 63, 63 4695; PC64LE-NEXT: bl nearbyint 4696; PC64LE-NEXT: nop 4697; PC64LE-NEXT: xxlor 62, 1, 1 4698; PC64LE-NEXT: xxswapd 1, 63 4699; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4700; PC64LE-NEXT: bl nearbyint 4701; PC64LE-NEXT: nop 4702; PC64LE-NEXT: li 3, 64 4703; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4704; PC64LE-NEXT: xxmrghd 34, 62, 1 4705; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4706; PC64LE-NEXT: li 3, 48 4707; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 4708; PC64LE-NEXT: addi 1, 1, 80 4709; PC64LE-NEXT: ld 0, 16(1) 4710; PC64LE-NEXT: mtlr 0 4711; PC64LE-NEXT: blr 4712; 4713; PC64LE9-LABEL: constrained_vector_nearbyint_v2f64: 4714; PC64LE9: # %bb.0: # %entry 4715; PC64LE9-NEXT: mflr 0 4716; PC64LE9-NEXT: std 0, 16(1) 4717; PC64LE9-NEXT: stdu 1, -64(1) 4718; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 4719; PC64LE9-NEXT: vmr 31, 2 4720; PC64LE9-NEXT: xscpsgndp 1, 63, 63 4721; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 4722; PC64LE9-NEXT: bl nearbyint 4723; PC64LE9-NEXT: nop 4724; PC64LE9-NEXT: xscpsgndp 62, 1, 1 4725; PC64LE9-NEXT: xxswapd 1, 63 4726; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4727; PC64LE9-NEXT: bl nearbyint 4728; PC64LE9-NEXT: nop 4729; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4730; PC64LE9-NEXT: xxmrghd 34, 62, 1 4731; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 4732; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 4733; PC64LE9-NEXT: addi 1, 1, 64 4734; PC64LE9-NEXT: ld 0, 16(1) 4735; PC64LE9-NEXT: mtlr 0 4736; PC64LE9-NEXT: blr 4737entry: 4738 %nearby = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64( 4739 <2 x double> %x, 4740 metadata !"round.dynamic", 4741 metadata !"fpexcept.strict") #1 4742 ret <2 x double> %nearby 4743} 4744 4745define <3 x float> @constrained_vector_nearbyint_v3f32(<3 x float> %x) #0 { 4746; PC64LE-LABEL: constrained_vector_nearbyint_v3f32: 4747; PC64LE: # %bb.0: # %entry 4748; PC64LE-NEXT: mflr 0 4749; PC64LE-NEXT: std 0, 16(1) 4750; PC64LE-NEXT: stdu 1, -80(1) 4751; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 4752; PC64LE-NEXT: li 3, 48 4753; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 4754; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 4755; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4756; PC64LE-NEXT: vmr 31, 2 4757; PC64LE-NEXT: xscvspdpn 1, 0 4758; PC64LE-NEXT: bl nearbyintf 4759; PC64LE-NEXT: nop 4760; PC64LE-NEXT: xxswapd 0, 63 4761; PC64LE-NEXT: fmr 31, 1 4762; PC64LE-NEXT: xscvspdpn 1, 0 4763; PC64LE-NEXT: bl nearbyintf 4764; PC64LE-NEXT: nop 4765; PC64LE-NEXT: xxsldwi 0, 63, 63, 3 4766; PC64LE-NEXT: fmr 30, 1 4767; PC64LE-NEXT: xscvspdpn 1, 0 4768; PC64LE-NEXT: bl nearbyintf 4769; PC64LE-NEXT: nop 4770; PC64LE-NEXT: xscvdpspn 0, 30 4771; PC64LE-NEXT: addis 3, 2, .LCPI82_0@toc@ha 4772; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 4773; PC64LE-NEXT: xscvdpspn 1, 1 4774; PC64LE-NEXT: addi 3, 3, .LCPI82_0@toc@l 4775; PC64LE-NEXT: xscvdpspn 34, 31 4776; PC64LE-NEXT: lvx 4, 0, 3 4777; PC64LE-NEXT: li 3, 48 4778; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 4779; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4780; PC64LE-NEXT: xxmrghw 35, 0, 1 4781; PC64LE-NEXT: vperm 2, 2, 3, 4 4782; PC64LE-NEXT: addi 1, 1, 80 4783; PC64LE-NEXT: ld 0, 16(1) 4784; PC64LE-NEXT: mtlr 0 4785; PC64LE-NEXT: blr 4786; 4787; PC64LE9-LABEL: constrained_vector_nearbyint_v3f32: 4788; PC64LE9: # %bb.0: # %entry 4789; PC64LE9-NEXT: mflr 0 4790; PC64LE9-NEXT: std 0, 16(1) 4791; PC64LE9-NEXT: stdu 1, -64(1) 4792; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 4793; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill 4794; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 4795; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 4796; PC64LE9-NEXT: xscvspdpn 1, 0 4797; PC64LE9-NEXT: vmr 31, 2 4798; PC64LE9-NEXT: bl nearbyintf 4799; PC64LE9-NEXT: nop 4800; PC64LE9-NEXT: xxswapd 0, 63 4801; PC64LE9-NEXT: fmr 31, 1 4802; PC64LE9-NEXT: xscvspdpn 1, 0 4803; PC64LE9-NEXT: bl nearbyintf 4804; PC64LE9-NEXT: nop 4805; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 4806; PC64LE9-NEXT: fmr 30, 1 4807; PC64LE9-NEXT: xscvspdpn 1, 0 4808; PC64LE9-NEXT: bl nearbyintf 4809; PC64LE9-NEXT: nop 4810; PC64LE9-NEXT: xscvdpspn 0, 1 4811; PC64LE9-NEXT: xscvdpspn 1, 30 4812; PC64LE9-NEXT: addis 3, 2, .LCPI82_0@toc@ha 4813; PC64LE9-NEXT: xscvdpspn 36, 31 4814; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 4815; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 4816; PC64LE9-NEXT: addi 3, 3, .LCPI82_0@toc@l 4817; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload 4818; PC64LE9-NEXT: lxv 35, 0(3) 4819; PC64LE9-NEXT: xxmrghw 34, 1, 0 4820; PC64LE9-NEXT: vperm 2, 4, 2, 3 4821; PC64LE9-NEXT: addi 1, 1, 64 4822; PC64LE9-NEXT: ld 0, 16(1) 4823; PC64LE9-NEXT: mtlr 0 4824; PC64LE9-NEXT: blr 4825entry: 4826 %nearby = call <3 x float> @llvm.experimental.constrained.nearbyint.v3f32( 4827 <3 x float> %x, 4828 metadata !"round.dynamic", 4829 metadata !"fpexcept.strict") #1 4830 ret <3 x float> %nearby 4831} 4832 4833define <3 x double> @constrained_vector_nearby_v3f64(<3 x double> %x) #0 { 4834; PC64LE-LABEL: constrained_vector_nearby_v3f64: 4835; PC64LE: # %bb.0: # %entry 4836; PC64LE-NEXT: mflr 0 4837; PC64LE-NEXT: std 0, 16(1) 4838; PC64LE-NEXT: stdu 1, -80(1) 4839; PC64LE-NEXT: li 3, 48 4840; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 4841; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 4842; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4843; PC64LE-NEXT: fmr 31, 3 4844; PC64LE-NEXT: fmr 30, 2 4845; PC64LE-NEXT: bl nearbyint 4846; PC64LE-NEXT: nop 4847; PC64LE-NEXT: xxlor 63, 1, 1 4848; PC64LE-NEXT: fmr 1, 30 4849; PC64LE-NEXT: bl nearbyint 4850; PC64LE-NEXT: nop 4851; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4852; PC64LE-NEXT: xxmrghd 63, 1, 63 4853; PC64LE-NEXT: fmr 1, 31 4854; PC64LE-NEXT: bl nearbyint 4855; PC64LE-NEXT: nop 4856; PC64LE-NEXT: xxswapd 0, 63 4857; PC64LE-NEXT: li 3, 48 4858; PC64LE-NEXT: xxlor 2, 63, 63 4859; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 4860; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 4861; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4862; PC64LE-NEXT: fmr 3, 1 4863; PC64LE-NEXT: fmr 1, 0 4864; PC64LE-NEXT: addi 1, 1, 80 4865; PC64LE-NEXT: ld 0, 16(1) 4866; PC64LE-NEXT: mtlr 0 4867; PC64LE-NEXT: blr 4868; 4869; PC64LE9-LABEL: constrained_vector_nearby_v3f64: 4870; PC64LE9: # %bb.0: # %entry 4871; PC64LE9-NEXT: mflr 0 4872; PC64LE9-NEXT: std 0, 16(1) 4873; PC64LE9-NEXT: stdu 1, -64(1) 4874; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill 4875; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill 4876; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 4877; PC64LE9-NEXT: fmr 31, 3 4878; PC64LE9-NEXT: fmr 30, 2 4879; PC64LE9-NEXT: bl nearbyint 4880; PC64LE9-NEXT: nop 4881; PC64LE9-NEXT: xscpsgndp 63, 1, 1 4882; PC64LE9-NEXT: fmr 1, 30 4883; PC64LE9-NEXT: bl nearbyint 4884; PC64LE9-NEXT: nop 4885; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4886; PC64LE9-NEXT: xxmrghd 63, 1, 63 4887; PC64LE9-NEXT: fmr 1, 31 4888; PC64LE9-NEXT: bl nearbyint 4889; PC64LE9-NEXT: nop 4890; PC64LE9-NEXT: fmr 3, 1 4891; PC64LE9-NEXT: xxswapd 1, 63 4892; PC64LE9-NEXT: xscpsgndp 2, 63, 63 4893; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 4894; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload 4895; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4896; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload 4897; PC64LE9-NEXT: addi 1, 1, 64 4898; PC64LE9-NEXT: ld 0, 16(1) 4899; PC64LE9-NEXT: mtlr 0 4900; PC64LE9-NEXT: blr 4901entry: 4902 %nearby = call <3 x double> @llvm.experimental.constrained.nearbyint.v3f64( 4903 <3 x double> %x, 4904 metadata !"round.dynamic", 4905 metadata !"fpexcept.strict") #1 4906 ret <3 x double> %nearby 4907} 4908 4909define <4 x double> @constrained_vector_nearbyint_v4f64(<4 x double> %x) #0 { 4910; PC64LE-LABEL: constrained_vector_nearbyint_v4f64: 4911; PC64LE: # %bb.0: # %entry 4912; PC64LE-NEXT: mflr 0 4913; PC64LE-NEXT: std 0, 16(1) 4914; PC64LE-NEXT: stdu 1, -96(1) 4915; PC64LE-NEXT: li 3, 48 4916; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill 4917; PC64LE-NEXT: li 3, 64 4918; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 4919; PC64LE-NEXT: vmr 30, 2 4920; PC64LE-NEXT: li 3, 80 4921; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 4922; PC64LE-NEXT: vmr 31, 3 4923; PC64LE-NEXT: xxlor 1, 62, 62 4924; PC64LE-NEXT: bl nearbyint 4925; PC64LE-NEXT: nop 4926; PC64LE-NEXT: xxlor 61, 1, 1 4927; PC64LE-NEXT: xxswapd 1, 62 4928; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4929; PC64LE-NEXT: bl nearbyint 4930; PC64LE-NEXT: nop 4931; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4932; PC64LE-NEXT: xxmrghd 62, 61, 1 4933; PC64LE-NEXT: xxlor 1, 63, 63 4934; PC64LE-NEXT: bl nearbyint 4935; PC64LE-NEXT: nop 4936; PC64LE-NEXT: xxlor 61, 1, 1 4937; PC64LE-NEXT: xxswapd 1, 63 4938; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4939; PC64LE-NEXT: bl nearbyint 4940; PC64LE-NEXT: nop 4941; PC64LE-NEXT: li 3, 80 4942; PC64LE-NEXT: vmr 2, 30 4943; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 4944; PC64LE-NEXT: xxmrghd 35, 61, 1 4945; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 4946; PC64LE-NEXT: li 3, 64 4947; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 4948; PC64LE-NEXT: li 3, 48 4949; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload 4950; PC64LE-NEXT: addi 1, 1, 96 4951; PC64LE-NEXT: ld 0, 16(1) 4952; PC64LE-NEXT: mtlr 0 4953; PC64LE-NEXT: blr 4954; 4955; PC64LE9-LABEL: constrained_vector_nearbyint_v4f64: 4956; PC64LE9: # %bb.0: # %entry 4957; PC64LE9-NEXT: mflr 0 4958; PC64LE9-NEXT: std 0, 16(1) 4959; PC64LE9-NEXT: stdu 1, -80(1) 4960; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill 4961; PC64LE9-NEXT: vmr 30, 2 4962; PC64LE9-NEXT: xscpsgndp 1, 62, 62 4963; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill 4964; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill 4965; PC64LE9-NEXT: vmr 31, 3 4966; PC64LE9-NEXT: bl nearbyint 4967; PC64LE9-NEXT: nop 4968; PC64LE9-NEXT: xscpsgndp 61, 1, 1 4969; PC64LE9-NEXT: xxswapd 1, 62 4970; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4971; PC64LE9-NEXT: bl nearbyint 4972; PC64LE9-NEXT: nop 4973; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4974; PC64LE9-NEXT: xxmrghd 62, 61, 1 4975; PC64LE9-NEXT: xscpsgndp 1, 63, 63 4976; PC64LE9-NEXT: bl nearbyint 4977; PC64LE9-NEXT: nop 4978; PC64LE9-NEXT: xscpsgndp 61, 1, 1 4979; PC64LE9-NEXT: xxswapd 1, 63 4980; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 4981; PC64LE9-NEXT: bl nearbyint 4982; PC64LE9-NEXT: nop 4983; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 4984; PC64LE9-NEXT: xxmrghd 35, 61, 1 4985; PC64LE9-NEXT: vmr 2, 30 4986; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload 4987; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload 4988; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload 4989; PC64LE9-NEXT: addi 1, 1, 80 4990; PC64LE9-NEXT: ld 0, 16(1) 4991; PC64LE9-NEXT: mtlr 0 4992; PC64LE9-NEXT: blr 4993entry: 4994 %nearby = call <4 x double> @llvm.experimental.constrained.nearbyint.v4f64( 4995 <4 x double> %x, 4996 metadata !"round.dynamic", 4997 metadata !"fpexcept.strict") #1 4998 ret <4 x double> %nearby 4999} 5000 5001define <1 x float> @constrained_vector_maxnum_v1f32(<1 x float> %x, <1 x float> %y) #0 { 5002; PC64LE-LABEL: constrained_vector_maxnum_v1f32: 5003; PC64LE: # %bb.0: # %entry 5004; PC64LE-NEXT: mflr 0 5005; PC64LE-NEXT: std 0, 16(1) 5006; PC64LE-NEXT: stdu 1, -32(1) 5007; PC64LE-NEXT: bl fmaxf 5008; PC64LE-NEXT: nop 5009; PC64LE-NEXT: addi 1, 1, 32 5010; PC64LE-NEXT: ld 0, 16(1) 5011; PC64LE-NEXT: mtlr 0 5012; PC64LE-NEXT: blr 5013; 5014; PC64LE9-LABEL: constrained_vector_maxnum_v1f32: 5015; PC64LE9: # %bb.0: # %entry 5016; PC64LE9-NEXT: mflr 0 5017; PC64LE9-NEXT: std 0, 16(1) 5018; PC64LE9-NEXT: stdu 1, -32(1) 5019; PC64LE9-NEXT: bl fmaxf 5020; PC64LE9-NEXT: nop 5021; PC64LE9-NEXT: addi 1, 1, 32 5022; PC64LE9-NEXT: ld 0, 16(1) 5023; PC64LE9-NEXT: mtlr 0 5024; PC64LE9-NEXT: blr 5025entry: 5026 %max = call <1 x float> @llvm.experimental.constrained.maxnum.v1f32( 5027 <1 x float> %x, <1 x float> %y, 5028 metadata !"fpexcept.strict") #1 5029 ret <1 x float> %max 5030} 5031 5032define <2 x double> @constrained_vector_maxnum_v2f64(<2 x double> %x, <2 x double> %y) #0 { 5033; PC64LE-LABEL: constrained_vector_maxnum_v2f64: 5034; PC64LE: # %bb.0: # %entry 5035; PC64LE-NEXT: xvmaxdp 34, 34, 35 5036; PC64LE-NEXT: blr 5037; 5038; PC64LE9-LABEL: constrained_vector_maxnum_v2f64: 5039; PC64LE9: # %bb.0: # %entry 5040; PC64LE9-NEXT: xvmaxdp 34, 34, 35 5041; PC64LE9-NEXT: blr 5042entry: 5043 %max = call <2 x double> @llvm.experimental.constrained.maxnum.v2f64( 5044 <2 x double> %x, 5045 <2 x double> %y, 5046 metadata !"fpexcept.strict") #1 5047 ret <2 x double> %max 5048} 5049 5050define <3 x float> @constrained_vector_maxnum_v3f32(<3 x float> %x, <3 x float> %y) #0 { 5051; PC64LE-LABEL: constrained_vector_maxnum_v3f32: 5052; PC64LE: # %bb.0: # %entry 5053; PC64LE-NEXT: mflr 0 5054; PC64LE-NEXT: std 0, 16(1) 5055; PC64LE-NEXT: stdu 1, -96(1) 5056; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 5057; PC64LE-NEXT: xxsldwi 2, 35, 35, 1 5058; PC64LE-NEXT: li 3, 48 5059; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 5060; PC64LE-NEXT: li 3, 64 5061; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill 5062; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 5063; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 5064; PC64LE-NEXT: xscvspdpn 1, 0 5065; PC64LE-NEXT: xscvspdpn 2, 2 5066; PC64LE-NEXT: vmr 31, 3 5067; PC64LE-NEXT: vmr 30, 2 5068; PC64LE-NEXT: bl fmaxf 5069; PC64LE-NEXT: nop 5070; PC64LE-NEXT: xxswapd 0, 62 5071; PC64LE-NEXT: xxswapd 2, 63 5072; PC64LE-NEXT: fmr 31, 1 5073; PC64LE-NEXT: xscvspdpn 1, 0 5074; PC64LE-NEXT: xscvspdpn 2, 2 5075; PC64LE-NEXT: bl fmaxf 5076; PC64LE-NEXT: nop 5077; PC64LE-NEXT: xxsldwi 0, 62, 62, 3 5078; PC64LE-NEXT: xxsldwi 2, 63, 63, 3 5079; PC64LE-NEXT: fmr 30, 1 5080; PC64LE-NEXT: xscvspdpn 1, 0 5081; PC64LE-NEXT: xscvspdpn 2, 2 5082; PC64LE-NEXT: bl fmaxf 5083; PC64LE-NEXT: nop 5084; PC64LE-NEXT: xscvdpspn 0, 30 5085; PC64LE-NEXT: addis 3, 2, .LCPI87_0@toc@ha 5086; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload 5087; PC64LE-NEXT: xscvdpspn 1, 1 5088; PC64LE-NEXT: addi 3, 3, .LCPI87_0@toc@l 5089; PC64LE-NEXT: xscvdpspn 34, 31 5090; PC64LE-NEXT: lvx 4, 0, 3 5091; PC64LE-NEXT: li 3, 64 5092; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 5093; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 5094; PC64LE-NEXT: li 3, 48 5095; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 5096; PC64LE-NEXT: xxmrghw 35, 0, 1 5097; PC64LE-NEXT: vperm 2, 2, 3, 4 5098; PC64LE-NEXT: addi 1, 1, 96 5099; PC64LE-NEXT: ld 0, 16(1) 5100; PC64LE-NEXT: mtlr 0 5101; PC64LE-NEXT: blr 5102; 5103; PC64LE9-LABEL: constrained_vector_maxnum_v3f32: 5104; PC64LE9: # %bb.0: # %entry 5105; PC64LE9-NEXT: mflr 0 5106; PC64LE9-NEXT: std 0, 16(1) 5107; PC64LE9-NEXT: stdu 1, -80(1) 5108; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 5109; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 5110; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 5111; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 5112; PC64LE9-NEXT: xscvspdpn 1, 0 5113; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1 5114; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 5115; PC64LE9-NEXT: xscvspdpn 2, 0 5116; PC64LE9-NEXT: vmr 31, 3 5117; PC64LE9-NEXT: vmr 30, 2 5118; PC64LE9-NEXT: bl fmaxf 5119; PC64LE9-NEXT: nop 5120; PC64LE9-NEXT: xxswapd 0, 62 5121; PC64LE9-NEXT: fmr 31, 1 5122; PC64LE9-NEXT: xscvspdpn 1, 0 5123; PC64LE9-NEXT: xxswapd 0, 63 5124; PC64LE9-NEXT: xscvspdpn 2, 0 5125; PC64LE9-NEXT: bl fmaxf 5126; PC64LE9-NEXT: nop 5127; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3 5128; PC64LE9-NEXT: fmr 30, 1 5129; PC64LE9-NEXT: xscvspdpn 1, 0 5130; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 5131; PC64LE9-NEXT: xscvspdpn 2, 0 5132; PC64LE9-NEXT: bl fmaxf 5133; PC64LE9-NEXT: nop 5134; PC64LE9-NEXT: xscvdpspn 0, 1 5135; PC64LE9-NEXT: xscvdpspn 1, 30 5136; PC64LE9-NEXT: addis 3, 2, .LCPI87_0@toc@ha 5137; PC64LE9-NEXT: xscvdpspn 35, 31 5138; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 5139; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 5140; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 5141; PC64LE9-NEXT: addi 3, 3, .LCPI87_0@toc@l 5142; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 5143; PC64LE9-NEXT: lxv 36, 0(3) 5144; PC64LE9-NEXT: xxmrghw 34, 1, 0 5145; PC64LE9-NEXT: vperm 2, 3, 2, 4 5146; PC64LE9-NEXT: addi 1, 1, 80 5147; PC64LE9-NEXT: ld 0, 16(1) 5148; PC64LE9-NEXT: mtlr 0 5149; PC64LE9-NEXT: blr 5150entry: 5151 %max = call <3 x float> @llvm.experimental.constrained.maxnum.v3f32( 5152 <3 x float> %x, 5153 <3 x float> %y, 5154 metadata !"fpexcept.strict") #1 5155 ret <3 x float> %max 5156} 5157 5158define <3 x double> @constrained_vector_max_v3f64(<3 x double> %x, <3 x double> %y) #0 { 5159; PC64LE-LABEL: constrained_vector_max_v3f64: 5160; PC64LE: # %bb.0: # %entry 5161; PC64LE-NEXT: mflr 0 5162; PC64LE-NEXT: std 0, 16(1) 5163; PC64LE-NEXT: stdu 1, -64(1) 5164; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 5165; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5 5166; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4 5167; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 5168; PC64LE-NEXT: xxmrghd 0, 5, 4 5169; PC64LE-NEXT: li 3, 48 5170; PC64LE-NEXT: xxmrghd 1, 2, 1 5171; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 5172; PC64LE-NEXT: fmr 2, 6 5173; PC64LE-NEXT: xvmaxdp 63, 1, 0 5174; PC64LE-NEXT: fmr 1, 3 5175; PC64LE-NEXT: bl fmax 5176; PC64LE-NEXT: nop 5177; PC64LE-NEXT: xxswapd 0, 63 5178; PC64LE-NEXT: li 3, 48 5179; PC64LE-NEXT: xxlor 2, 63, 63 5180; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 5181; PC64LE-NEXT: fmr 3, 1 5182; PC64LE-NEXT: fmr 1, 0 5183; PC64LE-NEXT: addi 1, 1, 64 5184; PC64LE-NEXT: ld 0, 16(1) 5185; PC64LE-NEXT: mtlr 0 5186; PC64LE-NEXT: blr 5187; 5188; PC64LE9-LABEL: constrained_vector_max_v3f64: 5189; PC64LE9: # %bb.0: # %entry 5190; PC64LE9-NEXT: mflr 0 5191; PC64LE9-NEXT: std 0, 16(1) 5192; PC64LE9-NEXT: stdu 1, -48(1) 5193; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5 5194; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4 5195; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 5196; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 5197; PC64LE9-NEXT: xxmrghd 0, 5, 4 5198; PC64LE9-NEXT: xxmrghd 1, 2, 1 5199; PC64LE9-NEXT: fmr 2, 6 5200; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 5201; PC64LE9-NEXT: xvmaxdp 63, 1, 0 5202; PC64LE9-NEXT: fmr 1, 3 5203; PC64LE9-NEXT: bl fmax 5204; PC64LE9-NEXT: nop 5205; PC64LE9-NEXT: fmr 3, 1 5206; PC64LE9-NEXT: xxswapd 1, 63 5207; PC64LE9-NEXT: xscpsgndp 2, 63, 63 5208; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 5209; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 5210; PC64LE9-NEXT: addi 1, 1, 48 5211; PC64LE9-NEXT: ld 0, 16(1) 5212; PC64LE9-NEXT: mtlr 0 5213; PC64LE9-NEXT: blr 5214entry: 5215 %max = call <3 x double> @llvm.experimental.constrained.maxnum.v3f64( 5216 <3 x double> %x, 5217 <3 x double> %y, 5218 metadata !"fpexcept.strict") #1 5219 ret <3 x double> %max 5220} 5221 5222define <4 x double> @constrained_vector_maxnum_v4f64(<4 x double> %x, <4 x double> %y) #0 { 5223; PC64LE-LABEL: constrained_vector_maxnum_v4f64: 5224; PC64LE: # %bb.0: # %entry 5225; PC64LE-NEXT: xvmaxdp 34, 34, 36 5226; PC64LE-NEXT: xvmaxdp 35, 35, 37 5227; PC64LE-NEXT: blr 5228; 5229; PC64LE9-LABEL: constrained_vector_maxnum_v4f64: 5230; PC64LE9: # %bb.0: # %entry 5231; PC64LE9-NEXT: xvmaxdp 34, 34, 36 5232; PC64LE9-NEXT: xvmaxdp 35, 35, 37 5233; PC64LE9-NEXT: blr 5234entry: 5235 %max = call <4 x double> @llvm.experimental.constrained.maxnum.v4f64( 5236 <4 x double> %x, 5237 <4 x double> %y, 5238 metadata !"fpexcept.strict") #1 5239 ret <4 x double> %max 5240} 5241 5242define <1 x float> @constrained_vector_minnum_v1f32(<1 x float> %x, <1 x float> %y) #0 { 5243; PC64LE-LABEL: constrained_vector_minnum_v1f32: 5244; PC64LE: # %bb.0: # %entry 5245; PC64LE-NEXT: mflr 0 5246; PC64LE-NEXT: std 0, 16(1) 5247; PC64LE-NEXT: stdu 1, -32(1) 5248; PC64LE-NEXT: bl fminf 5249; PC64LE-NEXT: nop 5250; PC64LE-NEXT: addi 1, 1, 32 5251; PC64LE-NEXT: ld 0, 16(1) 5252; PC64LE-NEXT: mtlr 0 5253; PC64LE-NEXT: blr 5254; 5255; PC64LE9-LABEL: constrained_vector_minnum_v1f32: 5256; PC64LE9: # %bb.0: # %entry 5257; PC64LE9-NEXT: mflr 0 5258; PC64LE9-NEXT: std 0, 16(1) 5259; PC64LE9-NEXT: stdu 1, -32(1) 5260; PC64LE9-NEXT: bl fminf 5261; PC64LE9-NEXT: nop 5262; PC64LE9-NEXT: addi 1, 1, 32 5263; PC64LE9-NEXT: ld 0, 16(1) 5264; PC64LE9-NEXT: mtlr 0 5265; PC64LE9-NEXT: blr 5266 entry: 5267 %min = call <1 x float> @llvm.experimental.constrained.minnum.v1f32( 5268 <1 x float> %x, <1 x float> %y, 5269 metadata !"fpexcept.strict") #1 5270 ret <1 x float> %min 5271} 5272 5273define <2 x double> @constrained_vector_minnum_v2f64(<2 x double> %x, <2 x double> %y) #0 { 5274; PC64LE-LABEL: constrained_vector_minnum_v2f64: 5275; PC64LE: # %bb.0: # %entry 5276; PC64LE-NEXT: xvmindp 34, 34, 35 5277; PC64LE-NEXT: blr 5278; 5279; PC64LE9-LABEL: constrained_vector_minnum_v2f64: 5280; PC64LE9: # %bb.0: # %entry 5281; PC64LE9-NEXT: xvmindp 34, 34, 35 5282; PC64LE9-NEXT: blr 5283entry: 5284 %min = call <2 x double> @llvm.experimental.constrained.minnum.v2f64( 5285 <2 x double> %x, 5286 <2 x double> %y, 5287 metadata !"fpexcept.strict") #1 5288 ret <2 x double> %min 5289} 5290 5291define <3 x float> @constrained_vector_minnum_v3f32(<3 x float> %x, <3 x float> %y) #0 { 5292; PC64LE-LABEL: constrained_vector_minnum_v3f32: 5293; PC64LE: # %bb.0: # %entry 5294; PC64LE-NEXT: mflr 0 5295; PC64LE-NEXT: std 0, 16(1) 5296; PC64LE-NEXT: stdu 1, -96(1) 5297; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 5298; PC64LE-NEXT: xxsldwi 2, 35, 35, 1 5299; PC64LE-NEXT: li 3, 48 5300; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill 5301; PC64LE-NEXT: li 3, 64 5302; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill 5303; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill 5304; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 5305; PC64LE-NEXT: xscvspdpn 1, 0 5306; PC64LE-NEXT: xscvspdpn 2, 2 5307; PC64LE-NEXT: vmr 31, 3 5308; PC64LE-NEXT: vmr 30, 2 5309; PC64LE-NEXT: bl fminf 5310; PC64LE-NEXT: nop 5311; PC64LE-NEXT: xxswapd 0, 62 5312; PC64LE-NEXT: xxswapd 2, 63 5313; PC64LE-NEXT: fmr 31, 1 5314; PC64LE-NEXT: xscvspdpn 1, 0 5315; PC64LE-NEXT: xscvspdpn 2, 2 5316; PC64LE-NEXT: bl fminf 5317; PC64LE-NEXT: nop 5318; PC64LE-NEXT: xxsldwi 0, 62, 62, 3 5319; PC64LE-NEXT: xxsldwi 2, 63, 63, 3 5320; PC64LE-NEXT: fmr 30, 1 5321; PC64LE-NEXT: xscvspdpn 1, 0 5322; PC64LE-NEXT: xscvspdpn 2, 2 5323; PC64LE-NEXT: bl fminf 5324; PC64LE-NEXT: nop 5325; PC64LE-NEXT: xscvdpspn 0, 30 5326; PC64LE-NEXT: addis 3, 2, .LCPI92_0@toc@ha 5327; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload 5328; PC64LE-NEXT: xscvdpspn 1, 1 5329; PC64LE-NEXT: addi 3, 3, .LCPI92_0@toc@l 5330; PC64LE-NEXT: xscvdpspn 34, 31 5331; PC64LE-NEXT: lvx 4, 0, 3 5332; PC64LE-NEXT: li 3, 64 5333; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload 5334; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 5335; PC64LE-NEXT: li 3, 48 5336; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload 5337; PC64LE-NEXT: xxmrghw 35, 0, 1 5338; PC64LE-NEXT: vperm 2, 2, 3, 4 5339; PC64LE-NEXT: addi 1, 1, 96 5340; PC64LE-NEXT: ld 0, 16(1) 5341; PC64LE-NEXT: mtlr 0 5342; PC64LE-NEXT: blr 5343; 5344; PC64LE9-LABEL: constrained_vector_minnum_v3f32: 5345; PC64LE9: # %bb.0: # %entry 5346; PC64LE9-NEXT: mflr 0 5347; PC64LE9-NEXT: std 0, 16(1) 5348; PC64LE9-NEXT: stdu 1, -80(1) 5349; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 5350; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill 5351; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill 5352; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill 5353; PC64LE9-NEXT: xscvspdpn 1, 0 5354; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1 5355; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill 5356; PC64LE9-NEXT: xscvspdpn 2, 0 5357; PC64LE9-NEXT: vmr 31, 3 5358; PC64LE9-NEXT: vmr 30, 2 5359; PC64LE9-NEXT: bl fminf 5360; PC64LE9-NEXT: nop 5361; PC64LE9-NEXT: xxswapd 0, 62 5362; PC64LE9-NEXT: fmr 31, 1 5363; PC64LE9-NEXT: xscvspdpn 1, 0 5364; PC64LE9-NEXT: xxswapd 0, 63 5365; PC64LE9-NEXT: xscvspdpn 2, 0 5366; PC64LE9-NEXT: bl fminf 5367; PC64LE9-NEXT: nop 5368; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3 5369; PC64LE9-NEXT: fmr 30, 1 5370; PC64LE9-NEXT: xscvspdpn 1, 0 5371; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3 5372; PC64LE9-NEXT: xscvspdpn 2, 0 5373; PC64LE9-NEXT: bl fminf 5374; PC64LE9-NEXT: nop 5375; PC64LE9-NEXT: xscvdpspn 0, 1 5376; PC64LE9-NEXT: xscvdpspn 1, 30 5377; PC64LE9-NEXT: addis 3, 2, .LCPI92_0@toc@ha 5378; PC64LE9-NEXT: xscvdpspn 35, 31 5379; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload 5380; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload 5381; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload 5382; PC64LE9-NEXT: addi 3, 3, .LCPI92_0@toc@l 5383; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload 5384; PC64LE9-NEXT: lxv 36, 0(3) 5385; PC64LE9-NEXT: xxmrghw 34, 1, 0 5386; PC64LE9-NEXT: vperm 2, 3, 2, 4 5387; PC64LE9-NEXT: addi 1, 1, 80 5388; PC64LE9-NEXT: ld 0, 16(1) 5389; PC64LE9-NEXT: mtlr 0 5390; PC64LE9-NEXT: blr 5391entry: 5392 %min = call <3 x float> @llvm.experimental.constrained.minnum.v3f32( 5393 <3 x float> %x, 5394 <3 x float> %y, 5395 metadata !"fpexcept.strict") #1 5396 ret <3 x float> %min 5397} 5398 5399define <3 x double> @constrained_vector_min_v3f64(<3 x double> %x, <3 x double> %y) #0 { 5400; PC64LE-LABEL: constrained_vector_min_v3f64: 5401; PC64LE: # %bb.0: # %entry 5402; PC64LE-NEXT: mflr 0 5403; PC64LE-NEXT: std 0, 16(1) 5404; PC64LE-NEXT: stdu 1, -64(1) 5405; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 5406; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5 5407; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4 5408; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 5409; PC64LE-NEXT: xxmrghd 0, 5, 4 5410; PC64LE-NEXT: li 3, 48 5411; PC64LE-NEXT: xxmrghd 1, 2, 1 5412; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill 5413; PC64LE-NEXT: fmr 2, 6 5414; PC64LE-NEXT: xvmindp 63, 1, 0 5415; PC64LE-NEXT: fmr 1, 3 5416; PC64LE-NEXT: bl fmin 5417; PC64LE-NEXT: nop 5418; PC64LE-NEXT: xxswapd 0, 63 5419; PC64LE-NEXT: li 3, 48 5420; PC64LE-NEXT: xxlor 2, 63, 63 5421; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload 5422; PC64LE-NEXT: fmr 3, 1 5423; PC64LE-NEXT: fmr 1, 0 5424; PC64LE-NEXT: addi 1, 1, 64 5425; PC64LE-NEXT: ld 0, 16(1) 5426; PC64LE-NEXT: mtlr 0 5427; PC64LE-NEXT: blr 5428; 5429; PC64LE9-LABEL: constrained_vector_min_v3f64: 5430; PC64LE9: # %bb.0: # %entry 5431; PC64LE9-NEXT: mflr 0 5432; PC64LE9-NEXT: std 0, 16(1) 5433; PC64LE9-NEXT: stdu 1, -48(1) 5434; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5 5435; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4 5436; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 5437; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 5438; PC64LE9-NEXT: xxmrghd 0, 5, 4 5439; PC64LE9-NEXT: xxmrghd 1, 2, 1 5440; PC64LE9-NEXT: fmr 2, 6 5441; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill 5442; PC64LE9-NEXT: xvmindp 63, 1, 0 5443; PC64LE9-NEXT: fmr 1, 3 5444; PC64LE9-NEXT: bl fmin 5445; PC64LE9-NEXT: nop 5446; PC64LE9-NEXT: fmr 3, 1 5447; PC64LE9-NEXT: xxswapd 1, 63 5448; PC64LE9-NEXT: xscpsgndp 2, 63, 63 5449; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload 5450; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 5451; PC64LE9-NEXT: addi 1, 1, 48 5452; PC64LE9-NEXT: ld 0, 16(1) 5453; PC64LE9-NEXT: mtlr 0 5454; PC64LE9-NEXT: blr 5455entry: 5456 %min = call <3 x double> @llvm.experimental.constrained.minnum.v3f64( 5457 <3 x double> %x, 5458 <3 x double> %y, 5459 metadata !"fpexcept.strict") #1 5460 ret <3 x double> %min 5461} 5462 5463define <4 x double> @constrained_vector_minnum_v4f64(<4 x double> %x, <4 x double> %y) #0 { 5464; PC64LE-LABEL: constrained_vector_minnum_v4f64: 5465; PC64LE: # %bb.0: # %entry 5466; PC64LE-NEXT: xvmindp 34, 34, 36 5467; PC64LE-NEXT: xvmindp 35, 35, 37 5468; PC64LE-NEXT: blr 5469; 5470; PC64LE9-LABEL: constrained_vector_minnum_v4f64: 5471; PC64LE9: # %bb.0: # %entry 5472; PC64LE9-NEXT: xvmindp 34, 34, 36 5473; PC64LE9-NEXT: xvmindp 35, 35, 37 5474; PC64LE9-NEXT: blr 5475entry: 5476 %min = call <4 x double> @llvm.experimental.constrained.minnum.v4f64( 5477 <4 x double> %x, 5478 <4 x double> %y, 5479 metadata !"fpexcept.strict") #1 5480 ret <4 x double> %min 5481} 5482 5483define <1 x i32> @constrained_vector_fptosi_v1i32_v1f32(<1 x float> %x) #0 { 5484; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f32: 5485; PC64LE: # %bb.0: # %entry 5486; PC64LE-NEXT: xscvdpsxws 0, 1 5487; PC64LE-NEXT: mffprwz 3, 0 5488; PC64LE-NEXT: blr 5489; 5490; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f32: 5491; PC64LE9: # %bb.0: # %entry 5492; PC64LE9-NEXT: xscvdpsxws 0, 1 5493; PC64LE9-NEXT: mffprwz 3, 0 5494; PC64LE9-NEXT: blr 5495entry: 5496 %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32( 5497 <1 x float> %x, 5498 metadata !"fpexcept.strict") #0 5499 ret <1 x i32> %result 5500} 5501 5502define <2 x i32> @constrained_vector_fptosi_v2i32_v2f32(<2 x float> %x) #0 { 5503; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f32: 5504; PC64LE: # %bb.0: # %entry 5505; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 5506; PC64LE-NEXT: xxswapd 1, 34 5507; PC64LE-NEXT: xscvspdpn 0, 0 5508; PC64LE-NEXT: xscvspdpn 1, 1 5509; PC64LE-NEXT: xscvdpsxws 0, 0 5510; PC64LE-NEXT: xscvdpsxws 1, 1 5511; PC64LE-NEXT: mffprwz 3, 0 5512; PC64LE-NEXT: mffprwz 4, 1 5513; PC64LE-NEXT: mtfprwz 0, 3 5514; PC64LE-NEXT: mtfprwz 1, 4 5515; PC64LE-NEXT: xxmrghw 34, 1, 0 5516; PC64LE-NEXT: blr 5517; 5518; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f32: 5519; PC64LE9: # %bb.0: # %entry 5520; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 5521; PC64LE9-NEXT: xxswapd 1, 34 5522; PC64LE9-NEXT: xscvspdpn 0, 0 5523; PC64LE9-NEXT: xscvspdpn 1, 1 5524; PC64LE9-NEXT: xscvdpsxws 0, 0 5525; PC64LE9-NEXT: xscvdpsxws 1, 1 5526; PC64LE9-NEXT: mffprwz 3, 0 5527; PC64LE9-NEXT: mtfprwz 0, 3 5528; PC64LE9-NEXT: mffprwz 3, 1 5529; PC64LE9-NEXT: mtfprwz 1, 3 5530; PC64LE9-NEXT: xxmrghw 34, 1, 0 5531; PC64LE9-NEXT: blr 5532entry: 5533 %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32( 5534 <2 x float> %x, 5535 metadata !"fpexcept.strict") #0 5536 ret <2 x i32> %result 5537} 5538 5539define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32(<3 x float> %x) #0 { 5540; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f32: 5541; PC64LE: # %bb.0: # %entry 5542; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 5543; PC64LE-NEXT: xxswapd 1, 34 5544; PC64LE-NEXT: addis 3, 2, .LCPI97_0@toc@ha 5545; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 5546; PC64LE-NEXT: addi 3, 3, .LCPI97_0@toc@l 5547; PC64LE-NEXT: lvx 2, 0, 3 5548; PC64LE-NEXT: xscvspdpn 0, 0 5549; PC64LE-NEXT: xscvspdpn 1, 1 5550; PC64LE-NEXT: xscvspdpn 2, 2 5551; PC64LE-NEXT: xscvdpsxws 0, 0 5552; PC64LE-NEXT: xscvdpsxws 1, 1 5553; PC64LE-NEXT: xscvdpsxws 2, 2 5554; PC64LE-NEXT: mffprwz 4, 0 5555; PC64LE-NEXT: mffprwz 5, 1 5556; PC64LE-NEXT: mtfprwz 0, 4 5557; PC64LE-NEXT: mtfprwz 1, 5 5558; PC64LE-NEXT: mffprwz 4, 2 5559; PC64LE-NEXT: xxmrghw 35, 1, 0 5560; PC64LE-NEXT: mtvsrwz 36, 4 5561; PC64LE-NEXT: vperm 2, 4, 3, 2 5562; PC64LE-NEXT: blr 5563; 5564; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f32: 5565; PC64LE9: # %bb.0: # %entry 5566; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 5567; PC64LE9-NEXT: xxswapd 1, 34 5568; PC64LE9-NEXT: xscvspdpn 0, 0 5569; PC64LE9-NEXT: xscvspdpn 1, 1 5570; PC64LE9-NEXT: xscvdpsxws 0, 0 5571; PC64LE9-NEXT: xscvdpsxws 1, 1 5572; PC64LE9-NEXT: mffprwz 3, 0 5573; PC64LE9-NEXT: mtfprwz 0, 3 5574; PC64LE9-NEXT: mffprwz 3, 1 5575; PC64LE9-NEXT: mtfprwz 1, 3 5576; PC64LE9-NEXT: addis 3, 2, .LCPI97_0@toc@ha 5577; PC64LE9-NEXT: xxmrghw 35, 1, 0 5578; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 5579; PC64LE9-NEXT: addi 3, 3, .LCPI97_0@toc@l 5580; PC64LE9-NEXT: lxv 36, 0(3) 5581; PC64LE9-NEXT: xscvspdpn 0, 0 5582; PC64LE9-NEXT: xscvdpsxws 0, 0 5583; PC64LE9-NEXT: mffprwz 3, 0 5584; PC64LE9-NEXT: mtvsrwz 34, 3 5585; PC64LE9-NEXT: vperm 2, 2, 3, 4 5586; PC64LE9-NEXT: blr 5587entry: 5588 %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32( 5589 <3 x float> %x, 5590 metadata !"fpexcept.strict") #0 5591 ret <3 x i32> %result 5592} 5593 5594define <4 x i32> @constrained_vector_fptosi_v4i32_v4f32(<4 x float> %x) #0 { 5595; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f32: 5596; PC64LE: # %bb.0: # %entry 5597; PC64LE-NEXT: xvcvspsxws 34, 34 5598; PC64LE-NEXT: blr 5599; 5600; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f32: 5601; PC64LE9: # %bb.0: # %entry 5602; PC64LE9-NEXT: xvcvspsxws 34, 34 5603; PC64LE9-NEXT: blr 5604entry: 5605 %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32( 5606 <4 x float> %x, 5607 metadata !"fpexcept.strict") #0 5608 ret <4 x i32> %result 5609} 5610 5611define <1 x i64> @constrained_vector_fptosi_v1i64_v1f32(<1 x float> %x) #0 { 5612; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f32: 5613; PC64LE: # %bb.0: # %entry 5614; PC64LE-NEXT: xscvdpsxds 0, 1 5615; PC64LE-NEXT: mffprd 3, 0 5616; PC64LE-NEXT: blr 5617; 5618; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f32: 5619; PC64LE9: # %bb.0: # %entry 5620; PC64LE9-NEXT: xscvdpsxds 0, 1 5621; PC64LE9-NEXT: mffprd 3, 0 5622; PC64LE9-NEXT: blr 5623entry: 5624 %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32( 5625 <1 x float> %x, 5626 metadata !"fpexcept.strict") #0 5627 ret <1 x i64> %result 5628} 5629 5630define <2 x i64> @constrained_vector_fptosi_v2i64_v2f32(<2 x float> %x) #0 { 5631; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f32: 5632; PC64LE: # %bb.0: # %entry 5633; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 5634; PC64LE-NEXT: xxswapd 1, 34 5635; PC64LE-NEXT: xscvspdpn 0, 0 5636; PC64LE-NEXT: xscvspdpn 1, 1 5637; PC64LE-NEXT: xscvdpsxds 0, 0 5638; PC64LE-NEXT: xscvdpsxds 1, 1 5639; PC64LE-NEXT: mffprd 3, 0 5640; PC64LE-NEXT: mffprd 4, 1 5641; PC64LE-NEXT: mtfprd 0, 3 5642; PC64LE-NEXT: mtfprd 1, 4 5643; PC64LE-NEXT: xxmrghd 34, 1, 0 5644; PC64LE-NEXT: blr 5645; 5646; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f32: 5647; PC64LE9: # %bb.0: # %entry 5648; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 5649; PC64LE9-NEXT: xscvspdpn 0, 0 5650; PC64LE9-NEXT: xscvdpsxds 0, 0 5651; PC64LE9-NEXT: mffprd 3, 0 5652; PC64LE9-NEXT: xxswapd 0, 34 5653; PC64LE9-NEXT: xscvspdpn 0, 0 5654; PC64LE9-NEXT: xscvdpsxds 0, 0 5655; PC64LE9-NEXT: mffprd 4, 0 5656; PC64LE9-NEXT: mtvsrdd 34, 4, 3 5657; PC64LE9-NEXT: blr 5658entry: 5659 %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32( 5660 <2 x float> %x, 5661 metadata !"fpexcept.strict") #0 5662 ret <2 x i64> %result 5663} 5664 5665define <3 x i64> @constrained_vector_fptosi_v3i64_v3f32(<3 x float> %x) #0 { 5666; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f32: 5667; PC64LE: # %bb.0: # %entry 5668; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 5669; PC64LE-NEXT: xxswapd 1, 34 5670; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 5671; PC64LE-NEXT: xscvspdpn 0, 0 5672; PC64LE-NEXT: xscvspdpn 1, 1 5673; PC64LE-NEXT: xscvspdpn 2, 2 5674; PC64LE-NEXT: xscvdpsxds 0, 0 5675; PC64LE-NEXT: xscvdpsxds 1, 1 5676; PC64LE-NEXT: xscvdpsxds 2, 2 5677; PC64LE-NEXT: mffprd 3, 0 5678; PC64LE-NEXT: mffprd 4, 1 5679; PC64LE-NEXT: mffprd 5, 2 5680; PC64LE-NEXT: blr 5681; 5682; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f32: 5683; PC64LE9: # %bb.0: # %entry 5684; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 5685; PC64LE9-NEXT: xscvspdpn 0, 0 5686; PC64LE9-NEXT: xscvdpsxds 0, 0 5687; PC64LE9-NEXT: mffprd 3, 0 5688; PC64LE9-NEXT: xxswapd 0, 34 5689; PC64LE9-NEXT: xscvspdpn 0, 0 5690; PC64LE9-NEXT: xscvdpsxds 0, 0 5691; PC64LE9-NEXT: mffprd 4, 0 5692; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 5693; PC64LE9-NEXT: xscvspdpn 0, 0 5694; PC64LE9-NEXT: xscvdpsxds 0, 0 5695; PC64LE9-NEXT: mffprd 5, 0 5696; PC64LE9-NEXT: blr 5697entry: 5698 %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32( 5699 <3 x float> %x, 5700 metadata !"fpexcept.strict") #0 5701 ret <3 x i64> %result 5702} 5703 5704define <4 x i64> @constrained_vector_fptosi_v4i64_v4f32(<4 x float> %x) #0 { 5705; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f32: 5706; PC64LE: # %bb.0: # %entry 5707; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 5708; PC64LE-NEXT: xscvspdpn 1, 34 5709; PC64LE-NEXT: xxswapd 2, 34 5710; PC64LE-NEXT: xxsldwi 3, 34, 34, 1 5711; PC64LE-NEXT: xscvspdpn 0, 0 5712; PC64LE-NEXT: xscvspdpn 2, 2 5713; PC64LE-NEXT: xscvspdpn 3, 3 5714; PC64LE-NEXT: xscvdpsxds 1, 1 5715; PC64LE-NEXT: xscvdpsxds 0, 0 5716; PC64LE-NEXT: xscvdpsxds 2, 2 5717; PC64LE-NEXT: xscvdpsxds 3, 3 5718; PC64LE-NEXT: mffprd 3, 1 5719; PC64LE-NEXT: mtfprd 1, 3 5720; PC64LE-NEXT: mffprd 3, 0 5721; PC64LE-NEXT: mffprd 4, 2 5722; PC64LE-NEXT: mtfprd 0, 3 5723; PC64LE-NEXT: mffprd 3, 3 5724; PC64LE-NEXT: mtfprd 2, 4 5725; PC64LE-NEXT: mtfprd 3, 3 5726; PC64LE-NEXT: xxmrghd 34, 2, 0 5727; PC64LE-NEXT: xxmrghd 35, 1, 3 5728; PC64LE-NEXT: blr 5729; 5730; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f32: 5731; PC64LE9: # %bb.0: # %entry 5732; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 5733; PC64LE9-NEXT: xscvspdpn 0, 0 5734; PC64LE9-NEXT: xscvdpsxds 0, 0 5735; PC64LE9-NEXT: mffprd 3, 0 5736; PC64LE9-NEXT: xxswapd 0, 34 5737; PC64LE9-NEXT: xscvspdpn 0, 0 5738; PC64LE9-NEXT: xscvdpsxds 0, 0 5739; PC64LE9-NEXT: mffprd 4, 0 5740; PC64LE9-NEXT: xscvspdpn 0, 34 5741; PC64LE9-NEXT: mtvsrdd 36, 4, 3 5742; PC64LE9-NEXT: xscvdpsxds 0, 0 5743; PC64LE9-NEXT: mffprd 3, 0 5744; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 5745; PC64LE9-NEXT: vmr 2, 4 5746; PC64LE9-NEXT: xscvspdpn 0, 0 5747; PC64LE9-NEXT: xscvdpsxds 0, 0 5748; PC64LE9-NEXT: mffprd 4, 0 5749; PC64LE9-NEXT: mtvsrdd 35, 3, 4 5750; PC64LE9-NEXT: blr 5751entry: 5752 %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32( 5753 <4 x float> %x, 5754 metadata !"fpexcept.strict") #0 5755 ret <4 x i64> %result 5756} 5757 5758define <1 x i32> @constrained_vector_fptosi_v1i32_v1f64(<1 x double> %x) #0 { 5759; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f64: 5760; PC64LE: # %bb.0: # %entry 5761; PC64LE-NEXT: xscvdpsxws 0, 1 5762; PC64LE-NEXT: mffprwz 3, 0 5763; PC64LE-NEXT: blr 5764; 5765; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f64: 5766; PC64LE9: # %bb.0: # %entry 5767; PC64LE9-NEXT: xscvdpsxws 0, 1 5768; PC64LE9-NEXT: mffprwz 3, 0 5769; PC64LE9-NEXT: blr 5770entry: 5771 %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64( 5772 <1 x double> %x, 5773 metadata !"fpexcept.strict") #0 5774 ret <1 x i32> %result 5775} 5776 5777 5778define <2 x i32> @constrained_vector_fptosi_v2i32_v2f64(<2 x double> %x) #0 { 5779; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f64: 5780; PC64LE: # %bb.0: # %entry 5781; PC64LE-NEXT: xxswapd 0, 34 5782; PC64LE-NEXT: xscvdpsxws 1, 34 5783; PC64LE-NEXT: xscvdpsxws 0, 0 5784; PC64LE-NEXT: mffprwz 3, 1 5785; PC64LE-NEXT: mffprwz 4, 0 5786; PC64LE-NEXT: mtfprwz 0, 3 5787; PC64LE-NEXT: mtfprwz 1, 4 5788; PC64LE-NEXT: xxmrghw 34, 0, 1 5789; PC64LE-NEXT: blr 5790; 5791; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f64: 5792; PC64LE9: # %bb.0: # %entry 5793; PC64LE9-NEXT: xxswapd 1, 34 5794; PC64LE9-NEXT: xscvdpsxws 0, 34 5795; PC64LE9-NEXT: xscvdpsxws 1, 1 5796; PC64LE9-NEXT: mffprwz 3, 0 5797; PC64LE9-NEXT: mtfprwz 0, 3 5798; PC64LE9-NEXT: mffprwz 3, 1 5799; PC64LE9-NEXT: mtfprwz 1, 3 5800; PC64LE9-NEXT: xxmrghw 34, 0, 1 5801; PC64LE9-NEXT: blr 5802entry: 5803 %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64( 5804 <2 x double> %x, 5805 metadata !"fpexcept.strict") #0 5806 ret <2 x i32> %result 5807} 5808 5809define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64(<3 x double> %x) #0 { 5810; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f64: 5811; PC64LE: # %bb.0: # %entry 5812; PC64LE-NEXT: xscvdpsxws 0, 1 5813; PC64LE-NEXT: addis 3, 2, .LCPI105_0@toc@ha 5814; PC64LE-NEXT: xscvdpsxws 1, 2 5815; PC64LE-NEXT: addi 3, 3, .LCPI105_0@toc@l 5816; PC64LE-NEXT: xscvdpsxws 2, 3 5817; PC64LE-NEXT: lvx 2, 0, 3 5818; PC64LE-NEXT: mffprwz 4, 0 5819; PC64LE-NEXT: mffprwz 5, 1 5820; PC64LE-NEXT: mtfprwz 0, 4 5821; PC64LE-NEXT: mtfprwz 1, 5 5822; PC64LE-NEXT: mffprwz 4, 2 5823; PC64LE-NEXT: xxmrghw 35, 1, 0 5824; PC64LE-NEXT: mtvsrwz 36, 4 5825; PC64LE-NEXT: vperm 2, 4, 3, 2 5826; PC64LE-NEXT: blr 5827; 5828; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f64: 5829; PC64LE9: # %bb.0: # %entry 5830; PC64LE9-NEXT: xscvdpsxws 0, 1 5831; PC64LE9-NEXT: xscvdpsxws 1, 2 5832; PC64LE9-NEXT: mffprwz 3, 0 5833; PC64LE9-NEXT: mtfprwz 0, 3 5834; PC64LE9-NEXT: mffprwz 3, 1 5835; PC64LE9-NEXT: mtfprwz 1, 3 5836; PC64LE9-NEXT: addis 3, 2, .LCPI105_0@toc@ha 5837; PC64LE9-NEXT: xxmrghw 34, 1, 0 5838; PC64LE9-NEXT: xscvdpsxws 0, 3 5839; PC64LE9-NEXT: addi 3, 3, .LCPI105_0@toc@l 5840; PC64LE9-NEXT: lxv 35, 0(3) 5841; PC64LE9-NEXT: mffprwz 3, 0 5842; PC64LE9-NEXT: mtvsrwz 36, 3 5843; PC64LE9-NEXT: vperm 2, 4, 2, 3 5844; PC64LE9-NEXT: blr 5845entry: 5846 %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64( 5847 <3 x double> %x, 5848 metadata !"fpexcept.strict") #0 5849 ret <3 x i32> %result 5850} 5851 5852define <4 x i32> @constrained_vector_fptosi_v4i32_v4f64(<4 x double> %x) #0 { 5853; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f64: 5854; PC64LE: # %bb.0: # %entry 5855; PC64LE-NEXT: xxswapd 0, 34 5856; PC64LE-NEXT: xxswapd 2, 35 5857; PC64LE-NEXT: xscvdpsxws 1, 34 5858; PC64LE-NEXT: xscvdpsxws 3, 35 5859; PC64LE-NEXT: xscvdpsxws 0, 0 5860; PC64LE-NEXT: xscvdpsxws 2, 2 5861; PC64LE-NEXT: mffprwz 3, 1 5862; PC64LE-NEXT: mffprwz 4, 3 5863; PC64LE-NEXT: mffprwz 5, 0 5864; PC64LE-NEXT: mffprwz 6, 2 5865; PC64LE-NEXT: rldimi 5, 3, 32, 0 5866; PC64LE-NEXT: rldimi 6, 4, 32, 0 5867; PC64LE-NEXT: mtfprd 0, 5 5868; PC64LE-NEXT: mtfprd 1, 6 5869; PC64LE-NEXT: xxmrghd 34, 1, 0 5870; PC64LE-NEXT: blr 5871; 5872; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f64: 5873; PC64LE9: # %bb.0: # %entry 5874; PC64LE9-NEXT: xscvdpsxws 0, 34 5875; PC64LE9-NEXT: mffprwz 3, 0 5876; PC64LE9-NEXT: xxswapd 0, 34 5877; PC64LE9-NEXT: xscvdpsxws 0, 0 5878; PC64LE9-NEXT: mffprwz 4, 0 5879; PC64LE9-NEXT: xscvdpsxws 0, 35 5880; PC64LE9-NEXT: rldimi 4, 3, 32, 0 5881; PC64LE9-NEXT: mffprwz 3, 0 5882; PC64LE9-NEXT: xxswapd 0, 35 5883; PC64LE9-NEXT: xscvdpsxws 0, 0 5884; PC64LE9-NEXT: mffprwz 5, 0 5885; PC64LE9-NEXT: rldimi 5, 3, 32, 0 5886; PC64LE9-NEXT: mtvsrdd 34, 5, 4 5887; PC64LE9-NEXT: blr 5888entry: 5889 %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64( 5890 <4 x double> %x, 5891 metadata !"fpexcept.strict") #0 5892 ret <4 x i32> %result 5893} 5894 5895define <1 x i64> @constrained_vector_fptosi_v1i64_v1f64(<1 x double> %x) #0 { 5896; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f64: 5897; PC64LE: # %bb.0: # %entry 5898; PC64LE-NEXT: xscvdpsxds 0, 1 5899; PC64LE-NEXT: mffprd 3, 0 5900; PC64LE-NEXT: blr 5901; 5902; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f64: 5903; PC64LE9: # %bb.0: # %entry 5904; PC64LE9-NEXT: xscvdpsxds 0, 1 5905; PC64LE9-NEXT: mffprd 3, 0 5906; PC64LE9-NEXT: blr 5907entry: 5908 %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64( 5909 <1 x double> %x, 5910 metadata !"fpexcept.strict") #0 5911 ret <1 x i64> %result 5912} 5913 5914define <2 x i64> @constrained_vector_fptosi_v2i64_v2f64(<2 x double> %x) #0 { 5915; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f64: 5916; PC64LE: # %bb.0: # %entry 5917; PC64LE-NEXT: xvcvdpsxds 34, 34 5918; PC64LE-NEXT: blr 5919; 5920; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f64: 5921; PC64LE9: # %bb.0: # %entry 5922; PC64LE9-NEXT: xvcvdpsxds 34, 34 5923; PC64LE9-NEXT: blr 5924entry: 5925 %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64( 5926 <2 x double> %x, 5927 metadata !"fpexcept.strict") #0 5928 ret <2 x i64> %result 5929} 5930 5931define <3 x i64> @constrained_vector_fptosi_v3i64_v3f64(<3 x double> %x) #0 { 5932; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f64: 5933; PC64LE: # %bb.0: # %entry 5934; PC64LE-NEXT: xscvdpsxds 0, 1 5935; PC64LE-NEXT: xscvdpsxds 1, 2 5936; PC64LE-NEXT: xscvdpsxds 2, 3 5937; PC64LE-NEXT: mffprd 3, 0 5938; PC64LE-NEXT: mffprd 4, 1 5939; PC64LE-NEXT: mffprd 5, 2 5940; PC64LE-NEXT: blr 5941; 5942; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f64: 5943; PC64LE9: # %bb.0: # %entry 5944; PC64LE9-NEXT: xscvdpsxds 0, 1 5945; PC64LE9-NEXT: mffprd 3, 0 5946; PC64LE9-NEXT: xscvdpsxds 0, 2 5947; PC64LE9-NEXT: mffprd 4, 0 5948; PC64LE9-NEXT: xscvdpsxds 0, 3 5949; PC64LE9-NEXT: mffprd 5, 0 5950; PC64LE9-NEXT: blr 5951entry: 5952 %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64( 5953 <3 x double> %x, 5954 metadata !"fpexcept.strict") #0 5955 ret <3 x i64> %result 5956} 5957 5958define <4 x i64> @constrained_vector_fptosi_v4i64_v4f64(<4 x double> %x) #0 { 5959; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f64: 5960; PC64LE: # %bb.0: # %entry 5961; PC64LE-NEXT: xvcvdpsxds 35, 35 5962; PC64LE-NEXT: xvcvdpsxds 34, 34 5963; PC64LE-NEXT: blr 5964; 5965; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f64: 5966; PC64LE9: # %bb.0: # %entry 5967; PC64LE9-NEXT: xvcvdpsxds 35, 35 5968; PC64LE9-NEXT: xvcvdpsxds 34, 34 5969; PC64LE9-NEXT: blr 5970entry: 5971 %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64( 5972 <4 x double> %x, 5973 metadata !"fpexcept.strict") #0 5974 ret <4 x i64> %result 5975} 5976 5977define <1 x i32> @constrained_vector_fptoui_v1i32_v1f32(<1 x float> %x) #0 { 5978; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f32: 5979; PC64LE: # %bb.0: # %entry 5980; PC64LE-NEXT: xscvdpuxws 0, 1 5981; PC64LE-NEXT: mffprwz 3, 0 5982; PC64LE-NEXT: blr 5983; 5984; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f32: 5985; PC64LE9: # %bb.0: # %entry 5986; PC64LE9-NEXT: xscvdpuxws 0, 1 5987; PC64LE9-NEXT: mffprwz 3, 0 5988; PC64LE9-NEXT: blr 5989entry: 5990 %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32( 5991 <1 x float> %x, 5992 metadata !"fpexcept.strict") #0 5993 ret <1 x i32> %result 5994} 5995 5996define <2 x i32> @constrained_vector_fptoui_v2i32_v2f32(<2 x float> %x) #0 { 5997; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f32: 5998; PC64LE: # %bb.0: # %entry 5999; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 6000; PC64LE-NEXT: xxswapd 1, 34 6001; PC64LE-NEXT: xscvspdpn 0, 0 6002; PC64LE-NEXT: xscvspdpn 1, 1 6003; PC64LE-NEXT: xscvdpuxws 0, 0 6004; PC64LE-NEXT: xscvdpuxws 1, 1 6005; PC64LE-NEXT: mffprwz 3, 0 6006; PC64LE-NEXT: mffprwz 4, 1 6007; PC64LE-NEXT: mtfprwz 0, 3 6008; PC64LE-NEXT: mtfprwz 1, 4 6009; PC64LE-NEXT: xxmrghw 34, 1, 0 6010; PC64LE-NEXT: blr 6011; 6012; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f32: 6013; PC64LE9: # %bb.0: # %entry 6014; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 6015; PC64LE9-NEXT: xxswapd 1, 34 6016; PC64LE9-NEXT: xscvspdpn 0, 0 6017; PC64LE9-NEXT: xscvspdpn 1, 1 6018; PC64LE9-NEXT: xscvdpuxws 0, 0 6019; PC64LE9-NEXT: xscvdpuxws 1, 1 6020; PC64LE9-NEXT: mffprwz 3, 0 6021; PC64LE9-NEXT: mtfprwz 0, 3 6022; PC64LE9-NEXT: mffprwz 3, 1 6023; PC64LE9-NEXT: mtfprwz 1, 3 6024; PC64LE9-NEXT: xxmrghw 34, 1, 0 6025; PC64LE9-NEXT: blr 6026entry: 6027 %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32( 6028 <2 x float> %x, 6029 metadata !"fpexcept.strict") #0 6030 ret <2 x i32> %result 6031} 6032 6033define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32(<3 x float> %x) #0 { 6034; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f32: 6035; PC64LE: # %bb.0: # %entry 6036; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 6037; PC64LE-NEXT: xxswapd 1, 34 6038; PC64LE-NEXT: addis 3, 2, .LCPI113_0@toc@ha 6039; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 6040; PC64LE-NEXT: addi 3, 3, .LCPI113_0@toc@l 6041; PC64LE-NEXT: lvx 2, 0, 3 6042; PC64LE-NEXT: xscvspdpn 0, 0 6043; PC64LE-NEXT: xscvspdpn 1, 1 6044; PC64LE-NEXT: xscvspdpn 2, 2 6045; PC64LE-NEXT: xscvdpuxws 0, 0 6046; PC64LE-NEXT: xscvdpuxws 1, 1 6047; PC64LE-NEXT: xscvdpuxws 2, 2 6048; PC64LE-NEXT: mffprwz 4, 0 6049; PC64LE-NEXT: mffprwz 5, 1 6050; PC64LE-NEXT: mtfprwz 0, 4 6051; PC64LE-NEXT: mtfprwz 1, 5 6052; PC64LE-NEXT: mffprwz 4, 2 6053; PC64LE-NEXT: xxmrghw 35, 1, 0 6054; PC64LE-NEXT: mtvsrwz 36, 4 6055; PC64LE-NEXT: vperm 2, 4, 3, 2 6056; PC64LE-NEXT: blr 6057; 6058; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f32: 6059; PC64LE9: # %bb.0: # %entry 6060; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 6061; PC64LE9-NEXT: xxswapd 1, 34 6062; PC64LE9-NEXT: xscvspdpn 0, 0 6063; PC64LE9-NEXT: xscvspdpn 1, 1 6064; PC64LE9-NEXT: xscvdpuxws 0, 0 6065; PC64LE9-NEXT: xscvdpuxws 1, 1 6066; PC64LE9-NEXT: mffprwz 3, 0 6067; PC64LE9-NEXT: mtfprwz 0, 3 6068; PC64LE9-NEXT: mffprwz 3, 1 6069; PC64LE9-NEXT: mtfprwz 1, 3 6070; PC64LE9-NEXT: addis 3, 2, .LCPI113_0@toc@ha 6071; PC64LE9-NEXT: xxmrghw 35, 1, 0 6072; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 6073; PC64LE9-NEXT: addi 3, 3, .LCPI113_0@toc@l 6074; PC64LE9-NEXT: lxv 36, 0(3) 6075; PC64LE9-NEXT: xscvspdpn 0, 0 6076; PC64LE9-NEXT: xscvdpuxws 0, 0 6077; PC64LE9-NEXT: mffprwz 3, 0 6078; PC64LE9-NEXT: mtvsrwz 34, 3 6079; PC64LE9-NEXT: vperm 2, 2, 3, 4 6080; PC64LE9-NEXT: blr 6081entry: 6082 %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32( 6083 <3 x float> %x, 6084 metadata !"fpexcept.strict") #0 6085 ret <3 x i32> %result 6086} 6087 6088define <4 x i32> @constrained_vector_fptoui_v4i32_v4f32(<4 x float> %x) #0 { 6089; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f32: 6090; PC64LE: # %bb.0: # %entry 6091; PC64LE-NEXT: xvcvspuxws 34, 34 6092; PC64LE-NEXT: blr 6093; 6094; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f32: 6095; PC64LE9: # %bb.0: # %entry 6096; PC64LE9-NEXT: xvcvspuxws 34, 34 6097; PC64LE9-NEXT: blr 6098entry: 6099 %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32( 6100 <4 x float> %x, 6101 metadata !"fpexcept.strict") #0 6102 ret <4 x i32> %result 6103} 6104 6105define <1 x i64> @constrained_vector_fptoui_v1i64_v1f32(<1 x float> %x) #0 { 6106; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f32: 6107; PC64LE: # %bb.0: # %entry 6108; PC64LE-NEXT: xscvdpuxds 0, 1 6109; PC64LE-NEXT: mffprd 3, 0 6110; PC64LE-NEXT: blr 6111; 6112; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f32: 6113; PC64LE9: # %bb.0: # %entry 6114; PC64LE9-NEXT: xscvdpuxds 0, 1 6115; PC64LE9-NEXT: mffprd 3, 0 6116; PC64LE9-NEXT: blr 6117entry: 6118 %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32( 6119 <1 x float> %x, 6120 metadata !"fpexcept.strict") #0 6121 ret <1 x i64> %result 6122} 6123 6124define <2 x i64> @constrained_vector_fptoui_v2i64_v2f32(<2 x float> %x) #0 { 6125; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f32: 6126; PC64LE: # %bb.0: # %entry 6127; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 6128; PC64LE-NEXT: xxswapd 1, 34 6129; PC64LE-NEXT: xscvspdpn 0, 0 6130; PC64LE-NEXT: xscvspdpn 1, 1 6131; PC64LE-NEXT: xscvdpuxds 0, 0 6132; PC64LE-NEXT: xscvdpuxds 1, 1 6133; PC64LE-NEXT: mffprd 3, 0 6134; PC64LE-NEXT: mffprd 4, 1 6135; PC64LE-NEXT: mtfprd 0, 3 6136; PC64LE-NEXT: mtfprd 1, 4 6137; PC64LE-NEXT: xxmrghd 34, 1, 0 6138; PC64LE-NEXT: blr 6139; 6140; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f32: 6141; PC64LE9: # %bb.0: # %entry 6142; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 6143; PC64LE9-NEXT: xscvspdpn 0, 0 6144; PC64LE9-NEXT: xscvdpuxds 0, 0 6145; PC64LE9-NEXT: mffprd 3, 0 6146; PC64LE9-NEXT: xxswapd 0, 34 6147; PC64LE9-NEXT: xscvspdpn 0, 0 6148; PC64LE9-NEXT: xscvdpuxds 0, 0 6149; PC64LE9-NEXT: mffprd 4, 0 6150; PC64LE9-NEXT: mtvsrdd 34, 4, 3 6151; PC64LE9-NEXT: blr 6152entry: 6153 %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32( 6154 <2 x float> %x, 6155 metadata !"fpexcept.strict") #0 6156 ret <2 x i64> %result 6157} 6158 6159define <3 x i64> @constrained_vector_fptoui_v3i64_v3f32(<3 x float> %x) #0 { 6160; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f32: 6161; PC64LE: # %bb.0: # %entry 6162; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 6163; PC64LE-NEXT: xxswapd 1, 34 6164; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 6165; PC64LE-NEXT: xscvspdpn 0, 0 6166; PC64LE-NEXT: xscvspdpn 1, 1 6167; PC64LE-NEXT: xscvspdpn 2, 2 6168; PC64LE-NEXT: xscvdpuxds 0, 0 6169; PC64LE-NEXT: xscvdpuxds 1, 1 6170; PC64LE-NEXT: xscvdpuxds 2, 2 6171; PC64LE-NEXT: mffprd 3, 0 6172; PC64LE-NEXT: mffprd 4, 1 6173; PC64LE-NEXT: mffprd 5, 2 6174; PC64LE-NEXT: blr 6175; 6176; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f32: 6177; PC64LE9: # %bb.0: # %entry 6178; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 6179; PC64LE9-NEXT: xscvspdpn 0, 0 6180; PC64LE9-NEXT: xscvdpuxds 0, 0 6181; PC64LE9-NEXT: mffprd 3, 0 6182; PC64LE9-NEXT: xxswapd 0, 34 6183; PC64LE9-NEXT: xscvspdpn 0, 0 6184; PC64LE9-NEXT: xscvdpuxds 0, 0 6185; PC64LE9-NEXT: mffprd 4, 0 6186; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 6187; PC64LE9-NEXT: xscvspdpn 0, 0 6188; PC64LE9-NEXT: xscvdpuxds 0, 0 6189; PC64LE9-NEXT: mffprd 5, 0 6190; PC64LE9-NEXT: blr 6191entry: 6192 %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32( 6193 <3 x float> %x, 6194 metadata !"fpexcept.strict") #0 6195 ret <3 x i64> %result 6196} 6197 6198define <4 x i64> @constrained_vector_fptoui_v4i64_v4f32(<4 x float> %x) #0 { 6199; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f32: 6200; PC64LE: # %bb.0: # %entry 6201; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 6202; PC64LE-NEXT: xscvspdpn 1, 34 6203; PC64LE-NEXT: xxswapd 2, 34 6204; PC64LE-NEXT: xxsldwi 3, 34, 34, 1 6205; PC64LE-NEXT: xscvspdpn 0, 0 6206; PC64LE-NEXT: xscvspdpn 2, 2 6207; PC64LE-NEXT: xscvspdpn 3, 3 6208; PC64LE-NEXT: xscvdpuxds 1, 1 6209; PC64LE-NEXT: xscvdpuxds 0, 0 6210; PC64LE-NEXT: xscvdpuxds 2, 2 6211; PC64LE-NEXT: xscvdpuxds 3, 3 6212; PC64LE-NEXT: mffprd 3, 1 6213; PC64LE-NEXT: mtfprd 1, 3 6214; PC64LE-NEXT: mffprd 3, 0 6215; PC64LE-NEXT: mffprd 4, 2 6216; PC64LE-NEXT: mtfprd 0, 3 6217; PC64LE-NEXT: mffprd 3, 3 6218; PC64LE-NEXT: mtfprd 2, 4 6219; PC64LE-NEXT: mtfprd 3, 3 6220; PC64LE-NEXT: xxmrghd 34, 2, 0 6221; PC64LE-NEXT: xxmrghd 35, 1, 3 6222; PC64LE-NEXT: blr 6223; 6224; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f32: 6225; PC64LE9: # %bb.0: # %entry 6226; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 6227; PC64LE9-NEXT: xscvspdpn 0, 0 6228; PC64LE9-NEXT: xscvdpuxds 0, 0 6229; PC64LE9-NEXT: mffprd 3, 0 6230; PC64LE9-NEXT: xxswapd 0, 34 6231; PC64LE9-NEXT: xscvspdpn 0, 0 6232; PC64LE9-NEXT: xscvdpuxds 0, 0 6233; PC64LE9-NEXT: mffprd 4, 0 6234; PC64LE9-NEXT: xscvspdpn 0, 34 6235; PC64LE9-NEXT: mtvsrdd 36, 4, 3 6236; PC64LE9-NEXT: xscvdpuxds 0, 0 6237; PC64LE9-NEXT: mffprd 3, 0 6238; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 6239; PC64LE9-NEXT: vmr 2, 4 6240; PC64LE9-NEXT: xscvspdpn 0, 0 6241; PC64LE9-NEXT: xscvdpuxds 0, 0 6242; PC64LE9-NEXT: mffprd 4, 0 6243; PC64LE9-NEXT: mtvsrdd 35, 3, 4 6244; PC64LE9-NEXT: blr 6245entry: 6246 %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32( 6247 <4 x float> %x, 6248 metadata !"fpexcept.strict") #0 6249 ret <4 x i64> %result 6250} 6251 6252define <1 x i32> @constrained_vector_fptoui_v1i32_v1f64(<1 x double> %x) #0 { 6253; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f64: 6254; PC64LE: # %bb.0: # %entry 6255; PC64LE-NEXT: xscvdpuxws 0, 1 6256; PC64LE-NEXT: mffprwz 3, 0 6257; PC64LE-NEXT: blr 6258; 6259; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f64: 6260; PC64LE9: # %bb.0: # %entry 6261; PC64LE9-NEXT: xscvdpuxws 0, 1 6262; PC64LE9-NEXT: mffprwz 3, 0 6263; PC64LE9-NEXT: blr 6264entry: 6265 %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64( 6266 <1 x double> %x, 6267 metadata !"fpexcept.strict") #0 6268 ret <1 x i32> %result 6269} 6270 6271define <2 x i32> @constrained_vector_fptoui_v2i32_v2f64(<2 x double> %x) #0 { 6272; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f64: 6273; PC64LE: # %bb.0: # %entry 6274; PC64LE-NEXT: xxswapd 0, 34 6275; PC64LE-NEXT: xscvdpuxws 1, 34 6276; PC64LE-NEXT: xscvdpuxws 0, 0 6277; PC64LE-NEXT: mffprwz 3, 1 6278; PC64LE-NEXT: mffprwz 4, 0 6279; PC64LE-NEXT: mtfprwz 0, 3 6280; PC64LE-NEXT: mtfprwz 1, 4 6281; PC64LE-NEXT: xxmrghw 34, 0, 1 6282; PC64LE-NEXT: blr 6283; 6284; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f64: 6285; PC64LE9: # %bb.0: # %entry 6286; PC64LE9-NEXT: xxswapd 1, 34 6287; PC64LE9-NEXT: xscvdpuxws 0, 34 6288; PC64LE9-NEXT: xscvdpuxws 1, 1 6289; PC64LE9-NEXT: mffprwz 3, 0 6290; PC64LE9-NEXT: mtfprwz 0, 3 6291; PC64LE9-NEXT: mffprwz 3, 1 6292; PC64LE9-NEXT: mtfprwz 1, 3 6293; PC64LE9-NEXT: xxmrghw 34, 0, 1 6294; PC64LE9-NEXT: blr 6295entry: 6296 %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64( 6297 <2 x double> %x, 6298 metadata !"fpexcept.strict") #0 6299 ret <2 x i32> %result 6300} 6301 6302define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64(<3 x double> %x) #0 { 6303; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f64: 6304; PC64LE: # %bb.0: # %entry 6305; PC64LE-NEXT: xscvdpuxws 0, 1 6306; PC64LE-NEXT: addis 3, 2, .LCPI121_0@toc@ha 6307; PC64LE-NEXT: xscvdpuxws 1, 2 6308; PC64LE-NEXT: addi 3, 3, .LCPI121_0@toc@l 6309; PC64LE-NEXT: xscvdpuxws 2, 3 6310; PC64LE-NEXT: lvx 2, 0, 3 6311; PC64LE-NEXT: mffprwz 4, 0 6312; PC64LE-NEXT: mffprwz 5, 1 6313; PC64LE-NEXT: mtfprwz 0, 4 6314; PC64LE-NEXT: mtfprwz 1, 5 6315; PC64LE-NEXT: mffprwz 4, 2 6316; PC64LE-NEXT: xxmrghw 35, 1, 0 6317; PC64LE-NEXT: mtvsrwz 36, 4 6318; PC64LE-NEXT: vperm 2, 4, 3, 2 6319; PC64LE-NEXT: blr 6320; 6321; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f64: 6322; PC64LE9: # %bb.0: # %entry 6323; PC64LE9-NEXT: xscvdpuxws 0, 1 6324; PC64LE9-NEXT: xscvdpuxws 1, 2 6325; PC64LE9-NEXT: mffprwz 3, 0 6326; PC64LE9-NEXT: mtfprwz 0, 3 6327; PC64LE9-NEXT: mffprwz 3, 1 6328; PC64LE9-NEXT: mtfprwz 1, 3 6329; PC64LE9-NEXT: addis 3, 2, .LCPI121_0@toc@ha 6330; PC64LE9-NEXT: xxmrghw 34, 1, 0 6331; PC64LE9-NEXT: xscvdpuxws 0, 3 6332; PC64LE9-NEXT: addi 3, 3, .LCPI121_0@toc@l 6333; PC64LE9-NEXT: lxv 35, 0(3) 6334; PC64LE9-NEXT: mffprwz 3, 0 6335; PC64LE9-NEXT: mtvsrwz 36, 3 6336; PC64LE9-NEXT: vperm 2, 4, 2, 3 6337; PC64LE9-NEXT: blr 6338entry: 6339 %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64( 6340 <3 x double> %x, 6341 metadata !"fpexcept.strict") #0 6342 ret <3 x i32> %result 6343} 6344 6345define <4 x i32> @constrained_vector_fptoui_v4i32_v4f64(<4 x double> %x) #0 { 6346; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f64: 6347; PC64LE: # %bb.0: # %entry 6348; PC64LE-NEXT: xxswapd 0, 34 6349; PC64LE-NEXT: xxswapd 2, 35 6350; PC64LE-NEXT: xscvdpuxws 1, 34 6351; PC64LE-NEXT: xscvdpuxws 3, 35 6352; PC64LE-NEXT: xscvdpuxws 0, 0 6353; PC64LE-NEXT: xscvdpuxws 2, 2 6354; PC64LE-NEXT: mffprwz 3, 1 6355; PC64LE-NEXT: mffprwz 4, 3 6356; PC64LE-NEXT: mffprwz 5, 0 6357; PC64LE-NEXT: mffprwz 6, 2 6358; PC64LE-NEXT: rldimi 5, 3, 32, 0 6359; PC64LE-NEXT: rldimi 6, 4, 32, 0 6360; PC64LE-NEXT: mtfprd 0, 5 6361; PC64LE-NEXT: mtfprd 1, 6 6362; PC64LE-NEXT: xxmrghd 34, 1, 0 6363; PC64LE-NEXT: blr 6364; 6365; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f64: 6366; PC64LE9: # %bb.0: # %entry 6367; PC64LE9-NEXT: xscvdpuxws 0, 34 6368; PC64LE9-NEXT: mffprwz 3, 0 6369; PC64LE9-NEXT: xxswapd 0, 34 6370; PC64LE9-NEXT: xscvdpuxws 0, 0 6371; PC64LE9-NEXT: mffprwz 4, 0 6372; PC64LE9-NEXT: xscvdpuxws 0, 35 6373; PC64LE9-NEXT: rldimi 4, 3, 32, 0 6374; PC64LE9-NEXT: mffprwz 3, 0 6375; PC64LE9-NEXT: xxswapd 0, 35 6376; PC64LE9-NEXT: xscvdpuxws 0, 0 6377; PC64LE9-NEXT: mffprwz 5, 0 6378; PC64LE9-NEXT: rldimi 5, 3, 32, 0 6379; PC64LE9-NEXT: mtvsrdd 34, 5, 4 6380; PC64LE9-NEXT: blr 6381entry: 6382 %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64( 6383 <4 x double> %x, 6384 metadata !"fpexcept.strict") #0 6385 ret <4 x i32> %result 6386} 6387 6388define <1 x i64> @constrained_vector_fptoui_v1i64_v1f64(<1 x double> %x) #0 { 6389; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f64: 6390; PC64LE: # %bb.0: # %entry 6391; PC64LE-NEXT: xscvdpuxds 0, 1 6392; PC64LE-NEXT: mffprd 3, 0 6393; PC64LE-NEXT: blr 6394; 6395; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f64: 6396; PC64LE9: # %bb.0: # %entry 6397; PC64LE9-NEXT: xscvdpuxds 0, 1 6398; PC64LE9-NEXT: mffprd 3, 0 6399; PC64LE9-NEXT: blr 6400entry: 6401 %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64( 6402 <1 x double> %x, 6403 metadata !"fpexcept.strict") #0 6404 ret <1 x i64> %result 6405} 6406 6407define <2 x i64> @constrained_vector_fptoui_v2i64_v2f64(<2 x double> %x) #0 { 6408; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f64: 6409; PC64LE: # %bb.0: # %entry 6410; PC64LE-NEXT: xvcvdpuxds 34, 34 6411; PC64LE-NEXT: blr 6412; 6413; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f64: 6414; PC64LE9: # %bb.0: # %entry 6415; PC64LE9-NEXT: xvcvdpuxds 34, 34 6416; PC64LE9-NEXT: blr 6417entry: 6418 %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64( 6419 <2 x double> %x, 6420 metadata !"fpexcept.strict") #0 6421 ret <2 x i64> %result 6422} 6423 6424define <3 x i64> @constrained_vector_fptoui_v3i64_v3f64(<3 x double> %x) #0 { 6425; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f64: 6426; PC64LE: # %bb.0: # %entry 6427; PC64LE-NEXT: xscvdpuxds 0, 1 6428; PC64LE-NEXT: xscvdpuxds 1, 2 6429; PC64LE-NEXT: xscvdpuxds 2, 3 6430; PC64LE-NEXT: mffprd 3, 0 6431; PC64LE-NEXT: mffprd 4, 1 6432; PC64LE-NEXT: mffprd 5, 2 6433; PC64LE-NEXT: blr 6434; 6435; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f64: 6436; PC64LE9: # %bb.0: # %entry 6437; PC64LE9-NEXT: xscvdpuxds 0, 1 6438; PC64LE9-NEXT: mffprd 3, 0 6439; PC64LE9-NEXT: xscvdpuxds 0, 2 6440; PC64LE9-NEXT: mffprd 4, 0 6441; PC64LE9-NEXT: xscvdpuxds 0, 3 6442; PC64LE9-NEXT: mffprd 5, 0 6443; PC64LE9-NEXT: blr 6444entry: 6445 %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64( 6446 <3 x double> %x, 6447 metadata !"fpexcept.strict") #0 6448 ret <3 x i64> %result 6449} 6450 6451define <4 x i64> @constrained_vector_fptoui_v4i64_v4f64(<4 x double> %x) #0 { 6452; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f64: 6453; PC64LE: # %bb.0: # %entry 6454; PC64LE-NEXT: xvcvdpuxds 35, 35 6455; PC64LE-NEXT: xvcvdpuxds 34, 34 6456; PC64LE-NEXT: blr 6457; 6458; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f64: 6459; PC64LE9: # %bb.0: # %entry 6460; PC64LE9-NEXT: xvcvdpuxds 35, 35 6461; PC64LE9-NEXT: xvcvdpuxds 34, 34 6462; PC64LE9-NEXT: blr 6463entry: 6464 %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64( 6465 <4 x double> %x, 6466 metadata !"fpexcept.strict") #0 6467 ret <4 x i64> %result 6468} 6469 6470define <1 x float> @constrained_vector_fptrunc_v1f64(<1 x double> %x) #0 { 6471; PC64LE-LABEL: constrained_vector_fptrunc_v1f64: 6472; PC64LE: # %bb.0: # %entry 6473; PC64LE-NEXT: xsrsp 1, 1 6474; PC64LE-NEXT: blr 6475; 6476; PC64LE9-LABEL: constrained_vector_fptrunc_v1f64: 6477; PC64LE9: # %bb.0: # %entry 6478; PC64LE9-NEXT: xsrsp 1, 1 6479; PC64LE9-NEXT: blr 6480entry: 6481 %result = call <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64( 6482 <1 x double> %x, 6483 metadata !"round.dynamic", 6484 metadata !"fpexcept.strict") #1 6485 ret <1 x float> %result 6486} 6487 6488define <2 x float> @constrained_vector_fptrunc_v2f64(<2 x double> %x) #0 { 6489; PC64LE-LABEL: constrained_vector_fptrunc_v2f64: 6490; PC64LE: # %bb.0: # %entry 6491; PC64LE-NEXT: xxswapd 0, 34 6492; PC64LE-NEXT: xsrsp 1, 34 6493; PC64LE-NEXT: xsrsp 0, 0 6494; PC64LE-NEXT: xscvdpspn 1, 1 6495; PC64LE-NEXT: xscvdpspn 0, 0 6496; PC64LE-NEXT: xxmrghw 34, 1, 0 6497; PC64LE-NEXT: blr 6498; 6499; PC64LE9-LABEL: constrained_vector_fptrunc_v2f64: 6500; PC64LE9: # %bb.0: # %entry 6501; PC64LE9-NEXT: xxswapd 1, 34 6502; PC64LE9-NEXT: xsrsp 0, 34 6503; PC64LE9-NEXT: xsrsp 1, 1 6504; PC64LE9-NEXT: xscvdpspn 0, 0 6505; PC64LE9-NEXT: xscvdpspn 1, 1 6506; PC64LE9-NEXT: xxmrghw 34, 0, 1 6507; PC64LE9-NEXT: blr 6508entry: 6509 %result = call <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64( 6510 <2 x double> %x, 6511 metadata !"round.dynamic", 6512 metadata !"fpexcept.strict") #1 6513 ret <2 x float> %result 6514} 6515 6516define <3 x float> @constrained_vector_fptrunc_v3f64(<3 x double> %x) #0 { 6517; PC64LE-LABEL: constrained_vector_fptrunc_v3f64: 6518; PC64LE: # %bb.0: # %entry 6519; PC64LE-NEXT: xsrsp 0, 1 6520; PC64LE-NEXT: addis 3, 2, .LCPI129_0@toc@ha 6521; PC64LE-NEXT: xsrsp 1, 2 6522; PC64LE-NEXT: addi 3, 3, .LCPI129_0@toc@l 6523; PC64LE-NEXT: xsrsp 2, 3 6524; PC64LE-NEXT: lvx 4, 0, 3 6525; PC64LE-NEXT: xscvdpspn 0, 0 6526; PC64LE-NEXT: xscvdpspn 1, 1 6527; PC64LE-NEXT: xscvdpspn 34, 2 6528; PC64LE-NEXT: xxmrghw 35, 1, 0 6529; PC64LE-NEXT: vperm 2, 2, 3, 4 6530; PC64LE-NEXT: blr 6531; 6532; PC64LE9-LABEL: constrained_vector_fptrunc_v3f64: 6533; PC64LE9: # %bb.0: # %entry 6534; PC64LE9-NEXT: xsrsp 0, 1 6535; PC64LE9-NEXT: xsrsp 1, 2 6536; PC64LE9-NEXT: addis 3, 2, .LCPI129_0@toc@ha 6537; PC64LE9-NEXT: addi 3, 3, .LCPI129_0@toc@l 6538; PC64LE9-NEXT: lxv 35, 0(3) 6539; PC64LE9-NEXT: xscvdpspn 0, 0 6540; PC64LE9-NEXT: xscvdpspn 1, 1 6541; PC64LE9-NEXT: xxmrghw 34, 1, 0 6542; PC64LE9-NEXT: xsrsp 0, 3 6543; PC64LE9-NEXT: xscvdpspn 36, 0 6544; PC64LE9-NEXT: vperm 2, 4, 2, 3 6545; PC64LE9-NEXT: blr 6546entry: 6547 %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64( 6548 <3 x double> %x, 6549 metadata !"round.dynamic", 6550 metadata !"fpexcept.strict") #1 6551 ret <3 x float> %result 6552} 6553 6554define <4 x float> @constrained_vector_fptrunc_v4f64(<4 x double> %x) #0 { 6555; PC64LE-LABEL: constrained_vector_fptrunc_v4f64: 6556; PC64LE: # %bb.0: # %entry 6557; PC64LE-NEXT: xxmrgld 0, 35, 34 6558; PC64LE-NEXT: xxmrghd 1, 35, 34 6559; PC64LE-NEXT: xvcvdpsp 34, 0 6560; PC64LE-NEXT: xvcvdpsp 35, 1 6561; PC64LE-NEXT: vmrgew 2, 3, 2 6562; PC64LE-NEXT: blr 6563; 6564; PC64LE9-LABEL: constrained_vector_fptrunc_v4f64: 6565; PC64LE9: # %bb.0: # %entry 6566; PC64LE9-NEXT: xxmrgld 0, 35, 34 6567; PC64LE9-NEXT: xvcvdpsp 36, 0 6568; PC64LE9-NEXT: xxmrghd 0, 35, 34 6569; PC64LE9-NEXT: xvcvdpsp 34, 0 6570; PC64LE9-NEXT: vmrgew 2, 2, 4 6571; PC64LE9-NEXT: blr 6572entry: 6573 %result = call <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64( 6574 <4 x double> %x, 6575 metadata !"round.dynamic", 6576 metadata !"fpexcept.strict") #1 6577 ret <4 x float> %result 6578} 6579 6580define <1 x double> @constrained_vector_fpext_v1f32(<1 x float> %x) #0 { 6581; PC64LE-LABEL: constrained_vector_fpext_v1f32: 6582; PC64LE: # %bb.0: # %entry 6583; PC64LE-NEXT: blr 6584; 6585; PC64LE9-LABEL: constrained_vector_fpext_v1f32: 6586; PC64LE9: # %bb.0: # %entry 6587; PC64LE9-NEXT: blr 6588entry: 6589 %result = call <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32( 6590 <1 x float> %x, 6591 metadata !"fpexcept.strict") #1 6592 ret <1 x double> %result 6593} 6594 6595define <2 x double> @constrained_vector_fpext_v2f32(<2 x float> %x) #0 { 6596; PC64LE-LABEL: constrained_vector_fpext_v2f32: 6597; PC64LE: # %bb.0: # %entry 6598; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 6599; PC64LE-NEXT: xxswapd 1, 34 6600; PC64LE-NEXT: xscvspdpn 0, 0 6601; PC64LE-NEXT: xscvspdpn 1, 1 6602; PC64LE-NEXT: xxmrghd 34, 1, 0 6603; PC64LE-NEXT: blr 6604; 6605; PC64LE9-LABEL: constrained_vector_fpext_v2f32: 6606; PC64LE9: # %bb.0: # %entry 6607; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 6608; PC64LE9-NEXT: xxswapd 1, 34 6609; PC64LE9-NEXT: xscvspdpn 0, 0 6610; PC64LE9-NEXT: xscvspdpn 1, 1 6611; PC64LE9-NEXT: xxmrghd 34, 1, 0 6612; PC64LE9-NEXT: blr 6613entry: 6614 %result = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32( 6615 <2 x float> %x, 6616 metadata !"fpexcept.strict") #1 6617 ret <2 x double> %result 6618} 6619 6620define <3 x double> @constrained_vector_fpext_v3f32(<3 x float> %x) #0 { 6621; PC64LE-LABEL: constrained_vector_fpext_v3f32: 6622; PC64LE: # %bb.0: # %entry 6623; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 6624; PC64LE-NEXT: xxswapd 1, 34 6625; PC64LE-NEXT: xxsldwi 4, 34, 34, 3 6626; PC64LE-NEXT: xscvspdpn 3, 0 6627; PC64LE-NEXT: xscvspdpn 2, 1 6628; PC64LE-NEXT: xscvspdpn 1, 4 6629; PC64LE-NEXT: blr 6630; 6631; PC64LE9-LABEL: constrained_vector_fpext_v3f32: 6632; PC64LE9: # %bb.0: # %entry 6633; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 6634; PC64LE9-NEXT: xscvspdpn 3, 0 6635; PC64LE9-NEXT: xxswapd 0, 34 6636; PC64LE9-NEXT: xscvspdpn 2, 0 6637; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 6638; PC64LE9-NEXT: xscvspdpn 1, 0 6639; PC64LE9-NEXT: blr 6640entry: 6641 %result = call <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32( 6642 <3 x float> %x, 6643 metadata !"fpexcept.strict") #1 6644 ret <3 x double> %result 6645} 6646 6647define <4 x double> @constrained_vector_fpext_v4f32(<4 x float> %x) #0 { 6648; PC64LE-LABEL: constrained_vector_fpext_v4f32: 6649; PC64LE: # %bb.0: # %entry 6650; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 6651; PC64LE-NEXT: xxswapd 1, 34 6652; PC64LE-NEXT: xxsldwi 3, 34, 34, 1 6653; PC64LE-NEXT: xscvspdpn 2, 34 6654; PC64LE-NEXT: xscvspdpn 0, 0 6655; PC64LE-NEXT: xscvspdpn 1, 1 6656; PC64LE-NEXT: xscvspdpn 3, 3 6657; PC64LE-NEXT: xxmrghd 34, 1, 0 6658; PC64LE-NEXT: xxmrghd 35, 2, 3 6659; PC64LE-NEXT: blr 6660; 6661; PC64LE9-LABEL: constrained_vector_fpext_v4f32: 6662; PC64LE9: # %bb.0: # %entry 6663; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 6664; PC64LE9-NEXT: xxswapd 1, 34 6665; PC64LE9-NEXT: xscvspdpn 0, 0 6666; PC64LE9-NEXT: xscvspdpn 1, 1 6667; PC64LE9-NEXT: xxsldwi 2, 34, 34, 1 6668; PC64LE9-NEXT: xscvspdpn 2, 2 6669; PC64LE9-NEXT: xxmrghd 0, 1, 0 6670; PC64LE9-NEXT: xscvspdpn 1, 34 6671; PC64LE9-NEXT: xxmrghd 35, 1, 2 6672; PC64LE9-NEXT: xxlor 34, 0, 0 6673; PC64LE9-NEXT: blr 6674entry: 6675 %result = call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32( 6676 <4 x float> %x, 6677 metadata !"fpexcept.strict") #1 6678 ret <4 x double> %result 6679} 6680 6681define <1 x float> @constrained_vector_ceil_v1f32(<1 x float> %x) #0 { 6682; PC64LE-LABEL: constrained_vector_ceil_v1f32: 6683; PC64LE: # %bb.0: # %entry 6684; PC64LE-NEXT: xsrdpip 1, 1 6685; PC64LE-NEXT: blr 6686; 6687; PC64LE9-LABEL: constrained_vector_ceil_v1f32: 6688; PC64LE9: # %bb.0: # %entry 6689; PC64LE9-NEXT: xsrdpip 1, 1 6690; PC64LE9-NEXT: blr 6691entry: 6692 %ceil = call <1 x float> @llvm.experimental.constrained.ceil.v1f32( 6693 <1 x float> %x, 6694 metadata !"fpexcept.strict") #1 6695 ret <1 x float> %ceil 6696} 6697 6698define <2 x double> @constrained_vector_ceil_v2f64(<2 x double> %x) #0 { 6699; PC64LE-LABEL: constrained_vector_ceil_v2f64: 6700; PC64LE: # %bb.0: # %entry 6701; PC64LE-NEXT: xvrdpip 34, 34 6702; PC64LE-NEXT: blr 6703; 6704; PC64LE9-LABEL: constrained_vector_ceil_v2f64: 6705; PC64LE9: # %bb.0: # %entry 6706; PC64LE9-NEXT: xvrdpip 34, 34 6707; PC64LE9-NEXT: blr 6708entry: 6709 %ceil = call <2 x double> @llvm.experimental.constrained.ceil.v2f64( 6710 <2 x double> %x, 6711 metadata !"fpexcept.strict") #1 6712 ret <2 x double> %ceil 6713} 6714 6715define <3 x float> @constrained_vector_ceil_v3f32(<3 x float> %x) #0 { 6716; PC64LE-LABEL: constrained_vector_ceil_v3f32: 6717; PC64LE: # %bb.0: # %entry 6718; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 6719; PC64LE-NEXT: xxswapd 1, 34 6720; PC64LE-NEXT: addis 3, 2, .LCPI137_0@toc@ha 6721; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 6722; PC64LE-NEXT: addi 3, 3, .LCPI137_0@toc@l 6723; PC64LE-NEXT: lvx 4, 0, 3 6724; PC64LE-NEXT: xscvspdpn 0, 0 6725; PC64LE-NEXT: xscvspdpn 1, 1 6726; PC64LE-NEXT: xscvspdpn 2, 2 6727; PC64LE-NEXT: xsrdpip 0, 0 6728; PC64LE-NEXT: xsrdpip 1, 1 6729; PC64LE-NEXT: xsrdpip 2, 2 6730; PC64LE-NEXT: xscvdpspn 0, 0 6731; PC64LE-NEXT: xscvdpspn 1, 1 6732; PC64LE-NEXT: xscvdpspn 34, 2 6733; PC64LE-NEXT: xxmrghw 35, 1, 0 6734; PC64LE-NEXT: vperm 2, 2, 3, 4 6735; PC64LE-NEXT: blr 6736; 6737; PC64LE9-LABEL: constrained_vector_ceil_v3f32: 6738; PC64LE9: # %bb.0: # %entry 6739; PC64LE9-NEXT: xxswapd 1, 34 6740; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3 6741; PC64LE9-NEXT: addis 3, 2, .LCPI137_0@toc@ha 6742; PC64LE9-NEXT: addi 3, 3, .LCPI137_0@toc@l 6743; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 6744; PC64LE9-NEXT: xscvspdpn 1, 1 6745; PC64LE9-NEXT: xscvspdpn 2, 2 6746; PC64LE9-NEXT: xscvspdpn 0, 0 6747; PC64LE9-NEXT: lxv 35, 0(3) 6748; PC64LE9-NEXT: xsrdpip 1, 1 6749; PC64LE9-NEXT: xsrdpip 2, 2 6750; PC64LE9-NEXT: xsrdpip 0, 0 6751; PC64LE9-NEXT: xscvdpspn 2, 2 6752; PC64LE9-NEXT: xscvdpspn 1, 1 6753; PC64LE9-NEXT: xscvdpspn 36, 0 6754; PC64LE9-NEXT: xxmrghw 34, 1, 2 6755; PC64LE9-NEXT: vperm 2, 4, 2, 3 6756; PC64LE9-NEXT: blr 6757entry: 6758 %ceil = call <3 x float> @llvm.experimental.constrained.ceil.v3f32( 6759 <3 x float> %x, 6760 metadata !"fpexcept.strict") #1 6761 ret <3 x float> %ceil 6762} 6763 6764define <3 x double> @constrained_vector_ceil_v3f64(<3 x double> %x) #0 { 6765; PC64LE-LABEL: constrained_vector_ceil_v3f64: 6766; PC64LE: # %bb.0: # %entry 6767; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 6768; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 6769; PC64LE-NEXT: xxmrghd 0, 2, 1 6770; PC64LE-NEXT: xsrdpip 3, 3 6771; PC64LE-NEXT: xvrdpip 2, 0 6772; PC64LE-NEXT: xxswapd 1, 2 6773; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 6774; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 6775; PC64LE-NEXT: blr 6776; 6777; PC64LE9-LABEL: constrained_vector_ceil_v3f64: 6778; PC64LE9: # %bb.0: # %entry 6779; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 6780; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 6781; PC64LE9-NEXT: xxmrghd 0, 2, 1 6782; PC64LE9-NEXT: xsrdpip 3, 3 6783; PC64LE9-NEXT: xvrdpip 2, 0 6784; PC64LE9-NEXT: xxswapd 1, 2 6785; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 6786; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 6787; PC64LE9-NEXT: blr 6788entry: 6789 %ceil = call <3 x double> @llvm.experimental.constrained.ceil.v3f64( 6790 <3 x double> %x, 6791 metadata !"fpexcept.strict") #1 6792 ret <3 x double> %ceil 6793} 6794 6795define <1 x float> @constrained_vector_floor_v1f32(<1 x float> %x) #0 { 6796; PC64LE-LABEL: constrained_vector_floor_v1f32: 6797; PC64LE: # %bb.0: # %entry 6798; PC64LE-NEXT: xsrdpim 1, 1 6799; PC64LE-NEXT: blr 6800; 6801; PC64LE9-LABEL: constrained_vector_floor_v1f32: 6802; PC64LE9: # %bb.0: # %entry 6803; PC64LE9-NEXT: xsrdpim 1, 1 6804; PC64LE9-NEXT: blr 6805entry: 6806 %floor = call <1 x float> @llvm.experimental.constrained.floor.v1f32( 6807 <1 x float> %x, 6808 metadata !"fpexcept.strict") #1 6809 ret <1 x float> %floor 6810} 6811 6812 6813define <2 x double> @constrained_vector_floor_v2f64(<2 x double> %x) #0 { 6814; PC64LE-LABEL: constrained_vector_floor_v2f64: 6815; PC64LE: # %bb.0: # %entry 6816; PC64LE-NEXT: xvrdpim 34, 34 6817; PC64LE-NEXT: blr 6818; 6819; PC64LE9-LABEL: constrained_vector_floor_v2f64: 6820; PC64LE9: # %bb.0: # %entry 6821; PC64LE9-NEXT: xvrdpim 34, 34 6822; PC64LE9-NEXT: blr 6823entry: 6824 %floor = call <2 x double> @llvm.experimental.constrained.floor.v2f64( 6825 <2 x double> %x, 6826 metadata !"fpexcept.strict") #1 6827 ret <2 x double> %floor 6828} 6829 6830define <3 x float> @constrained_vector_floor_v3f32(<3 x float> %x) #0 { 6831; PC64LE-LABEL: constrained_vector_floor_v3f32: 6832; PC64LE: # %bb.0: # %entry 6833; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 6834; PC64LE-NEXT: xxswapd 1, 34 6835; PC64LE-NEXT: addis 3, 2, .LCPI141_0@toc@ha 6836; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 6837; PC64LE-NEXT: addi 3, 3, .LCPI141_0@toc@l 6838; PC64LE-NEXT: lvx 4, 0, 3 6839; PC64LE-NEXT: xscvspdpn 0, 0 6840; PC64LE-NEXT: xscvspdpn 1, 1 6841; PC64LE-NEXT: xscvspdpn 2, 2 6842; PC64LE-NEXT: xsrdpim 0, 0 6843; PC64LE-NEXT: xsrdpim 1, 1 6844; PC64LE-NEXT: xsrdpim 2, 2 6845; PC64LE-NEXT: xscvdpspn 0, 0 6846; PC64LE-NEXT: xscvdpspn 1, 1 6847; PC64LE-NEXT: xscvdpspn 34, 2 6848; PC64LE-NEXT: xxmrghw 35, 1, 0 6849; PC64LE-NEXT: vperm 2, 2, 3, 4 6850; PC64LE-NEXT: blr 6851; 6852; PC64LE9-LABEL: constrained_vector_floor_v3f32: 6853; PC64LE9: # %bb.0: # %entry 6854; PC64LE9-NEXT: xxswapd 1, 34 6855; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3 6856; PC64LE9-NEXT: addis 3, 2, .LCPI141_0@toc@ha 6857; PC64LE9-NEXT: addi 3, 3, .LCPI141_0@toc@l 6858; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 6859; PC64LE9-NEXT: xscvspdpn 1, 1 6860; PC64LE9-NEXT: xscvspdpn 2, 2 6861; PC64LE9-NEXT: xscvspdpn 0, 0 6862; PC64LE9-NEXT: lxv 35, 0(3) 6863; PC64LE9-NEXT: xsrdpim 1, 1 6864; PC64LE9-NEXT: xsrdpim 2, 2 6865; PC64LE9-NEXT: xsrdpim 0, 0 6866; PC64LE9-NEXT: xscvdpspn 2, 2 6867; PC64LE9-NEXT: xscvdpspn 1, 1 6868; PC64LE9-NEXT: xscvdpspn 36, 0 6869; PC64LE9-NEXT: xxmrghw 34, 1, 2 6870; PC64LE9-NEXT: vperm 2, 4, 2, 3 6871; PC64LE9-NEXT: blr 6872entry: 6873 %floor = call <3 x float> @llvm.experimental.constrained.floor.v3f32( 6874 <3 x float> %x, 6875 metadata !"fpexcept.strict") #1 6876 ret <3 x float> %floor 6877} 6878 6879define <3 x double> @constrained_vector_floor_v3f64(<3 x double> %x) #0 { 6880; PC64LE-LABEL: constrained_vector_floor_v3f64: 6881; PC64LE: # %bb.0: # %entry 6882; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 6883; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 6884; PC64LE-NEXT: xxmrghd 0, 2, 1 6885; PC64LE-NEXT: xsrdpim 3, 3 6886; PC64LE-NEXT: xvrdpim 2, 0 6887; PC64LE-NEXT: xxswapd 1, 2 6888; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 6889; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 6890; PC64LE-NEXT: blr 6891; 6892; PC64LE9-LABEL: constrained_vector_floor_v3f64: 6893; PC64LE9: # %bb.0: # %entry 6894; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 6895; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 6896; PC64LE9-NEXT: xxmrghd 0, 2, 1 6897; PC64LE9-NEXT: xsrdpim 3, 3 6898; PC64LE9-NEXT: xvrdpim 2, 0 6899; PC64LE9-NEXT: xxswapd 1, 2 6900; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 6901; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 6902; PC64LE9-NEXT: blr 6903entry: 6904 %floor = call <3 x double> @llvm.experimental.constrained.floor.v3f64( 6905 <3 x double> %x, 6906 metadata !"fpexcept.strict") #1 6907 ret <3 x double> %floor 6908} 6909 6910define <1 x float> @constrained_vector_round_v1f32(<1 x float> %x) #0 { 6911; PC64LE-LABEL: constrained_vector_round_v1f32: 6912; PC64LE: # %bb.0: # %entry 6913; PC64LE-NEXT: xsrdpi 1, 1 6914; PC64LE-NEXT: blr 6915; 6916; PC64LE9-LABEL: constrained_vector_round_v1f32: 6917; PC64LE9: # %bb.0: # %entry 6918; PC64LE9-NEXT: xsrdpi 1, 1 6919; PC64LE9-NEXT: blr 6920entry: 6921 %round = call <1 x float> @llvm.experimental.constrained.round.v1f32( 6922 <1 x float> %x, 6923 metadata !"fpexcept.strict") #1 6924 ret <1 x float> %round 6925} 6926 6927define <2 x double> @constrained_vector_round_v2f64(<2 x double> %x) #0 { 6928; PC64LE-LABEL: constrained_vector_round_v2f64: 6929; PC64LE: # %bb.0: # %entry 6930; PC64LE-NEXT: xvrdpi 34, 34 6931; PC64LE-NEXT: blr 6932; 6933; PC64LE9-LABEL: constrained_vector_round_v2f64: 6934; PC64LE9: # %bb.0: # %entry 6935; PC64LE9-NEXT: xvrdpi 34, 34 6936; PC64LE9-NEXT: blr 6937entry: 6938 %round = call <2 x double> @llvm.experimental.constrained.round.v2f64( 6939 <2 x double> %x, 6940 metadata !"fpexcept.strict") #1 6941 ret <2 x double> %round 6942} 6943 6944define <3 x float> @constrained_vector_round_v3f32(<3 x float> %x) #0 { 6945; PC64LE-LABEL: constrained_vector_round_v3f32: 6946; PC64LE: # %bb.0: # %entry 6947; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 6948; PC64LE-NEXT: xxswapd 1, 34 6949; PC64LE-NEXT: addis 3, 2, .LCPI145_0@toc@ha 6950; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 6951; PC64LE-NEXT: addi 3, 3, .LCPI145_0@toc@l 6952; PC64LE-NEXT: lvx 4, 0, 3 6953; PC64LE-NEXT: xscvspdpn 0, 0 6954; PC64LE-NEXT: xscvspdpn 1, 1 6955; PC64LE-NEXT: xscvspdpn 2, 2 6956; PC64LE-NEXT: xsrdpi 0, 0 6957; PC64LE-NEXT: xsrdpi 1, 1 6958; PC64LE-NEXT: xsrdpi 2, 2 6959; PC64LE-NEXT: xscvdpspn 0, 0 6960; PC64LE-NEXT: xscvdpspn 1, 1 6961; PC64LE-NEXT: xscvdpspn 34, 2 6962; PC64LE-NEXT: xxmrghw 35, 1, 0 6963; PC64LE-NEXT: vperm 2, 2, 3, 4 6964; PC64LE-NEXT: blr 6965; 6966; PC64LE9-LABEL: constrained_vector_round_v3f32: 6967; PC64LE9: # %bb.0: # %entry 6968; PC64LE9-NEXT: xxswapd 1, 34 6969; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3 6970; PC64LE9-NEXT: addis 3, 2, .LCPI145_0@toc@ha 6971; PC64LE9-NEXT: addi 3, 3, .LCPI145_0@toc@l 6972; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 6973; PC64LE9-NEXT: xscvspdpn 1, 1 6974; PC64LE9-NEXT: xscvspdpn 2, 2 6975; PC64LE9-NEXT: xscvspdpn 0, 0 6976; PC64LE9-NEXT: lxv 35, 0(3) 6977; PC64LE9-NEXT: xsrdpi 1, 1 6978; PC64LE9-NEXT: xsrdpi 2, 2 6979; PC64LE9-NEXT: xsrdpi 0, 0 6980; PC64LE9-NEXT: xscvdpspn 2, 2 6981; PC64LE9-NEXT: xscvdpspn 1, 1 6982; PC64LE9-NEXT: xscvdpspn 36, 0 6983; PC64LE9-NEXT: xxmrghw 34, 1, 2 6984; PC64LE9-NEXT: vperm 2, 4, 2, 3 6985; PC64LE9-NEXT: blr 6986entry: 6987 %round = call <3 x float> @llvm.experimental.constrained.round.v3f32( 6988 <3 x float> %x, 6989 metadata !"fpexcept.strict") #1 6990 ret <3 x float> %round 6991} 6992 6993 6994define <3 x double> @constrained_vector_round_v3f64(<3 x double> %x) #0 { 6995; PC64LE-LABEL: constrained_vector_round_v3f64: 6996; PC64LE: # %bb.0: # %entry 6997; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 6998; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 6999; PC64LE-NEXT: xxmrghd 0, 2, 1 7000; PC64LE-NEXT: xsrdpi 3, 3 7001; PC64LE-NEXT: xvrdpi 2, 0 7002; PC64LE-NEXT: xxswapd 1, 2 7003; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 7004; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 7005; PC64LE-NEXT: blr 7006; 7007; PC64LE9-LABEL: constrained_vector_round_v3f64: 7008; PC64LE9: # %bb.0: # %entry 7009; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 7010; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 7011; PC64LE9-NEXT: xxmrghd 0, 2, 1 7012; PC64LE9-NEXT: xsrdpi 3, 3 7013; PC64LE9-NEXT: xvrdpi 2, 0 7014; PC64LE9-NEXT: xxswapd 1, 2 7015; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 7016; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 7017; PC64LE9-NEXT: blr 7018entry: 7019 %round = call <3 x double> @llvm.experimental.constrained.round.v3f64( 7020 <3 x double> %x, 7021 metadata !"fpexcept.strict") #1 7022 ret <3 x double> %round 7023} 7024 7025define <1 x float> @constrained_vector_trunc_v1f32(<1 x float> %x) #0 { 7026; PC64LE-LABEL: constrained_vector_trunc_v1f32: 7027; PC64LE: # %bb.0: # %entry 7028; PC64LE-NEXT: xsrdpiz 1, 1 7029; PC64LE-NEXT: blr 7030; 7031; PC64LE9-LABEL: constrained_vector_trunc_v1f32: 7032; PC64LE9: # %bb.0: # %entry 7033; PC64LE9-NEXT: xsrdpiz 1, 1 7034; PC64LE9-NEXT: blr 7035entry: 7036 %trunc = call <1 x float> @llvm.experimental.constrained.trunc.v1f32( 7037 <1 x float> %x, 7038 metadata !"fpexcept.strict") #1 7039 ret <1 x float> %trunc 7040} 7041 7042define <2 x double> @constrained_vector_trunc_v2f64(<2 x double> %x) #0 { 7043; PC64LE-LABEL: constrained_vector_trunc_v2f64: 7044; PC64LE: # %bb.0: # %entry 7045; PC64LE-NEXT: xvrdpiz 34, 34 7046; PC64LE-NEXT: blr 7047; 7048; PC64LE9-LABEL: constrained_vector_trunc_v2f64: 7049; PC64LE9: # %bb.0: # %entry 7050; PC64LE9-NEXT: xvrdpiz 34, 34 7051; PC64LE9-NEXT: blr 7052entry: 7053 %trunc = call <2 x double> @llvm.experimental.constrained.trunc.v2f64( 7054 <2 x double> %x, 7055 metadata !"fpexcept.strict") #1 7056 ret <2 x double> %trunc 7057} 7058 7059define <3 x float> @constrained_vector_trunc_v3f32(<3 x float> %x) #0 { 7060; PC64LE-LABEL: constrained_vector_trunc_v3f32: 7061; PC64LE: # %bb.0: # %entry 7062; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 7063; PC64LE-NEXT: xxswapd 1, 34 7064; PC64LE-NEXT: addis 3, 2, .LCPI149_0@toc@ha 7065; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 7066; PC64LE-NEXT: addi 3, 3, .LCPI149_0@toc@l 7067; PC64LE-NEXT: lvx 4, 0, 3 7068; PC64LE-NEXT: xscvspdpn 0, 0 7069; PC64LE-NEXT: xscvspdpn 1, 1 7070; PC64LE-NEXT: xscvspdpn 2, 2 7071; PC64LE-NEXT: xsrdpiz 0, 0 7072; PC64LE-NEXT: xsrdpiz 1, 1 7073; PC64LE-NEXT: xsrdpiz 2, 2 7074; PC64LE-NEXT: xscvdpspn 0, 0 7075; PC64LE-NEXT: xscvdpspn 1, 1 7076; PC64LE-NEXT: xscvdpspn 34, 2 7077; PC64LE-NEXT: xxmrghw 35, 1, 0 7078; PC64LE-NEXT: vperm 2, 2, 3, 4 7079; PC64LE-NEXT: blr 7080; 7081; PC64LE9-LABEL: constrained_vector_trunc_v3f32: 7082; PC64LE9: # %bb.0: # %entry 7083; PC64LE9-NEXT: xxswapd 1, 34 7084; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3 7085; PC64LE9-NEXT: addis 3, 2, .LCPI149_0@toc@ha 7086; PC64LE9-NEXT: addi 3, 3, .LCPI149_0@toc@l 7087; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 7088; PC64LE9-NEXT: xscvspdpn 1, 1 7089; PC64LE9-NEXT: xscvspdpn 2, 2 7090; PC64LE9-NEXT: xscvspdpn 0, 0 7091; PC64LE9-NEXT: lxv 35, 0(3) 7092; PC64LE9-NEXT: xsrdpiz 1, 1 7093; PC64LE9-NEXT: xsrdpiz 2, 2 7094; PC64LE9-NEXT: xsrdpiz 0, 0 7095; PC64LE9-NEXT: xscvdpspn 2, 2 7096; PC64LE9-NEXT: xscvdpspn 1, 1 7097; PC64LE9-NEXT: xscvdpspn 36, 0 7098; PC64LE9-NEXT: xxmrghw 34, 1, 2 7099; PC64LE9-NEXT: vperm 2, 4, 2, 3 7100; PC64LE9-NEXT: blr 7101entry: 7102 %trunc = call <3 x float> @llvm.experimental.constrained.trunc.v3f32( 7103 <3 x float> %x, 7104 metadata !"fpexcept.strict") #1 7105 ret <3 x float> %trunc 7106} 7107 7108define <3 x double> @constrained_vector_trunc_v3f64(<3 x double> %x) #0 { 7109; PC64LE-LABEL: constrained_vector_trunc_v3f64: 7110; PC64LE: # %bb.0: # %entry 7111; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2 7112; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1 7113; PC64LE-NEXT: xxmrghd 0, 2, 1 7114; PC64LE-NEXT: xsrdpiz 3, 3 7115; PC64LE-NEXT: xvrdpiz 2, 0 7116; PC64LE-NEXT: xxswapd 1, 2 7117; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2 7118; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1 7119; PC64LE-NEXT: blr 7120; 7121; PC64LE9-LABEL: constrained_vector_trunc_v3f64: 7122; PC64LE9: # %bb.0: # %entry 7123; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2 7124; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1 7125; PC64LE9-NEXT: xxmrghd 0, 2, 1 7126; PC64LE9-NEXT: xsrdpiz 3, 3 7127; PC64LE9-NEXT: xvrdpiz 2, 0 7128; PC64LE9-NEXT: xxswapd 1, 2 7129; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1 7130; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2 7131; PC64LE9-NEXT: blr 7132entry: 7133 %trunc = call <3 x double> @llvm.experimental.constrained.trunc.v3f64( 7134 <3 x double> %x, 7135 metadata !"fpexcept.strict") #1 7136 ret <3 x double> %trunc 7137} 7138 7139define <1 x double> @constrained_vector_sitofp_v1f64_v1i32(<1 x i32> %x) #0 { 7140; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i32: 7141; PC64LE: # %bb.0: # %entry 7142; PC64LE-NEXT: mtfprwa 0, 3 7143; PC64LE-NEXT: xscvsxddp 1, 0 7144; PC64LE-NEXT: blr 7145; 7146; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i32: 7147; PC64LE9: # %bb.0: # %entry 7148; PC64LE9-NEXT: mtfprwa 0, 3 7149; PC64LE9-NEXT: xscvsxddp 1, 0 7150; PC64LE9-NEXT: blr 7151entry: 7152 %result = call <1 x double> 7153 @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32> %x, 7154 metadata !"round.dynamic", 7155 metadata !"fpexcept.strict") #0 7156 ret <1 x double> %result 7157} 7158 7159define <1 x float> @constrained_vector_sitofp_v1f32_v1i32(<1 x i32> %x) #0 { 7160; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i32: 7161; PC64LE: # %bb.0: # %entry 7162; PC64LE-NEXT: mtfprwa 0, 3 7163; PC64LE-NEXT: xscvsxdsp 1, 0 7164; PC64LE-NEXT: blr 7165; 7166; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i32: 7167; PC64LE9: # %bb.0: # %entry 7168; PC64LE9-NEXT: mtfprwa 0, 3 7169; PC64LE9-NEXT: xscvsxdsp 1, 0 7170; PC64LE9-NEXT: blr 7171entry: 7172 %result = call <1 x float> 7173 @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32> %x, 7174 metadata !"round.dynamic", 7175 metadata !"fpexcept.strict") #0 7176 ret <1 x float> %result 7177} 7178 7179define <1 x double> @constrained_vector_sitofp_v1f64_v1i64(<1 x i64> %x) #0 { 7180; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i64: 7181; PC64LE: # %bb.0: # %entry 7182; PC64LE-NEXT: mtfprd 0, 3 7183; PC64LE-NEXT: xscvsxddp 1, 0 7184; PC64LE-NEXT: blr 7185; 7186; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i64: 7187; PC64LE9: # %bb.0: # %entry 7188; PC64LE9-NEXT: mtfprd 0, 3 7189; PC64LE9-NEXT: xscvsxddp 1, 0 7190; PC64LE9-NEXT: blr 7191entry: 7192 %result = call <1 x double> 7193 @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64> %x, 7194 metadata !"round.dynamic", 7195 metadata !"fpexcept.strict") #0 7196 ret <1 x double> %result 7197} 7198 7199define <1 x float> @constrained_vector_sitofp_v1f32_v1i64(<1 x i64> %x) #0 { 7200; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i64: 7201; PC64LE: # %bb.0: # %entry 7202; PC64LE-NEXT: mtfprd 0, 3 7203; PC64LE-NEXT: xscvsxdsp 1, 0 7204; PC64LE-NEXT: blr 7205; 7206; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i64: 7207; PC64LE9: # %bb.0: # %entry 7208; PC64LE9-NEXT: mtfprd 0, 3 7209; PC64LE9-NEXT: xscvsxdsp 1, 0 7210; PC64LE9-NEXT: blr 7211entry: 7212 %result = call <1 x float> 7213 @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64> %x, 7214 metadata !"round.dynamic", 7215 metadata !"fpexcept.strict") #0 7216 ret <1 x float> %result 7217} 7218 7219define <2 x double> @constrained_vector_sitofp_v2f64_v2i16(<2 x i16> %x) #0 { 7220; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i16: 7221; PC64LE: # %bb.0: # %entry 7222; PC64LE-NEXT: addis 3, 2, .LCPI155_0@toc@ha 7223; PC64LE-NEXT: addi 3, 3, .LCPI155_0@toc@l 7224; PC64LE-NEXT: lvx 3, 0, 3 7225; PC64LE-NEXT: addis 3, 2, .LCPI155_1@toc@ha 7226; PC64LE-NEXT: addi 3, 3, .LCPI155_1@toc@l 7227; PC64LE-NEXT: lxvd2x 0, 0, 3 7228; PC64LE-NEXT: vperm 2, 2, 2, 3 7229; PC64LE-NEXT: xxswapd 35, 0 7230; PC64LE-NEXT: vsld 2, 2, 3 7231; PC64LE-NEXT: vsrad 2, 2, 3 7232; PC64LE-NEXT: xvcvsxddp 34, 34 7233; PC64LE-NEXT: blr 7234; 7235; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i16: 7236; PC64LE9: # %bb.0: # %entry 7237; PC64LE9-NEXT: addis 3, 2, .LCPI155_0@toc@ha 7238; PC64LE9-NEXT: addi 3, 3, .LCPI155_0@toc@l 7239; PC64LE9-NEXT: lxv 35, 0(3) 7240; PC64LE9-NEXT: vperm 2, 2, 2, 3 7241; PC64LE9-NEXT: vextsh2d 2, 2 7242; PC64LE9-NEXT: xvcvsxddp 34, 34 7243; PC64LE9-NEXT: blr 7244entry: 7245 %result = call <2 x double> 7246 @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16> %x, 7247 metadata !"round.dynamic", 7248 metadata !"fpexcept.strict") #0 7249 ret <2 x double> %result 7250} 7251 7252define <2 x double> @constrained_vector_sitofp_v2f64_v2i32(<2 x i32> %x) #0 { 7253; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i32: 7254; PC64LE: # %bb.0: # %entry 7255; PC64LE-NEXT: xxswapd 0, 34 7256; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 7257; PC64LE-NEXT: mffprwz 3, 0 7258; PC64LE-NEXT: mffprwz 4, 1 7259; PC64LE-NEXT: mtfprwa 0, 3 7260; PC64LE-NEXT: mtfprwa 1, 4 7261; PC64LE-NEXT: xscvsxddp 0, 0 7262; PC64LE-NEXT: xscvsxddp 1, 1 7263; PC64LE-NEXT: xxmrghd 34, 1, 0 7264; PC64LE-NEXT: blr 7265; 7266; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i32: 7267; PC64LE9: # %bb.0: # %entry 7268; PC64LE9-NEXT: li 3, 0 7269; PC64LE9-NEXT: vextuwrx 3, 3, 2 7270; PC64LE9-NEXT: mtfprwa 0, 3 7271; PC64LE9-NEXT: li 3, 4 7272; PC64LE9-NEXT: vextuwrx 3, 3, 2 7273; PC64LE9-NEXT: xscvsxddp 0, 0 7274; PC64LE9-NEXT: mtfprwa 1, 3 7275; PC64LE9-NEXT: xscvsxddp 1, 1 7276; PC64LE9-NEXT: xxmrghd 34, 1, 0 7277; PC64LE9-NEXT: blr 7278entry: 7279 %result = call <2 x double> 7280 @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32> %x, 7281 metadata !"round.dynamic", 7282 metadata !"fpexcept.strict") #0 7283 ret <2 x double> %result 7284} 7285 7286define <2 x float> @constrained_vector_sitofp_v2f32_v2i32(<2 x i32> %x) #0 { 7287; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i32: 7288; PC64LE: # %bb.0: # %entry 7289; PC64LE-NEXT: xxswapd 0, 34 7290; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 7291; PC64LE-NEXT: mffprwz 3, 0 7292; PC64LE-NEXT: mffprwz 4, 1 7293; PC64LE-NEXT: mtfprwa 0, 3 7294; PC64LE-NEXT: mtfprwa 1, 4 7295; PC64LE-NEXT: xscvsxdsp 0, 0 7296; PC64LE-NEXT: xscvsxdsp 1, 1 7297; PC64LE-NEXT: xscvdpspn 0, 0 7298; PC64LE-NEXT: xscvdpspn 1, 1 7299; PC64LE-NEXT: xxmrghw 34, 1, 0 7300; PC64LE-NEXT: blr 7301; 7302; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i32: 7303; PC64LE9: # %bb.0: # %entry 7304; PC64LE9-NEXT: li 3, 0 7305; PC64LE9-NEXT: vextuwrx 3, 3, 2 7306; PC64LE9-NEXT: mtfprwa 0, 3 7307; PC64LE9-NEXT: li 3, 4 7308; PC64LE9-NEXT: vextuwrx 3, 3, 2 7309; PC64LE9-NEXT: xscvsxdsp 0, 0 7310; PC64LE9-NEXT: mtfprwa 1, 3 7311; PC64LE9-NEXT: xscvsxdsp 1, 1 7312; PC64LE9-NEXT: xscvdpspn 0, 0 7313; PC64LE9-NEXT: xscvdpspn 1, 1 7314; PC64LE9-NEXT: xxmrghw 34, 1, 0 7315; PC64LE9-NEXT: blr 7316entry: 7317 %result = call <2 x float> 7318 @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32> %x, 7319 metadata !"round.dynamic", 7320 metadata !"fpexcept.strict") #0 7321 ret <2 x float> %result 7322} 7323 7324define <2 x double> @constrained_vector_sitofp_v2f64_v2i64(<2 x i64> %x) #0 { 7325; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i64: 7326; PC64LE: # %bb.0: # %entry 7327; PC64LE-NEXT: xvcvsxddp 34, 34 7328; PC64LE-NEXT: blr 7329; 7330; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i64: 7331; PC64LE9: # %bb.0: # %entry 7332; PC64LE9-NEXT: xvcvsxddp 34, 34 7333; PC64LE9-NEXT: blr 7334entry: 7335 %result = call <2 x double> 7336 @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64> %x, 7337 metadata !"round.dynamic", 7338 metadata !"fpexcept.strict") #0 7339 ret <2 x double> %result 7340} 7341 7342define <2 x float> @constrained_vector_sitofp_v2f32_v2i64(<2 x i64> %x) #0 { 7343; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i64: 7344; PC64LE: # %bb.0: # %entry 7345; PC64LE-NEXT: xxswapd 0, 34 7346; PC64LE-NEXT: mfvsrd 3, 34 7347; PC64LE-NEXT: mffprd 4, 0 7348; PC64LE-NEXT: mtfprd 0, 3 7349; PC64LE-NEXT: mtfprd 1, 4 7350; PC64LE-NEXT: xscvsxdsp 0, 0 7351; PC64LE-NEXT: xscvsxdsp 1, 1 7352; PC64LE-NEXT: xscvdpspn 0, 0 7353; PC64LE-NEXT: xscvdpspn 1, 1 7354; PC64LE-NEXT: xxmrghw 34, 0, 1 7355; PC64LE-NEXT: blr 7356; 7357; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i64: 7358; PC64LE9: # %bb.0: # %entry 7359; PC64LE9-NEXT: mfvsrld 3, 34 7360; PC64LE9-NEXT: mtfprd 0, 3 7361; PC64LE9-NEXT: mfvsrd 3, 34 7362; PC64LE9-NEXT: mtfprd 1, 3 7363; PC64LE9-NEXT: xscvsxdsp 0, 0 7364; PC64LE9-NEXT: xscvsxdsp 1, 1 7365; PC64LE9-NEXT: xscvdpspn 0, 0 7366; PC64LE9-NEXT: xscvdpspn 1, 1 7367; PC64LE9-NEXT: xxmrghw 34, 1, 0 7368; PC64LE9-NEXT: blr 7369entry: 7370 %result = call <2 x float> 7371 @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64> %x, 7372 metadata !"round.dynamic", 7373 metadata !"fpexcept.strict") #0 7374 ret <2 x float> %result 7375} 7376 7377define <3 x double> @constrained_vector_sitofp_v3f64_v3i32(<3 x i32> %x) #0 { 7378; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i32: 7379; PC64LE: # %bb.0: # %entry 7380; PC64LE-NEXT: xxswapd 0, 34 7381; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 7382; PC64LE-NEXT: mfvsrwz 3, 34 7383; PC64LE-NEXT: mtfprwa 3, 3 7384; PC64LE-NEXT: mffprwz 3, 0 7385; PC64LE-NEXT: mffprwz 4, 1 7386; PC64LE-NEXT: mtfprwa 0, 3 7387; PC64LE-NEXT: mtfprwa 2, 4 7388; PC64LE-NEXT: xscvsxddp 1, 0 7389; PC64LE-NEXT: xscvsxddp 2, 2 7390; PC64LE-NEXT: xscvsxddp 3, 3 7391; PC64LE-NEXT: blr 7392; 7393; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i32: 7394; PC64LE9: # %bb.0: # %entry 7395; PC64LE9-NEXT: li 3, 0 7396; PC64LE9-NEXT: vextuwrx 3, 3, 2 7397; PC64LE9-NEXT: mtfprwa 0, 3 7398; PC64LE9-NEXT: li 3, 4 7399; PC64LE9-NEXT: vextuwrx 3, 3, 2 7400; PC64LE9-NEXT: xscvsxddp 1, 0 7401; PC64LE9-NEXT: mtfprwa 0, 3 7402; PC64LE9-NEXT: mfvsrwz 3, 34 7403; PC64LE9-NEXT: xscvsxddp 2, 0 7404; PC64LE9-NEXT: mtfprwa 0, 3 7405; PC64LE9-NEXT: xscvsxddp 3, 0 7406; PC64LE9-NEXT: blr 7407entry: 7408 %result = call <3 x double> 7409 @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32> %x, 7410 metadata !"round.dynamic", 7411 metadata !"fpexcept.strict") #0 7412 ret <3 x double> %result 7413} 7414 7415define <3 x float> @constrained_vector_sitofp_v3f32_v3i32(<3 x i32> %x) #0 { 7416; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i32: 7417; PC64LE: # %bb.0: # %entry 7418; PC64LE-NEXT: xxswapd 0, 34 7419; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 7420; PC64LE-NEXT: addis 3, 2, .LCPI161_0@toc@ha 7421; PC64LE-NEXT: addi 3, 3, .LCPI161_0@toc@l 7422; PC64LE-NEXT: lvx 4, 0, 3 7423; PC64LE-NEXT: mffprwz 4, 0 7424; PC64LE-NEXT: mffprwz 5, 1 7425; PC64LE-NEXT: mtfprwa 0, 4 7426; PC64LE-NEXT: mtfprwa 1, 5 7427; PC64LE-NEXT: mfvsrwz 4, 34 7428; PC64LE-NEXT: xscvsxdsp 0, 0 7429; PC64LE-NEXT: xscvsxdsp 1, 1 7430; PC64LE-NEXT: mtfprwa 2, 4 7431; PC64LE-NEXT: xscvsxdsp 2, 2 7432; PC64LE-NEXT: xscvdpspn 0, 0 7433; PC64LE-NEXT: xscvdpspn 1, 1 7434; PC64LE-NEXT: xscvdpspn 34, 2 7435; PC64LE-NEXT: xxmrghw 35, 1, 0 7436; PC64LE-NEXT: vperm 2, 2, 3, 4 7437; PC64LE-NEXT: blr 7438; 7439; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i32: 7440; PC64LE9: # %bb.0: # %entry 7441; PC64LE9-NEXT: li 3, 0 7442; PC64LE9-NEXT: vextuwrx 3, 3, 2 7443; PC64LE9-NEXT: mtfprwa 0, 3 7444; PC64LE9-NEXT: li 3, 4 7445; PC64LE9-NEXT: vextuwrx 3, 3, 2 7446; PC64LE9-NEXT: xscvsxdsp 0, 0 7447; PC64LE9-NEXT: mtfprwa 1, 3 7448; PC64LE9-NEXT: addis 3, 2, .LCPI161_0@toc@ha 7449; PC64LE9-NEXT: xscvsxdsp 1, 1 7450; PC64LE9-NEXT: addi 3, 3, .LCPI161_0@toc@l 7451; PC64LE9-NEXT: xscvdpspn 0, 0 7452; PC64LE9-NEXT: lxv 36, 0(3) 7453; PC64LE9-NEXT: mfvsrwz 3, 34 7454; PC64LE9-NEXT: xscvdpspn 1, 1 7455; PC64LE9-NEXT: xxmrghw 35, 1, 0 7456; PC64LE9-NEXT: mtfprwa 0, 3 7457; PC64LE9-NEXT: xscvsxdsp 0, 0 7458; PC64LE9-NEXT: xscvdpspn 34, 0 7459; PC64LE9-NEXT: vperm 2, 2, 3, 4 7460; PC64LE9-NEXT: blr 7461entry: 7462 %result = call <3 x float> 7463 @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32> %x, 7464 metadata !"round.dynamic", 7465 metadata !"fpexcept.strict") #0 7466 ret <3 x float> %result 7467} 7468 7469define <3 x double> @constrained_vector_sitofp_v3f64_v3i64(<3 x i64> %x) #0 { 7470; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i64: 7471; PC64LE: # %bb.0: # %entry 7472; PC64LE-NEXT: mtfprd 0, 3 7473; PC64LE-NEXT: mtfprd 2, 4 7474; PC64LE-NEXT: mtfprd 3, 5 7475; PC64LE-NEXT: xscvsxddp 1, 0 7476; PC64LE-NEXT: xscvsxddp 2, 2 7477; PC64LE-NEXT: xscvsxddp 3, 3 7478; PC64LE-NEXT: blr 7479; 7480; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i64: 7481; PC64LE9: # %bb.0: # %entry 7482; PC64LE9-NEXT: mtfprd 0, 3 7483; PC64LE9-NEXT: xscvsxddp 1, 0 7484; PC64LE9-NEXT: mtfprd 0, 4 7485; PC64LE9-NEXT: xscvsxddp 2, 0 7486; PC64LE9-NEXT: mtfprd 0, 5 7487; PC64LE9-NEXT: xscvsxddp 3, 0 7488; PC64LE9-NEXT: blr 7489entry: 7490 %result = call <3 x double> 7491 @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64> %x, 7492 metadata !"round.dynamic", 7493 metadata !"fpexcept.strict") #0 7494 ret <3 x double> %result 7495} 7496 7497define <3 x float> @constrained_vector_sitofp_v3f32_v3i64(<3 x i64> %x) #0 { 7498; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i64: 7499; PC64LE: # %bb.0: # %entry 7500; PC64LE-NEXT: mtfprd 0, 3 7501; PC64LE-NEXT: addis 6, 2, .LCPI163_0@toc@ha 7502; PC64LE-NEXT: mtfprd 1, 4 7503; PC64LE-NEXT: addi 3, 6, .LCPI163_0@toc@l 7504; PC64LE-NEXT: xscvsxdsp 0, 0 7505; PC64LE-NEXT: lvx 4, 0, 3 7506; PC64LE-NEXT: xscvsxdsp 1, 1 7507; PC64LE-NEXT: mtfprd 2, 5 7508; PC64LE-NEXT: xscvsxdsp 2, 2 7509; PC64LE-NEXT: xscvdpspn 0, 0 7510; PC64LE-NEXT: xscvdpspn 1, 1 7511; PC64LE-NEXT: xscvdpspn 34, 2 7512; PC64LE-NEXT: xxmrghw 35, 1, 0 7513; PC64LE-NEXT: vperm 2, 2, 3, 4 7514; PC64LE-NEXT: blr 7515; 7516; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i64: 7517; PC64LE9: # %bb.0: # %entry 7518; PC64LE9-NEXT: mtfprd 0, 3 7519; PC64LE9-NEXT: mtfprd 1, 4 7520; PC64LE9-NEXT: addis 3, 2, .LCPI163_0@toc@ha 7521; PC64LE9-NEXT: xscvsxdsp 0, 0 7522; PC64LE9-NEXT: xscvsxdsp 1, 1 7523; PC64LE9-NEXT: addi 3, 3, .LCPI163_0@toc@l 7524; PC64LE9-NEXT: lxv 35, 0(3) 7525; PC64LE9-NEXT: xscvdpspn 0, 0 7526; PC64LE9-NEXT: xscvdpspn 1, 1 7527; PC64LE9-NEXT: xxmrghw 34, 1, 0 7528; PC64LE9-NEXT: mtfprd 0, 5 7529; PC64LE9-NEXT: xscvsxdsp 0, 0 7530; PC64LE9-NEXT: xscvdpspn 36, 0 7531; PC64LE9-NEXT: vperm 2, 4, 2, 3 7532; PC64LE9-NEXT: blr 7533entry: 7534 %result = call <3 x float> 7535 @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64> %x, 7536 metadata !"round.dynamic", 7537 metadata !"fpexcept.strict") #0 7538 ret <3 x float> %result 7539} 7540 7541define <4 x double> @constrained_vector_sitofp_v4f64_v4i32(<4 x i32> %x) #0 { 7542; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i32: 7543; PC64LE: # %bb.0: # %entry 7544; PC64LE-NEXT: xxswapd 0, 34 7545; PC64LE-NEXT: mfvsrwz 3, 34 7546; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 7547; PC64LE-NEXT: mtfprwa 2, 3 7548; PC64LE-NEXT: mffprwz 3, 0 7549; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 7550; PC64LE-NEXT: mffprwz 4, 1 7551; PC64LE-NEXT: mtfprwa 1, 3 7552; PC64LE-NEXT: mffprwz 3, 0 7553; PC64LE-NEXT: mtfprwa 3, 4 7554; PC64LE-NEXT: xscvsxddp 0, 2 7555; PC64LE-NEXT: mtfprwa 2, 3 7556; PC64LE-NEXT: xscvsxddp 1, 1 7557; PC64LE-NEXT: xscvsxddp 3, 3 7558; PC64LE-NEXT: xscvsxddp 2, 2 7559; PC64LE-NEXT: xxmrghd 34, 3, 1 7560; PC64LE-NEXT: xxmrghd 35, 2, 0 7561; PC64LE-NEXT: blr 7562; 7563; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i32: 7564; PC64LE9: # %bb.0: # %entry 7565; PC64LE9-NEXT: li 3, 0 7566; PC64LE9-NEXT: vextuwrx 3, 3, 2 7567; PC64LE9-NEXT: mtfprwa 0, 3 7568; PC64LE9-NEXT: li 3, 4 7569; PC64LE9-NEXT: vextuwrx 3, 3, 2 7570; PC64LE9-NEXT: xscvsxddp 0, 0 7571; PC64LE9-NEXT: mtfprwa 1, 3 7572; PC64LE9-NEXT: li 3, 12 7573; PC64LE9-NEXT: xscvsxddp 1, 1 7574; PC64LE9-NEXT: vextuwrx 3, 3, 2 7575; PC64LE9-NEXT: xxmrghd 0, 1, 0 7576; PC64LE9-NEXT: mtfprwa 1, 3 7577; PC64LE9-NEXT: mfvsrwz 3, 34 7578; PC64LE9-NEXT: mtfprwa 2, 3 7579; PC64LE9-NEXT: xscvsxddp 1, 1 7580; PC64LE9-NEXT: xscvsxddp 2, 2 7581; PC64LE9-NEXT: xxlor 34, 0, 0 7582; PC64LE9-NEXT: xxmrghd 35, 1, 2 7583; PC64LE9-NEXT: blr 7584entry: 7585 %result = call <4 x double> 7586 @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32> %x, 7587 metadata !"round.dynamic", 7588 metadata !"fpexcept.strict") #0 7589 ret <4 x double> %result 7590} 7591 7592define <4 x float> @constrained_vector_sitofp_v4f32_v4i16(<4 x i16> %x) #0 { 7593; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i16: 7594; PC64LE: # %bb.0: # %entry 7595; PC64LE-NEXT: vmrglh 2, 2, 2 7596; PC64LE-NEXT: vspltisw 3, 8 7597; PC64LE-NEXT: vadduwm 3, 3, 3 7598; PC64LE-NEXT: vslw 2, 2, 3 7599; PC64LE-NEXT: vsraw 2, 2, 3 7600; PC64LE-NEXT: xvcvsxwsp 34, 34 7601; PC64LE-NEXT: blr 7602; 7603; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i16: 7604; PC64LE9: # %bb.0: # %entry 7605; PC64LE9-NEXT: vmrglh 2, 2, 2 7606; PC64LE9-NEXT: vextsh2w 2, 2 7607; PC64LE9-NEXT: xvcvsxwsp 34, 34 7608; PC64LE9-NEXT: blr 7609entry: 7610 %result = call <4 x float> 7611 @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16> %x, 7612 metadata !"round.dynamic", 7613 metadata !"fpexcept.strict") #0 7614 ret <4 x float> %result 7615} 7616 7617define <4 x float> @constrained_vector_sitofp_v4f32_v4i32(<4 x i32> %x) #0 { 7618; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i32: 7619; PC64LE: # %bb.0: # %entry 7620; PC64LE-NEXT: xvcvsxwsp 34, 34 7621; PC64LE-NEXT: blr 7622; 7623; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i32: 7624; PC64LE9: # %bb.0: # %entry 7625; PC64LE9-NEXT: xvcvsxwsp 34, 34 7626; PC64LE9-NEXT: blr 7627entry: 7628 %result = call <4 x float> 7629 @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32> %x, 7630 metadata !"round.dynamic", 7631 metadata !"fpexcept.strict") #0 7632 ret <4 x float> %result 7633} 7634 7635define <4 x double> @constrained_vector_sitofp_v4f64_v4i64(<4 x i64> %x) #0 { 7636; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i64: 7637; PC64LE: # %bb.0: # %entry 7638; PC64LE-NEXT: xvcvsxddp 35, 35 7639; PC64LE-NEXT: xvcvsxddp 34, 34 7640; PC64LE-NEXT: blr 7641; 7642; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i64: 7643; PC64LE9: # %bb.0: # %entry 7644; PC64LE9-NEXT: xvcvsxddp 35, 35 7645; PC64LE9-NEXT: xvcvsxddp 34, 34 7646; PC64LE9-NEXT: blr 7647entry: 7648 %result = call <4 x double> 7649 @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64> %x, 7650 metadata !"round.dynamic", 7651 metadata !"fpexcept.strict") #0 7652 ret <4 x double> %result 7653} 7654 7655define <4 x float> @constrained_vector_sitofp_v4f32_v4i64(<4 x i64> %x) #0 { 7656; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i64: 7657; PC64LE: # %bb.0: # %entry 7658; PC64LE-NEXT: xxswapd 0, 34 7659; PC64LE-NEXT: mfvsrd 3, 34 7660; PC64LE-NEXT: xxswapd 2, 35 7661; PC64LE-NEXT: mfvsrd 4, 35 7662; PC64LE-NEXT: mtfprd 1, 3 7663; PC64LE-NEXT: mffprd 3, 0 7664; PC64LE-NEXT: mtfprd 0, 4 7665; PC64LE-NEXT: mtfprd 3, 3 7666; PC64LE-NEXT: mffprd 3, 2 7667; PC64LE-NEXT: xscvsxdsp 1, 1 7668; PC64LE-NEXT: mtfprd 2, 3 7669; PC64LE-NEXT: xscvsxdsp 0, 0 7670; PC64LE-NEXT: xscvsxdsp 3, 3 7671; PC64LE-NEXT: xscvsxdsp 2, 2 7672; PC64LE-NEXT: xxmrghd 0, 0, 1 7673; PC64LE-NEXT: xxmrghd 1, 2, 3 7674; PC64LE-NEXT: xvcvdpsp 34, 0 7675; PC64LE-NEXT: xvcvdpsp 35, 1 7676; PC64LE-NEXT: vmrgew 2, 2, 3 7677; PC64LE-NEXT: blr 7678; 7679; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i64: 7680; PC64LE9: # %bb.0: # %entry 7681; PC64LE9-NEXT: mfvsrld 3, 34 7682; PC64LE9-NEXT: mtfprd 0, 3 7683; PC64LE9-NEXT: mfvsrld 3, 35 7684; PC64LE9-NEXT: xscvsxdsp 0, 0 7685; PC64LE9-NEXT: mtfprd 1, 3 7686; PC64LE9-NEXT: mfvsrd 3, 34 7687; PC64LE9-NEXT: xscvsxdsp 1, 1 7688; PC64LE9-NEXT: xxmrghd 0, 1, 0 7689; PC64LE9-NEXT: xvcvdpsp 36, 0 7690; PC64LE9-NEXT: mtfprd 0, 3 7691; PC64LE9-NEXT: mfvsrd 3, 35 7692; PC64LE9-NEXT: mtfprd 1, 3 7693; PC64LE9-NEXT: xscvsxdsp 0, 0 7694; PC64LE9-NEXT: xscvsxdsp 1, 1 7695; PC64LE9-NEXT: xxmrghd 0, 1, 0 7696; PC64LE9-NEXT: xvcvdpsp 34, 0 7697; PC64LE9-NEXT: vmrgew 2, 2, 4 7698; PC64LE9-NEXT: blr 7699entry: 7700 %result = call <4 x float> 7701 @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64> %x, 7702 metadata !"round.dynamic", 7703 metadata !"fpexcept.strict") #0 7704 ret <4 x float> %result 7705} 7706 7707define <1 x double> @constrained_vector_uitofp_v1f64_v1i32(<1 x i32> %x) #0 { 7708; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i32: 7709; PC64LE: # %bb.0: # %entry 7710; PC64LE-NEXT: mtfprwz 0, 3 7711; PC64LE-NEXT: xscvuxddp 1, 0 7712; PC64LE-NEXT: blr 7713; 7714; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i32: 7715; PC64LE9: # %bb.0: # %entry 7716; PC64LE9-NEXT: mtfprwz 0, 3 7717; PC64LE9-NEXT: xscvuxddp 1, 0 7718; PC64LE9-NEXT: blr 7719entry: 7720 %result = call <1 x double> 7721 @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32> %x, 7722 metadata !"round.dynamic", 7723 metadata !"fpexcept.strict") #0 7724 ret <1 x double> %result 7725} 7726 7727define <1 x float> @constrained_vector_uitofp_v1f32_v1i32(<1 x i32> %x) #0 { 7728; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i32: 7729; PC64LE: # %bb.0: # %entry 7730; PC64LE-NEXT: mtfprwz 0, 3 7731; PC64LE-NEXT: xscvuxdsp 1, 0 7732; PC64LE-NEXT: blr 7733; 7734; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i32: 7735; PC64LE9: # %bb.0: # %entry 7736; PC64LE9-NEXT: mtfprwz 0, 3 7737; PC64LE9-NEXT: xscvuxdsp 1, 0 7738; PC64LE9-NEXT: blr 7739entry: 7740 %result = call <1 x float> 7741 @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32> %x, 7742 metadata !"round.dynamic", 7743 metadata !"fpexcept.strict") #0 7744 ret <1 x float> %result 7745} 7746 7747define <1 x double> @constrained_vector_uitofp_v1f64_v1i64(<1 x i64> %x) #0 { 7748; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i64: 7749; PC64LE: # %bb.0: # %entry 7750; PC64LE-NEXT: mtfprd 0, 3 7751; PC64LE-NEXT: xscvuxddp 1, 0 7752; PC64LE-NEXT: blr 7753; 7754; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i64: 7755; PC64LE9: # %bb.0: # %entry 7756; PC64LE9-NEXT: mtfprd 0, 3 7757; PC64LE9-NEXT: xscvuxddp 1, 0 7758; PC64LE9-NEXT: blr 7759entry: 7760 %result = call <1 x double> 7761 @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64> %x, 7762 metadata !"round.dynamic", 7763 metadata !"fpexcept.strict") #0 7764 ret <1 x double> %result 7765} 7766 7767define <1 x float> @constrained_vector_uitofp_v1f32_v1i64(<1 x i64> %x) #0 { 7768; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i64: 7769; PC64LE: # %bb.0: # %entry 7770; PC64LE-NEXT: mtfprd 0, 3 7771; PC64LE-NEXT: xscvuxdsp 1, 0 7772; PC64LE-NEXT: blr 7773; 7774; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i64: 7775; PC64LE9: # %bb.0: # %entry 7776; PC64LE9-NEXT: mtfprd 0, 3 7777; PC64LE9-NEXT: xscvuxdsp 1, 0 7778; PC64LE9-NEXT: blr 7779entry: 7780 %result = call <1 x float> 7781 @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64> %x, 7782 metadata !"round.dynamic", 7783 metadata !"fpexcept.strict") #0 7784 ret <1 x float> %result 7785} 7786 7787define <2 x double> @constrained_vector_uitofp_v2f64_v2i16(<2 x i16> %x) #0 { 7788; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i16: 7789; PC64LE: # %bb.0: # %entry 7790; PC64LE-NEXT: addis 3, 2, .LCPI173_0@toc@ha 7791; PC64LE-NEXT: xxlxor 36, 36, 36 7792; PC64LE-NEXT: addi 3, 3, .LCPI173_0@toc@l 7793; PC64LE-NEXT: lvx 3, 0, 3 7794; PC64LE-NEXT: vperm 2, 4, 2, 3 7795; PC64LE-NEXT: xvcvuxddp 34, 34 7796; PC64LE-NEXT: blr 7797; 7798; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i16: 7799; PC64LE9: # %bb.0: # %entry 7800; PC64LE9-NEXT: addis 3, 2, .LCPI173_0@toc@ha 7801; PC64LE9-NEXT: xxlxor 36, 36, 36 7802; PC64LE9-NEXT: addi 3, 3, .LCPI173_0@toc@l 7803; PC64LE9-NEXT: lxv 35, 0(3) 7804; PC64LE9-NEXT: vperm 2, 4, 2, 3 7805; PC64LE9-NEXT: xvcvuxddp 34, 34 7806; PC64LE9-NEXT: blr 7807entry: 7808 %result = call <2 x double> 7809 @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16> %x, 7810 metadata !"round.dynamic", 7811 metadata !"fpexcept.strict") #0 7812 ret <2 x double> %result 7813} 7814 7815define <2 x double> @constrained_vector_uitofp_v2f64_v2i32(<2 x i32> %x) #0 { 7816; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i32: 7817; PC64LE: # %bb.0: # %entry 7818; PC64LE-NEXT: xxswapd 0, 34 7819; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 7820; PC64LE-NEXT: mffprwz 3, 0 7821; PC64LE-NEXT: mffprwz 4, 1 7822; PC64LE-NEXT: mtfprwz 0, 3 7823; PC64LE-NEXT: mtfprwz 1, 4 7824; PC64LE-NEXT: xscvuxddp 0, 0 7825; PC64LE-NEXT: xscvuxddp 1, 1 7826; PC64LE-NEXT: xxmrghd 34, 1, 0 7827; PC64LE-NEXT: blr 7828; 7829; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i32: 7830; PC64LE9: # %bb.0: # %entry 7831; PC64LE9-NEXT: li 3, 0 7832; PC64LE9-NEXT: vextuwrx 3, 3, 2 7833; PC64LE9-NEXT: mtfprwz 0, 3 7834; PC64LE9-NEXT: li 3, 4 7835; PC64LE9-NEXT: vextuwrx 3, 3, 2 7836; PC64LE9-NEXT: xscvuxddp 0, 0 7837; PC64LE9-NEXT: mtfprwz 1, 3 7838; PC64LE9-NEXT: xscvuxddp 1, 1 7839; PC64LE9-NEXT: xxmrghd 34, 1, 0 7840; PC64LE9-NEXT: blr 7841entry: 7842 %result = call <2 x double> 7843 @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32> %x, 7844 metadata !"round.dynamic", 7845 metadata !"fpexcept.strict") #0 7846 ret <2 x double> %result 7847} 7848 7849define <2 x float> @constrained_vector_uitofp_v2f32_v2i32(<2 x i32> %x) #0 { 7850; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i32: 7851; PC64LE: # %bb.0: # %entry 7852; PC64LE-NEXT: xxswapd 0, 34 7853; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 7854; PC64LE-NEXT: mffprwz 3, 0 7855; PC64LE-NEXT: mffprwz 4, 1 7856; PC64LE-NEXT: mtfprwz 0, 3 7857; PC64LE-NEXT: mtfprwz 1, 4 7858; PC64LE-NEXT: xscvuxdsp 0, 0 7859; PC64LE-NEXT: xscvuxdsp 1, 1 7860; PC64LE-NEXT: xscvdpspn 0, 0 7861; PC64LE-NEXT: xscvdpspn 1, 1 7862; PC64LE-NEXT: xxmrghw 34, 1, 0 7863; PC64LE-NEXT: blr 7864; 7865; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i32: 7866; PC64LE9: # %bb.0: # %entry 7867; PC64LE9-NEXT: li 3, 0 7868; PC64LE9-NEXT: vextuwrx 3, 3, 2 7869; PC64LE9-NEXT: mtfprwz 0, 3 7870; PC64LE9-NEXT: li 3, 4 7871; PC64LE9-NEXT: vextuwrx 3, 3, 2 7872; PC64LE9-NEXT: xscvuxdsp 0, 0 7873; PC64LE9-NEXT: mtfprwz 1, 3 7874; PC64LE9-NEXT: xscvuxdsp 1, 1 7875; PC64LE9-NEXT: xscvdpspn 0, 0 7876; PC64LE9-NEXT: xscvdpspn 1, 1 7877; PC64LE9-NEXT: xxmrghw 34, 1, 0 7878; PC64LE9-NEXT: blr 7879entry: 7880 %result = call <2 x float> 7881 @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32> %x, 7882 metadata !"round.dynamic", 7883 metadata !"fpexcept.strict") #0 7884 ret <2 x float> %result 7885} 7886 7887define <2 x double> @constrained_vector_uitofp_v2f64_v2i64(<2 x i64> %x) #0 { 7888; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i64: 7889; PC64LE: # %bb.0: # %entry 7890; PC64LE-NEXT: xvcvuxddp 34, 34 7891; PC64LE-NEXT: blr 7892; 7893; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i64: 7894; PC64LE9: # %bb.0: # %entry 7895; PC64LE9-NEXT: xvcvuxddp 34, 34 7896; PC64LE9-NEXT: blr 7897entry: 7898 %result = call <2 x double> 7899 @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64> %x, 7900 metadata !"round.dynamic", 7901 metadata !"fpexcept.strict") #0 7902 ret <2 x double> %result 7903} 7904 7905define <2 x float> @constrained_vector_uitofp_v2f32_v2i64(<2 x i64> %x) #0 { 7906; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i64: 7907; PC64LE: # %bb.0: # %entry 7908; PC64LE-NEXT: xxswapd 0, 34 7909; PC64LE-NEXT: mfvsrd 3, 34 7910; PC64LE-NEXT: mffprd 4, 0 7911; PC64LE-NEXT: mtfprd 0, 3 7912; PC64LE-NEXT: mtfprd 1, 4 7913; PC64LE-NEXT: xscvuxdsp 0, 0 7914; PC64LE-NEXT: xscvuxdsp 1, 1 7915; PC64LE-NEXT: xscvdpspn 0, 0 7916; PC64LE-NEXT: xscvdpspn 1, 1 7917; PC64LE-NEXT: xxmrghw 34, 0, 1 7918; PC64LE-NEXT: blr 7919; 7920; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i64: 7921; PC64LE9: # %bb.0: # %entry 7922; PC64LE9-NEXT: mfvsrld 3, 34 7923; PC64LE9-NEXT: mtfprd 0, 3 7924; PC64LE9-NEXT: mfvsrd 3, 34 7925; PC64LE9-NEXT: mtfprd 1, 3 7926; PC64LE9-NEXT: xscvuxdsp 0, 0 7927; PC64LE9-NEXT: xscvuxdsp 1, 1 7928; PC64LE9-NEXT: xscvdpspn 0, 0 7929; PC64LE9-NEXT: xscvdpspn 1, 1 7930; PC64LE9-NEXT: xxmrghw 34, 1, 0 7931; PC64LE9-NEXT: blr 7932entry: 7933 %result = call <2 x float> 7934 @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64> %x, 7935 metadata !"round.dynamic", 7936 metadata !"fpexcept.strict") #0 7937 ret <2 x float> %result 7938} 7939 7940define <3 x double> @constrained_vector_uitofp_v3f64_v3i32(<3 x i32> %x) #0 { 7941; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i32: 7942; PC64LE: # %bb.0: # %entry 7943; PC64LE-NEXT: xxswapd 0, 34 7944; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 7945; PC64LE-NEXT: mfvsrwz 3, 34 7946; PC64LE-NEXT: mtfprwz 3, 3 7947; PC64LE-NEXT: mffprwz 3, 0 7948; PC64LE-NEXT: mffprwz 4, 1 7949; PC64LE-NEXT: mtfprwz 0, 3 7950; PC64LE-NEXT: mtfprwz 2, 4 7951; PC64LE-NEXT: xscvuxddp 1, 0 7952; PC64LE-NEXT: xscvuxddp 2, 2 7953; PC64LE-NEXT: xscvuxddp 3, 3 7954; PC64LE-NEXT: blr 7955; 7956; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i32: 7957; PC64LE9: # %bb.0: # %entry 7958; PC64LE9-NEXT: li 3, 0 7959; PC64LE9-NEXT: vextuwrx 3, 3, 2 7960; PC64LE9-NEXT: mtfprwz 0, 3 7961; PC64LE9-NEXT: li 3, 4 7962; PC64LE9-NEXT: vextuwrx 3, 3, 2 7963; PC64LE9-NEXT: xscvuxddp 1, 0 7964; PC64LE9-NEXT: mtfprwz 0, 3 7965; PC64LE9-NEXT: mfvsrwz 3, 34 7966; PC64LE9-NEXT: xscvuxddp 2, 0 7967; PC64LE9-NEXT: mtfprwz 0, 3 7968; PC64LE9-NEXT: xscvuxddp 3, 0 7969; PC64LE9-NEXT: blr 7970entry: 7971 %result = call <3 x double> 7972 @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32> %x, 7973 metadata !"round.dynamic", 7974 metadata !"fpexcept.strict") #0 7975 ret <3 x double> %result 7976} 7977 7978define <3 x float> @constrained_vector_uitofp_v3f32_v3i32(<3 x i32> %x) #0 { 7979; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i32: 7980; PC64LE: # %bb.0: # %entry 7981; PC64LE-NEXT: xxswapd 0, 34 7982; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 7983; PC64LE-NEXT: addis 3, 2, .LCPI179_0@toc@ha 7984; PC64LE-NEXT: addi 3, 3, .LCPI179_0@toc@l 7985; PC64LE-NEXT: lvx 4, 0, 3 7986; PC64LE-NEXT: mffprwz 4, 0 7987; PC64LE-NEXT: mffprwz 5, 1 7988; PC64LE-NEXT: mtfprwz 0, 4 7989; PC64LE-NEXT: mtfprwz 1, 5 7990; PC64LE-NEXT: mfvsrwz 4, 34 7991; PC64LE-NEXT: xscvuxdsp 0, 0 7992; PC64LE-NEXT: xscvuxdsp 1, 1 7993; PC64LE-NEXT: mtfprwz 2, 4 7994; PC64LE-NEXT: xscvuxdsp 2, 2 7995; PC64LE-NEXT: xscvdpspn 0, 0 7996; PC64LE-NEXT: xscvdpspn 1, 1 7997; PC64LE-NEXT: xscvdpspn 34, 2 7998; PC64LE-NEXT: xxmrghw 35, 1, 0 7999; PC64LE-NEXT: vperm 2, 2, 3, 4 8000; PC64LE-NEXT: blr 8001; 8002; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i32: 8003; PC64LE9: # %bb.0: # %entry 8004; PC64LE9-NEXT: li 3, 0 8005; PC64LE9-NEXT: vextuwrx 3, 3, 2 8006; PC64LE9-NEXT: mtfprwz 0, 3 8007; PC64LE9-NEXT: li 3, 4 8008; PC64LE9-NEXT: vextuwrx 3, 3, 2 8009; PC64LE9-NEXT: xscvuxdsp 0, 0 8010; PC64LE9-NEXT: mtfprwz 1, 3 8011; PC64LE9-NEXT: addis 3, 2, .LCPI179_0@toc@ha 8012; PC64LE9-NEXT: xscvuxdsp 1, 1 8013; PC64LE9-NEXT: addi 3, 3, .LCPI179_0@toc@l 8014; PC64LE9-NEXT: xscvdpspn 0, 0 8015; PC64LE9-NEXT: lxv 36, 0(3) 8016; PC64LE9-NEXT: mfvsrwz 3, 34 8017; PC64LE9-NEXT: xscvdpspn 1, 1 8018; PC64LE9-NEXT: xxmrghw 35, 1, 0 8019; PC64LE9-NEXT: mtfprwz 0, 3 8020; PC64LE9-NEXT: xscvuxdsp 0, 0 8021; PC64LE9-NEXT: xscvdpspn 34, 0 8022; PC64LE9-NEXT: vperm 2, 2, 3, 4 8023; PC64LE9-NEXT: blr 8024entry: 8025 %result = call <3 x float> 8026 @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32> %x, 8027 metadata !"round.dynamic", 8028 metadata !"fpexcept.strict") #0 8029 ret <3 x float> %result 8030} 8031 8032define <3 x double> @constrained_vector_uitofp_v3f64_v3i64(<3 x i64> %x) #0 { 8033; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i64: 8034; PC64LE: # %bb.0: # %entry 8035; PC64LE-NEXT: mtfprd 0, 3 8036; PC64LE-NEXT: mtfprd 2, 4 8037; PC64LE-NEXT: mtfprd 3, 5 8038; PC64LE-NEXT: xscvuxddp 1, 0 8039; PC64LE-NEXT: xscvuxddp 2, 2 8040; PC64LE-NEXT: xscvuxddp 3, 3 8041; PC64LE-NEXT: blr 8042; 8043; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i64: 8044; PC64LE9: # %bb.0: # %entry 8045; PC64LE9-NEXT: mtfprd 0, 3 8046; PC64LE9-NEXT: xscvuxddp 1, 0 8047; PC64LE9-NEXT: mtfprd 0, 4 8048; PC64LE9-NEXT: xscvuxddp 2, 0 8049; PC64LE9-NEXT: mtfprd 0, 5 8050; PC64LE9-NEXT: xscvuxddp 3, 0 8051; PC64LE9-NEXT: blr 8052entry: 8053 %result = call <3 x double> 8054 @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64> %x, 8055 metadata !"round.dynamic", 8056 metadata !"fpexcept.strict") #0 8057 ret <3 x double> %result 8058} 8059 8060define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 { 8061; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i64: 8062; PC64LE: # %bb.0: # %entry 8063; PC64LE-NEXT: mtfprd 0, 3 8064; PC64LE-NEXT: addis 6, 2, .LCPI181_0@toc@ha 8065; PC64LE-NEXT: mtfprd 1, 4 8066; PC64LE-NEXT: addi 3, 6, .LCPI181_0@toc@l 8067; PC64LE-NEXT: xscvuxdsp 0, 0 8068; PC64LE-NEXT: lvx 4, 0, 3 8069; PC64LE-NEXT: xscvuxdsp 1, 1 8070; PC64LE-NEXT: mtfprd 2, 5 8071; PC64LE-NEXT: xscvuxdsp 2, 2 8072; PC64LE-NEXT: xscvdpspn 0, 0 8073; PC64LE-NEXT: xscvdpspn 1, 1 8074; PC64LE-NEXT: xscvdpspn 34, 2 8075; PC64LE-NEXT: xxmrghw 35, 1, 0 8076; PC64LE-NEXT: vperm 2, 2, 3, 4 8077; PC64LE-NEXT: blr 8078; 8079; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i64: 8080; PC64LE9: # %bb.0: # %entry 8081; PC64LE9-NEXT: mtfprd 0, 3 8082; PC64LE9-NEXT: mtfprd 1, 4 8083; PC64LE9-NEXT: addis 3, 2, .LCPI181_0@toc@ha 8084; PC64LE9-NEXT: xscvuxdsp 0, 0 8085; PC64LE9-NEXT: xscvuxdsp 1, 1 8086; PC64LE9-NEXT: addi 3, 3, .LCPI181_0@toc@l 8087; PC64LE9-NEXT: lxv 35, 0(3) 8088; PC64LE9-NEXT: xscvdpspn 0, 0 8089; PC64LE9-NEXT: xscvdpspn 1, 1 8090; PC64LE9-NEXT: xxmrghw 34, 1, 0 8091; PC64LE9-NEXT: mtfprd 0, 5 8092; PC64LE9-NEXT: xscvuxdsp 0, 0 8093; PC64LE9-NEXT: xscvdpspn 36, 0 8094; PC64LE9-NEXT: vperm 2, 4, 2, 3 8095; PC64LE9-NEXT: blr 8096entry: 8097 %result = call <3 x float> 8098 @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64> %x, 8099 metadata !"round.dynamic", 8100 metadata !"fpexcept.strict") #0 8101 ret <3 x float> %result 8102} 8103 8104define <4 x double> @constrained_vector_uitofp_v4f64_v4i32(<4 x i32> %x) #0 { 8105; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i32: 8106; PC64LE: # %bb.0: # %entry 8107; PC64LE-NEXT: xxswapd 0, 34 8108; PC64LE-NEXT: mfvsrwz 3, 34 8109; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 8110; PC64LE-NEXT: mtfprwz 2, 3 8111; PC64LE-NEXT: mffprwz 3, 0 8112; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 8113; PC64LE-NEXT: mffprwz 4, 1 8114; PC64LE-NEXT: mtfprwz 1, 3 8115; PC64LE-NEXT: mffprwz 3, 0 8116; PC64LE-NEXT: mtfprwz 3, 4 8117; PC64LE-NEXT: xscvuxddp 0, 2 8118; PC64LE-NEXT: mtfprwz 2, 3 8119; PC64LE-NEXT: xscvuxddp 1, 1 8120; PC64LE-NEXT: xscvuxddp 3, 3 8121; PC64LE-NEXT: xscvuxddp 2, 2 8122; PC64LE-NEXT: xxmrghd 34, 3, 1 8123; PC64LE-NEXT: xxmrghd 35, 2, 0 8124; PC64LE-NEXT: blr 8125; 8126; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i32: 8127; PC64LE9: # %bb.0: # %entry 8128; PC64LE9-NEXT: li 3, 0 8129; PC64LE9-NEXT: vextuwrx 3, 3, 2 8130; PC64LE9-NEXT: mtfprwz 0, 3 8131; PC64LE9-NEXT: li 3, 4 8132; PC64LE9-NEXT: vextuwrx 3, 3, 2 8133; PC64LE9-NEXT: xscvuxddp 0, 0 8134; PC64LE9-NEXT: mtfprwz 1, 3 8135; PC64LE9-NEXT: li 3, 12 8136; PC64LE9-NEXT: xscvuxddp 1, 1 8137; PC64LE9-NEXT: vextuwrx 3, 3, 2 8138; PC64LE9-NEXT: xxmrghd 0, 1, 0 8139; PC64LE9-NEXT: mtfprwz 1, 3 8140; PC64LE9-NEXT: mfvsrwz 3, 34 8141; PC64LE9-NEXT: mtfprwz 2, 3 8142; PC64LE9-NEXT: xscvuxddp 1, 1 8143; PC64LE9-NEXT: xscvuxddp 2, 2 8144; PC64LE9-NEXT: xxlor 34, 0, 0 8145; PC64LE9-NEXT: xxmrghd 35, 1, 2 8146; PC64LE9-NEXT: blr 8147entry: 8148 %result = call <4 x double> 8149 @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32> %x, 8150 metadata !"round.dynamic", 8151 metadata !"fpexcept.strict") #0 8152 ret <4 x double> %result 8153} 8154 8155define <4 x float> @constrained_vector_uitofp_v4f32_v4i16(<4 x i16> %x) #0 { 8156; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i16: 8157; PC64LE: # %bb.0: # %entry 8158; PC64LE-NEXT: xxlxor 35, 35, 35 8159; PC64LE-NEXT: vmrglh 2, 3, 2 8160; PC64LE-NEXT: xvcvuxwsp 34, 34 8161; PC64LE-NEXT: blr 8162; 8163; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i16: 8164; PC64LE9: # %bb.0: # %entry 8165; PC64LE9-NEXT: xxlxor 35, 35, 35 8166; PC64LE9-NEXT: vmrglh 2, 3, 2 8167; PC64LE9-NEXT: xvcvuxwsp 34, 34 8168; PC64LE9-NEXT: blr 8169entry: 8170 %result = call <4 x float> 8171 @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16> %x, 8172 metadata !"round.dynamic", 8173 metadata !"fpexcept.strict") #0 8174 ret <4 x float> %result 8175} 8176 8177define <4 x float> @constrained_vector_uitofp_v4f32_v4i32(<4 x i32> %x) #0 { 8178; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i32: 8179; PC64LE: # %bb.0: # %entry 8180; PC64LE-NEXT: xvcvuxwsp 34, 34 8181; PC64LE-NEXT: blr 8182; 8183; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i32: 8184; PC64LE9: # %bb.0: # %entry 8185; PC64LE9-NEXT: xvcvuxwsp 34, 34 8186; PC64LE9-NEXT: blr 8187entry: 8188 %result = call <4 x float> 8189 @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32> %x, 8190 metadata !"round.dynamic", 8191 metadata !"fpexcept.strict") #0 8192 ret <4 x float> %result 8193} 8194 8195define <4 x double> @constrained_vector_uitofp_v4f64_v4i64(<4 x i64> %x) #0 { 8196; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i64: 8197; PC64LE: # %bb.0: # %entry 8198; PC64LE-NEXT: xvcvuxddp 35, 35 8199; PC64LE-NEXT: xvcvuxddp 34, 34 8200; PC64LE-NEXT: blr 8201; 8202; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i64: 8203; PC64LE9: # %bb.0: # %entry 8204; PC64LE9-NEXT: xvcvuxddp 35, 35 8205; PC64LE9-NEXT: xvcvuxddp 34, 34 8206; PC64LE9-NEXT: blr 8207entry: 8208 %result = call <4 x double> 8209 @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64> %x, 8210 metadata !"round.dynamic", 8211 metadata !"fpexcept.strict") #0 8212 ret <4 x double> %result 8213} 8214 8215define <4 x float> @constrained_vector_uitofp_v4f32_v4i64(<4 x i64> %x) #0 { 8216; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i64: 8217; PC64LE: # %bb.0: # %entry 8218; PC64LE-NEXT: xxswapd 0, 34 8219; PC64LE-NEXT: mfvsrd 3, 34 8220; PC64LE-NEXT: xxswapd 2, 35 8221; PC64LE-NEXT: mfvsrd 4, 35 8222; PC64LE-NEXT: mtfprd 1, 3 8223; PC64LE-NEXT: mffprd 3, 0 8224; PC64LE-NEXT: mtfprd 0, 4 8225; PC64LE-NEXT: mtfprd 3, 3 8226; PC64LE-NEXT: mffprd 3, 2 8227; PC64LE-NEXT: xscvuxdsp 1, 1 8228; PC64LE-NEXT: mtfprd 2, 3 8229; PC64LE-NEXT: xscvuxdsp 0, 0 8230; PC64LE-NEXT: xscvuxdsp 3, 3 8231; PC64LE-NEXT: xscvuxdsp 2, 2 8232; PC64LE-NEXT: xxmrghd 0, 0, 1 8233; PC64LE-NEXT: xxmrghd 1, 2, 3 8234; PC64LE-NEXT: xvcvdpsp 34, 0 8235; PC64LE-NEXT: xvcvdpsp 35, 1 8236; PC64LE-NEXT: vmrgew 2, 2, 3 8237; PC64LE-NEXT: blr 8238; 8239; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i64: 8240; PC64LE9: # %bb.0: # %entry 8241; PC64LE9-NEXT: mfvsrld 3, 34 8242; PC64LE9-NEXT: mtfprd 0, 3 8243; PC64LE9-NEXT: mfvsrld 3, 35 8244; PC64LE9-NEXT: xscvuxdsp 0, 0 8245; PC64LE9-NEXT: mtfprd 1, 3 8246; PC64LE9-NEXT: mfvsrd 3, 34 8247; PC64LE9-NEXT: xscvuxdsp 1, 1 8248; PC64LE9-NEXT: xxmrghd 0, 1, 0 8249; PC64LE9-NEXT: xvcvdpsp 36, 0 8250; PC64LE9-NEXT: mtfprd 0, 3 8251; PC64LE9-NEXT: mfvsrd 3, 35 8252; PC64LE9-NEXT: mtfprd 1, 3 8253; PC64LE9-NEXT: xscvuxdsp 0, 0 8254; PC64LE9-NEXT: xscvuxdsp 1, 1 8255; PC64LE9-NEXT: xxmrghd 0, 1, 0 8256; PC64LE9-NEXT: xvcvdpsp 34, 0 8257; PC64LE9-NEXT: vmrgew 2, 2, 4 8258; PC64LE9-NEXT: blr 8259entry: 8260 %result = call <4 x float> 8261 @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64> %x, 8262 metadata !"round.dynamic", 8263 metadata !"fpexcept.strict") #0 8264 ret <4 x float> %result 8265} 8266 8267attributes #0 = { nounwind strictfp noimplicitfloat } 8268attributes #1 = { strictfp } 8269 8270; Single width declarations 8271declare <2 x double> @llvm.experimental.constrained.fadd.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8272declare <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8273declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8274declare <2 x double> @llvm.experimental.constrained.fdiv.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8275declare <2 x double> @llvm.experimental.constrained.frem.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8276declare <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double>, metadata, metadata) 8277declare <2 x double> @llvm.experimental.constrained.pow.v2f64(<2 x double>, <2 x double>, metadata, metadata) 8278declare <2 x double> @llvm.experimental.constrained.powi.v2f64(<2 x double>, i32, metadata, metadata) 8279declare <2 x double> @llvm.experimental.constrained.sin.v2f64(<2 x double>, metadata, metadata) 8280declare <2 x double> @llvm.experimental.constrained.cos.v2f64(<2 x double>, metadata, metadata) 8281declare <2 x double> @llvm.experimental.constrained.exp.v2f64(<2 x double>, metadata, metadata) 8282declare <2 x double> @llvm.experimental.constrained.exp2.v2f64(<2 x double>, metadata, metadata) 8283declare <2 x double> @llvm.experimental.constrained.log.v2f64(<2 x double>, metadata, metadata) 8284declare <2 x double> @llvm.experimental.constrained.log10.v2f64(<2 x double>, metadata, metadata) 8285declare <2 x double> @llvm.experimental.constrained.log2.v2f64(<2 x double>, metadata, metadata) 8286declare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata) 8287declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata) 8288declare <2 x double> @llvm.experimental.constrained.maxnum.v2f64(<2 x double>, <2 x double>, metadata) 8289declare <2 x double> @llvm.experimental.constrained.minnum.v2f64(<2 x double>, <2 x double>, metadata) 8290declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32(<2 x float>, metadata) 8291declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32(<2 x float>, metadata) 8292declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(<2 x double>, metadata) 8293declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(<2 x double>, metadata) 8294declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32(<2 x float>, metadata) 8295declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32(<2 x float>, metadata) 8296declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(<2 x double>, metadata) 8297declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(<2 x double>, metadata) 8298declare <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(<2 x double>, metadata, metadata) 8299declare <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(<2 x float>, metadata) 8300declare <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double>, metadata) 8301declare <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double>, metadata) 8302declare <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double>, metadata) 8303declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata) 8304declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16>, metadata, metadata) 8305declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16>, metadata, metadata) 8306declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32>, metadata, metadata) 8307declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32>, metadata, metadata) 8308declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64>, metadata, metadata) 8309declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64>, metadata, metadata) 8310declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32>, metadata, metadata) 8311declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32>, metadata, metadata) 8312declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64>, metadata, metadata) 8313declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64>, metadata, metadata) 8314 8315; Scalar width declarations 8316declare <1 x float> @llvm.experimental.constrained.fadd.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8317declare <1 x float> @llvm.experimental.constrained.fsub.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8318declare <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8319declare <1 x float> @llvm.experimental.constrained.fdiv.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8320declare <1 x float> @llvm.experimental.constrained.frem.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8321declare <1 x float> @llvm.experimental.constrained.sqrt.v1f32(<1 x float>, metadata, metadata) 8322declare <1 x float> @llvm.experimental.constrained.pow.v1f32(<1 x float>, <1 x float>, metadata, metadata) 8323declare <1 x float> @llvm.experimental.constrained.powi.v1f32(<1 x float>, i32, metadata, metadata) 8324declare <1 x float> @llvm.experimental.constrained.sin.v1f32(<1 x float>, metadata, metadata) 8325declare <1 x float> @llvm.experimental.constrained.cos.v1f32(<1 x float>, metadata, metadata) 8326declare <1 x float> @llvm.experimental.constrained.exp.v1f32(<1 x float>, metadata, metadata) 8327declare <1 x float> @llvm.experimental.constrained.exp2.v1f32(<1 x float>, metadata, metadata) 8328declare <1 x float> @llvm.experimental.constrained.log.v1f32(<1 x float>, metadata, metadata) 8329declare <1 x float> @llvm.experimental.constrained.log10.v1f32(<1 x float>, metadata, metadata) 8330declare <1 x float> @llvm.experimental.constrained.log2.v1f32(<1 x float>, metadata, metadata) 8331declare <1 x float> @llvm.experimental.constrained.rint.v1f32(<1 x float>, metadata, metadata) 8332declare <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(<1 x float>, metadata, metadata) 8333declare <1 x float> @llvm.experimental.constrained.maxnum.v1f32(<1 x float>, <1 x float>, metadata) 8334declare <1 x float> @llvm.experimental.constrained.minnum.v1f32(<1 x float>, <1 x float>, metadata) 8335declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32(<1 x float>, metadata) 8336declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32(<1 x float>, metadata) 8337declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(<1 x double>, metadata) 8338declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(<1 x double>, metadata) 8339declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32(<1 x float>, metadata) 8340declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32(<1 x float>, metadata) 8341declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(<1 x double>, metadata) 8342declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(<1 x double>, metadata) 8343declare <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(<1 x double>, metadata, metadata) 8344declare <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(<1 x float>, metadata) 8345declare <1 x float> @llvm.experimental.constrained.ceil.v1f32(<1 x float>, metadata) 8346declare <1 x float> @llvm.experimental.constrained.floor.v1f32(<1 x float>, metadata) 8347declare <1 x float> @llvm.experimental.constrained.round.v1f32(<1 x float>, metadata) 8348declare <1 x float> @llvm.experimental.constrained.trunc.v1f32(<1 x float>, metadata) 8349declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32>, metadata, metadata) 8350declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32>, metadata, metadata) 8351declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64>, metadata, metadata) 8352declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64>, metadata, metadata) 8353declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32>, metadata, metadata) 8354declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32>, metadata, metadata) 8355declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64>, metadata, metadata) 8356declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64>, metadata, metadata) 8357 8358; Illegal width declarations 8359declare <3 x float> @llvm.experimental.constrained.fadd.v3f32(<3 x float>, <3 x float>, metadata, metadata) 8360declare <3 x double> @llvm.experimental.constrained.fadd.v3f64(<3 x double>, <3 x double>, metadata, metadata) 8361declare <3 x float> @llvm.experimental.constrained.fsub.v3f32(<3 x float>, <3 x float>, metadata, metadata) 8362declare <3 x double> @llvm.experimental.constrained.fsub.v3f64(<3 x double>, <3 x double>, metadata, metadata) 8363declare <3 x float> @llvm.experimental.constrained.fmul.v3f32(<3 x float>, <3 x float>, metadata, metadata) 8364declare <3 x double> @llvm.experimental.constrained.fmul.v3f64(<3 x double>, <3 x double>, metadata, metadata) 8365declare <3 x float> @llvm.experimental.constrained.fdiv.v3f32(<3 x float>, <3 x float>, metadata, metadata) 8366declare <3 x double> @llvm.experimental.constrained.fdiv.v3f64(<3 x double>, <3 x double>, metadata, metadata) 8367declare <3 x float> @llvm.experimental.constrained.frem.v3f32(<3 x float>, <3 x float>, metadata, metadata) 8368declare <3 x double> @llvm.experimental.constrained.frem.v3f64(<3 x double>, <3 x double>, metadata, metadata) 8369declare <3 x float> @llvm.experimental.constrained.sqrt.v3f32(<3 x float>, metadata, metadata) 8370declare <3 x double> @llvm.experimental.constrained.sqrt.v3f64(<3 x double>, metadata, metadata) 8371declare <3 x float> @llvm.experimental.constrained.pow.v3f32(<3 x float>, <3 x float>, metadata, metadata) 8372declare <3 x double> @llvm.experimental.constrained.pow.v3f64(<3 x double>, <3 x double>, metadata, metadata) 8373declare <3 x float> @llvm.experimental.constrained.powi.v3f32(<3 x float>, i32, metadata, metadata) 8374declare <3 x double> @llvm.experimental.constrained.powi.v3f64(<3 x double>, i32, metadata, metadata) 8375declare <3 x float> @llvm.experimental.constrained.sin.v3f32(<3 x float>, metadata, metadata) 8376declare <3 x double> @llvm.experimental.constrained.sin.v3f64(<3 x double>, metadata, metadata) 8377declare <3 x float> @llvm.experimental.constrained.cos.v3f32(<3 x float>, metadata, metadata) 8378declare <3 x double> @llvm.experimental.constrained.cos.v3f64(<3 x double>, metadata, metadata) 8379declare <3 x float> @llvm.experimental.constrained.exp.v3f32(<3 x float>, metadata, metadata) 8380declare <3 x double> @llvm.experimental.constrained.exp.v3f64(<3 x double>, metadata, metadata) 8381declare <3 x float> @llvm.experimental.constrained.exp2.v3f32(<3 x float>, metadata, metadata) 8382declare <3 x double> @llvm.experimental.constrained.exp2.v3f64(<3 x double>, metadata, metadata) 8383declare <3 x float> @llvm.experimental.constrained.log.v3f32(<3 x float>, metadata, metadata) 8384declare <3 x double> @llvm.experimental.constrained.log.v3f64(<3 x double>, metadata, metadata) 8385declare <3 x float> @llvm.experimental.constrained.log10.v3f32(<3 x float>, metadata, metadata) 8386declare <3 x double> @llvm.experimental.constrained.log10.v3f64(<3 x double>, metadata, metadata) 8387declare <3 x float> @llvm.experimental.constrained.log2.v3f32(<3 x float>, metadata, metadata) 8388declare <3 x double> @llvm.experimental.constrained.log2.v3f64(<3 x double>, metadata, metadata) 8389declare <3 x float> @llvm.experimental.constrained.rint.v3f32(<3 x float>, metadata, metadata) 8390declare <3 x double> @llvm.experimental.constrained.rint.v3f64(<3 x double>, metadata, metadata) 8391declare <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(<3 x float>, metadata, metadata) 8392declare <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(<3 x double>, metadata, metadata) 8393declare <3 x float> @llvm.experimental.constrained.maxnum.v3f32(<3 x float>, <3 x float>, metadata) 8394declare <3 x double> @llvm.experimental.constrained.maxnum.v3f64(<3 x double>, <3 x double>, metadata) 8395declare <3 x float> @llvm.experimental.constrained.minnum.v3f32(<3 x float>, <3 x float>, metadata) 8396declare <3 x double> @llvm.experimental.constrained.minnum.v3f64(<3 x double>, <3 x double>, metadata) 8397declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32(<3 x float>, metadata) 8398declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32(<3 x float>, metadata) 8399declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64(<3 x double>, metadata) 8400declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64(<3 x double>, metadata) 8401declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32(<3 x float>, metadata) 8402declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32(<3 x float>, metadata) 8403declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64(<3 x double>, metadata) 8404declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64(<3 x double>, metadata) 8405declare <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(<3 x double>, metadata, metadata) 8406declare <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(<3 x float>, metadata) 8407declare <3 x float> @llvm.experimental.constrained.ceil.v3f32(<3 x float>, metadata) 8408declare <3 x double> @llvm.experimental.constrained.ceil.v3f64(<3 x double>, metadata) 8409declare <3 x float> @llvm.experimental.constrained.floor.v3f32(<3 x float>, metadata) 8410declare <3 x double> @llvm.experimental.constrained.floor.v3f64(<3 x double>, metadata) 8411declare <3 x float> @llvm.experimental.constrained.round.v3f32(<3 x float>, metadata) 8412declare <3 x double> @llvm.experimental.constrained.round.v3f64(<3 x double>, metadata) 8413declare <3 x float> @llvm.experimental.constrained.trunc.v3f32(<3 x float>, metadata) 8414declare <3 x double> @llvm.experimental.constrained.trunc.v3f64(<3 x double>, metadata) 8415declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32>, metadata, metadata) 8416declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32>, metadata, metadata) 8417declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64>, metadata, metadata) 8418declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64>, metadata, metadata) 8419declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32>, metadata, metadata) 8420declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32>, metadata, metadata) 8421declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64>, metadata, metadata) 8422declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64>, metadata, metadata) 8423 8424; Double width declarations 8425declare <4 x double> @llvm.experimental.constrained.fadd.v4f64(<4 x double>, <4 x double>, metadata, metadata) 8426declare <4 x double> @llvm.experimental.constrained.fsub.v4f64(<4 x double>, <4 x double>, metadata, metadata) 8427declare <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double>, <4 x double>, metadata, metadata) 8428declare <4 x double> @llvm.experimental.constrained.fdiv.v4f64(<4 x double>, <4 x double>, metadata, metadata) 8429declare <4 x double> @llvm.experimental.constrained.frem.v4f64(<4 x double>, <4 x double>, metadata, metadata) 8430declare <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double>, metadata, metadata) 8431declare <4 x double> @llvm.experimental.constrained.pow.v4f64(<4 x double>, <4 x double>, metadata, metadata) 8432declare <4 x double> @llvm.experimental.constrained.powi.v4f64(<4 x double>, i32, metadata, metadata) 8433declare <4 x double> @llvm.experimental.constrained.sin.v4f64(<4 x double>, metadata, metadata) 8434declare <4 x double> @llvm.experimental.constrained.cos.v4f64(<4 x double>, metadata, metadata) 8435declare <4 x double> @llvm.experimental.constrained.exp.v4f64(<4 x double>, metadata, metadata) 8436declare <4 x double> @llvm.experimental.constrained.exp2.v4f64(<4 x double>, metadata, metadata) 8437declare <4 x double> @llvm.experimental.constrained.log.v4f64(<4 x double>, metadata, metadata) 8438declare <4 x double> @llvm.experimental.constrained.log10.v4f64(<4 x double>, metadata, metadata) 8439declare <4 x double> @llvm.experimental.constrained.log2.v4f64(<4 x double>, metadata, metadata) 8440declare <4 x double> @llvm.experimental.constrained.rint.v4f64(<4 x double>, metadata, metadata) 8441declare <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(<4 x double>, metadata, metadata) 8442declare <4 x double> @llvm.experimental.constrained.maxnum.v4f64(<4 x double>, <4 x double>, metadata) 8443declare <4 x double> @llvm.experimental.constrained.minnum.v4f64(<4 x double>, <4 x double>, metadata) 8444declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float>, metadata) 8445declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(<4 x float>, metadata) 8446declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64(<4 x double>, metadata) 8447declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64(<4 x double>, metadata) 8448declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float>, metadata) 8449declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(<4 x float>, metadata) 8450declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(<4 x double>, metadata) 8451declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64(<4 x double>, metadata) 8452declare <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(<4 x double>, metadata, metadata) 8453declare <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float>, metadata) 8454declare <4 x double> @llvm.experimental.constrained.ceil.v4f64(<4 x double>, metadata) 8455declare <4 x double> @llvm.experimental.constrained.floor.v4f64(<4 x double>, metadata) 8456declare <4 x double> @llvm.experimental.constrained.round.v4f64(<4 x double>, metadata) 8457declare <4 x double> @llvm.experimental.constrained.trunc.v4f64(<4 x double>, metadata) 8458declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16>, metadata, metadata) 8459declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32>, metadata, metadata) 8460declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32>, metadata, metadata) 8461declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64>, metadata, metadata) 8462declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64>, metadata, metadata) 8463declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16>, metadata, metadata) 8464declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32>, metadata, metadata) 8465declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32>, metadata, metadata) 8466declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64>, metadata, metadata) 8467declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64>, metadata, metadata) 8468