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