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