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