1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 -mattr=-vsx < %s | FileCheck %s --check-prefix=NOVSX 3; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s --check-prefix=VSX 4; RUN: llc -mtriple=powerpc64-ibm-aix -mcpu=pwr8 < %s | FileCheck %s --check-prefix=AIX 5 6define float @f32_minimum(float %a, float %b) { 7; NOVSX-LABEL: f32_minimum: 8; NOVSX: # %bb.0: # %entry 9; NOVSX-NEXT: fcmpu 0, 1, 2 10; NOVSX-NEXT: fmr 0, 1 11; NOVSX-NEXT: stfs 2, -8(1) 12; NOVSX-NEXT: stfs 1, -4(1) 13; NOVSX-NEXT: bc 12, 0, .LBB0_2 14; NOVSX-NEXT: # %bb.1: # %entry 15; NOVSX-NEXT: fmr 0, 2 16; NOVSX-NEXT: .LBB0_2: # %entry 17; NOVSX-NEXT: lwz 3, -4(1) 18; NOVSX-NEXT: bc 4, 3, .LBB0_4 19; NOVSX-NEXT: # %bb.3: 20; NOVSX-NEXT: addis 4, 2, .LCPI0_0@toc@ha 21; NOVSX-NEXT: lfs 0, .LCPI0_0@toc@l(4) 22; NOVSX-NEXT: .LBB0_4: # %entry 23; NOVSX-NEXT: xoris 3, 3, 32768 24; NOVSX-NEXT: lwz 4, -8(1) 25; NOVSX-NEXT: cmplwi 3, 0 26; NOVSX-NEXT: bc 12, 2, .LBB0_6 27; NOVSX-NEXT: # %bb.5: # %entry 28; NOVSX-NEXT: fmr 1, 0 29; NOVSX-NEXT: .LBB0_6: # %entry 30; NOVSX-NEXT: xoris 3, 4, 32768 31; NOVSX-NEXT: cmplwi 3, 0 32; NOVSX-NEXT: bc 12, 2, .LBB0_8 33; NOVSX-NEXT: # %bb.7: # %entry 34; NOVSX-NEXT: fmr 2, 1 35; NOVSX-NEXT: .LBB0_8: # %entry 36; NOVSX-NEXT: addis 3, 2, .LCPI0_1@toc@ha 37; NOVSX-NEXT: lfs 1, .LCPI0_1@toc@l(3) 38; NOVSX-NEXT: fcmpu 0, 0, 1 39; NOVSX-NEXT: bc 12, 2, .LBB0_10 40; NOVSX-NEXT: # %bb.9: # %entry 41; NOVSX-NEXT: fmr 2, 0 42; NOVSX-NEXT: .LBB0_10: # %entry 43; NOVSX-NEXT: fmr 1, 2 44; NOVSX-NEXT: blr 45; 46; VSX-LABEL: f32_minimum: 47; VSX: # %bb.0: # %entry 48; VSX-NEXT: fcmpu 0, 1, 2 49; VSX-NEXT: bc 12, 3, .LBB0_2 50; VSX-NEXT: # %bb.1: # %entry 51; VSX-NEXT: xsmindp 1, 1, 2 52; VSX-NEXT: blr 53; VSX-NEXT: .LBB0_2: 54; VSX-NEXT: addis 3, 2, .LCPI0_0@toc@ha 55; VSX-NEXT: lfs 1, .LCPI0_0@toc@l(3) 56; VSX-NEXT: blr 57; 58; AIX-LABEL: f32_minimum: 59; AIX: # %bb.0: # %entry 60; AIX-NEXT: fcmpu 0, 1, 2 61; AIX-NEXT: bc 12, 3, L..BB0_2 62; AIX-NEXT: # %bb.1: # %entry 63; AIX-NEXT: xsmindp 1, 1, 2 64; AIX-NEXT: blr 65; AIX-NEXT: L..BB0_2: 66; AIX-NEXT: ld 3, L..C0(2) # %const.0 67; AIX-NEXT: lfs 1, 0(3) 68; AIX-NEXT: blr 69entry: 70 %m = call float @llvm.minimum.f32(float %a, float %b) 71 ret float %m 72} 73 74define float @f32_maximum(float %a, float %b) { 75; NOVSX-LABEL: f32_maximum: 76; NOVSX: # %bb.0: # %entry 77; NOVSX-NEXT: fcmpu 0, 1, 2 78; NOVSX-NEXT: fmr 0, 1 79; NOVSX-NEXT: stfs 2, -8(1) 80; NOVSX-NEXT: stfs 1, -4(1) 81; NOVSX-NEXT: bc 12, 1, .LBB1_2 82; NOVSX-NEXT: # %bb.1: # %entry 83; NOVSX-NEXT: fmr 0, 2 84; NOVSX-NEXT: .LBB1_2: # %entry 85; NOVSX-NEXT: lwz 3, -4(1) 86; NOVSX-NEXT: bc 4, 3, .LBB1_4 87; NOVSX-NEXT: # %bb.3: 88; NOVSX-NEXT: addis 4, 2, .LCPI1_0@toc@ha 89; NOVSX-NEXT: lfs 0, .LCPI1_0@toc@l(4) 90; NOVSX-NEXT: .LBB1_4: # %entry 91; NOVSX-NEXT: cmpwi 3, 0 92; NOVSX-NEXT: lwz 4, -8(1) 93; NOVSX-NEXT: bc 12, 2, .LBB1_6 94; NOVSX-NEXT: # %bb.5: # %entry 95; NOVSX-NEXT: fmr 1, 0 96; NOVSX-NEXT: .LBB1_6: # %entry 97; NOVSX-NEXT: cmpwi 4, 0 98; NOVSX-NEXT: bc 12, 2, .LBB1_8 99; NOVSX-NEXT: # %bb.7: # %entry 100; NOVSX-NEXT: fmr 2, 1 101; NOVSX-NEXT: .LBB1_8: # %entry 102; NOVSX-NEXT: addis 3, 2, .LCPI1_1@toc@ha 103; NOVSX-NEXT: lfs 1, .LCPI1_1@toc@l(3) 104; NOVSX-NEXT: fcmpu 0, 0, 1 105; NOVSX-NEXT: bc 12, 2, .LBB1_10 106; NOVSX-NEXT: # %bb.9: # %entry 107; NOVSX-NEXT: fmr 2, 0 108; NOVSX-NEXT: .LBB1_10: # %entry 109; NOVSX-NEXT: fmr 1, 2 110; NOVSX-NEXT: blr 111; 112; VSX-LABEL: f32_maximum: 113; VSX: # %bb.0: # %entry 114; VSX-NEXT: fcmpu 0, 1, 2 115; VSX-NEXT: bc 12, 3, .LBB1_2 116; VSX-NEXT: # %bb.1: # %entry 117; VSX-NEXT: xsmaxdp 1, 1, 2 118; VSX-NEXT: blr 119; VSX-NEXT: .LBB1_2: 120; VSX-NEXT: addis 3, 2, .LCPI1_0@toc@ha 121; VSX-NEXT: lfs 1, .LCPI1_0@toc@l(3) 122; VSX-NEXT: blr 123; 124; AIX-LABEL: f32_maximum: 125; AIX: # %bb.0: # %entry 126; AIX-NEXT: fcmpu 0, 1, 2 127; AIX-NEXT: bc 12, 3, L..BB1_2 128; AIX-NEXT: # %bb.1: # %entry 129; AIX-NEXT: xsmaxdp 1, 1, 2 130; AIX-NEXT: blr 131; AIX-NEXT: L..BB1_2: 132; AIX-NEXT: ld 3, L..C1(2) # %const.0 133; AIX-NEXT: lfs 1, 0(3) 134; AIX-NEXT: blr 135entry: 136 %m = call float @llvm.maximum.f32(float %a, float %b) 137 ret float %m 138} 139 140define double @f64_minimum(double %a, double %b) { 141; NOVSX-LABEL: f64_minimum: 142; NOVSX: # %bb.0: # %entry 143; NOVSX-NEXT: fcmpu 0, 1, 2 144; NOVSX-NEXT: fmr 0, 1 145; NOVSX-NEXT: stfd 2, -16(1) 146; NOVSX-NEXT: stfd 1, -8(1) 147; NOVSX-NEXT: bc 12, 0, .LBB2_2 148; NOVSX-NEXT: # %bb.1: # %entry 149; NOVSX-NEXT: fmr 0, 2 150; NOVSX-NEXT: .LBB2_2: # %entry 151; NOVSX-NEXT: ld 3, -8(1) 152; NOVSX-NEXT: bc 4, 3, .LBB2_4 153; NOVSX-NEXT: # %bb.3: 154; NOVSX-NEXT: addis 4, 2, .LCPI2_0@toc@ha 155; NOVSX-NEXT: lfs 0, .LCPI2_0@toc@l(4) 156; NOVSX-NEXT: .LBB2_4: # %entry 157; NOVSX-NEXT: li 5, 1 158; NOVSX-NEXT: ld 4, -16(1) 159; NOVSX-NEXT: rldic 5, 5, 63, 0 160; NOVSX-NEXT: cmpd 3, 5 161; NOVSX-NEXT: bc 12, 2, .LBB2_6 162; NOVSX-NEXT: # %bb.5: # %entry 163; NOVSX-NEXT: fmr 1, 0 164; NOVSX-NEXT: .LBB2_6: # %entry 165; NOVSX-NEXT: cmpd 4, 5 166; NOVSX-NEXT: bc 12, 2, .LBB2_8 167; NOVSX-NEXT: # %bb.7: # %entry 168; NOVSX-NEXT: fmr 2, 1 169; NOVSX-NEXT: .LBB2_8: # %entry 170; NOVSX-NEXT: addis 3, 2, .LCPI2_1@toc@ha 171; NOVSX-NEXT: lfs 1, .LCPI2_1@toc@l(3) 172; NOVSX-NEXT: fcmpu 0, 0, 1 173; NOVSX-NEXT: bc 12, 2, .LBB2_10 174; NOVSX-NEXT: # %bb.9: # %entry 175; NOVSX-NEXT: fmr 2, 0 176; NOVSX-NEXT: .LBB2_10: # %entry 177; NOVSX-NEXT: fmr 1, 2 178; NOVSX-NEXT: blr 179; 180; VSX-LABEL: f64_minimum: 181; VSX: # %bb.0: # %entry 182; VSX-NEXT: fcmpu 0, 1, 2 183; VSX-NEXT: bc 12, 3, .LBB2_2 184; VSX-NEXT: # %bb.1: # %entry 185; VSX-NEXT: xsmindp 1, 1, 2 186; VSX-NEXT: blr 187; VSX-NEXT: .LBB2_2: 188; VSX-NEXT: addis 3, 2, .LCPI2_0@toc@ha 189; VSX-NEXT: lfs 1, .LCPI2_0@toc@l(3) 190; VSX-NEXT: blr 191; 192; AIX-LABEL: f64_minimum: 193; AIX: # %bb.0: # %entry 194; AIX-NEXT: fcmpu 0, 1, 2 195; AIX-NEXT: bc 12, 3, L..BB2_2 196; AIX-NEXT: # %bb.1: # %entry 197; AIX-NEXT: xsmindp 1, 1, 2 198; AIX-NEXT: blr 199; AIX-NEXT: L..BB2_2: 200; AIX-NEXT: ld 3, L..C2(2) # %const.0 201; AIX-NEXT: lfs 1, 0(3) 202; AIX-NEXT: blr 203entry: 204 %m = call double @llvm.minimum.f64(double %a, double %b) 205 ret double %m 206} 207 208define double @f64_maximum(double %a, double %b) { 209; NOVSX-LABEL: f64_maximum: 210; NOVSX: # %bb.0: # %entry 211; NOVSX-NEXT: fcmpu 0, 1, 2 212; NOVSX-NEXT: fmr 0, 1 213; NOVSX-NEXT: stfd 2, -16(1) 214; NOVSX-NEXT: stfd 1, -8(1) 215; NOVSX-NEXT: bc 12, 1, .LBB3_2 216; NOVSX-NEXT: # %bb.1: # %entry 217; NOVSX-NEXT: fmr 0, 2 218; NOVSX-NEXT: .LBB3_2: # %entry 219; NOVSX-NEXT: ld 3, -8(1) 220; NOVSX-NEXT: bc 4, 3, .LBB3_4 221; NOVSX-NEXT: # %bb.3: 222; NOVSX-NEXT: addis 4, 2, .LCPI3_0@toc@ha 223; NOVSX-NEXT: lfs 0, .LCPI3_0@toc@l(4) 224; NOVSX-NEXT: .LBB3_4: # %entry 225; NOVSX-NEXT: cmpdi 3, 0 226; NOVSX-NEXT: ld 4, -16(1) 227; NOVSX-NEXT: bc 12, 2, .LBB3_6 228; NOVSX-NEXT: # %bb.5: # %entry 229; NOVSX-NEXT: fmr 1, 0 230; NOVSX-NEXT: .LBB3_6: # %entry 231; NOVSX-NEXT: cmpdi 4, 0 232; NOVSX-NEXT: bc 12, 2, .LBB3_8 233; NOVSX-NEXT: # %bb.7: # %entry 234; NOVSX-NEXT: fmr 2, 1 235; NOVSX-NEXT: .LBB3_8: # %entry 236; NOVSX-NEXT: addis 3, 2, .LCPI3_1@toc@ha 237; NOVSX-NEXT: lfs 1, .LCPI3_1@toc@l(3) 238; NOVSX-NEXT: fcmpu 0, 0, 1 239; NOVSX-NEXT: bc 12, 2, .LBB3_10 240; NOVSX-NEXT: # %bb.9: # %entry 241; NOVSX-NEXT: fmr 2, 0 242; NOVSX-NEXT: .LBB3_10: # %entry 243; NOVSX-NEXT: fmr 1, 2 244; NOVSX-NEXT: blr 245; 246; VSX-LABEL: f64_maximum: 247; VSX: # %bb.0: # %entry 248; VSX-NEXT: fcmpu 0, 1, 2 249; VSX-NEXT: bc 12, 3, .LBB3_2 250; VSX-NEXT: # %bb.1: # %entry 251; VSX-NEXT: xsmaxdp 1, 1, 2 252; VSX-NEXT: blr 253; VSX-NEXT: .LBB3_2: 254; VSX-NEXT: addis 3, 2, .LCPI3_0@toc@ha 255; VSX-NEXT: lfs 1, .LCPI3_0@toc@l(3) 256; VSX-NEXT: blr 257; 258; AIX-LABEL: f64_maximum: 259; AIX: # %bb.0: # %entry 260; AIX-NEXT: fcmpu 0, 1, 2 261; AIX-NEXT: bc 12, 3, L..BB3_2 262; AIX-NEXT: # %bb.1: # %entry 263; AIX-NEXT: xsmaxdp 1, 1, 2 264; AIX-NEXT: blr 265; AIX-NEXT: L..BB3_2: 266; AIX-NEXT: ld 3, L..C3(2) # %const.0 267; AIX-NEXT: lfs 1, 0(3) 268; AIX-NEXT: blr 269entry: 270 %m = call double @llvm.maximum.f64(double %a, double %b) 271 ret double %m 272} 273 274define <4 x float> @v4f32_minimum(<4 x float> %a, <4 x float> %b) { 275; NOVSX-LABEL: v4f32_minimum: 276; NOVSX: # %bb.0: # %entry 277; NOVSX-NEXT: vcmpeqfp 0, 3, 3 278; NOVSX-NEXT: vcmpeqfp 1, 2, 2 279; NOVSX-NEXT: addis 3, 2, .LCPI4_0@toc@ha 280; NOVSX-NEXT: addi 3, 3, .LCPI4_0@toc@l 281; NOVSX-NEXT: vnot 0, 0 282; NOVSX-NEXT: vnot 1, 1 283; NOVSX-NEXT: vspltisb 4, -1 284; NOVSX-NEXT: vcmpgtfp 5, 3, 2 285; NOVSX-NEXT: vslw 4, 4, 4 286; NOVSX-NEXT: vor 0, 1, 0 287; NOVSX-NEXT: lvx 1, 0, 3 288; NOVSX-NEXT: vsel 5, 3, 2, 5 289; NOVSX-NEXT: vsel 5, 5, 1, 0 290; NOVSX-NEXT: vcmpequw 0, 2, 4 291; NOVSX-NEXT: vcmpequw 4, 3, 4 292; NOVSX-NEXT: vsel 2, 5, 2, 0 293; NOVSX-NEXT: vsel 2, 2, 3, 4 294; NOVSX-NEXT: vxor 3, 3, 3 295; NOVSX-NEXT: vcmpeqfp 3, 5, 3 296; NOVSX-NEXT: vsel 2, 5, 2, 3 297; NOVSX-NEXT: blr 298; 299; VSX-LABEL: v4f32_minimum: 300; VSX: # %bb.0: # %entry 301; VSX-NEXT: xvcmpeqsp 1, 35, 35 302; VSX-NEXT: xvcmpeqsp 2, 34, 34 303; VSX-NEXT: addis 3, 2, .LCPI4_0@toc@ha 304; VSX-NEXT: xxleqv 36, 36, 36 305; VSX-NEXT: xvminsp 0, 34, 35 306; VSX-NEXT: vslw 4, 4, 4 307; VSX-NEXT: addi 3, 3, .LCPI4_0@toc@l 308; VSX-NEXT: xxlnor 1, 1, 1 309; VSX-NEXT: xxlnor 2, 2, 2 310; VSX-NEXT: vcmpequw 5, 2, 4 311; VSX-NEXT: xxlor 1, 2, 1 312; VSX-NEXT: lxvd2x 2, 0, 3 313; VSX-NEXT: xxsel 0, 0, 2, 1 314; VSX-NEXT: xxlxor 2, 2, 2 315; VSX-NEXT: xvcmpeqsp 2, 0, 2 316; VSX-NEXT: xxsel 1, 0, 34, 37 317; VSX-NEXT: vcmpequw 2, 3, 4 318; VSX-NEXT: xxsel 1, 1, 35, 34 319; VSX-NEXT: xxsel 34, 0, 1, 2 320; VSX-NEXT: blr 321; 322; AIX-LABEL: v4f32_minimum: 323; AIX: # %bb.0: # %entry 324; AIX-NEXT: xvcmpeqsp 1, 35, 35 325; AIX-NEXT: xvcmpeqsp 2, 34, 34 326; AIX-NEXT: ld 3, L..C4(2) # %const.0 327; AIX-NEXT: xxleqv 36, 36, 36 328; AIX-NEXT: xvminsp 0, 34, 35 329; AIX-NEXT: vslw 4, 4, 4 330; AIX-NEXT: xxlnor 1, 1, 1 331; AIX-NEXT: xxlnor 2, 2, 2 332; AIX-NEXT: vcmpequw 5, 2, 4 333; AIX-NEXT: xxlor 1, 2, 1 334; AIX-NEXT: lxvw4x 2, 0, 3 335; AIX-NEXT: xxsel 0, 0, 2, 1 336; AIX-NEXT: xxlxor 2, 2, 2 337; AIX-NEXT: xvcmpeqsp 2, 0, 2 338; AIX-NEXT: xxsel 1, 0, 34, 37 339; AIX-NEXT: vcmpequw 2, 3, 4 340; AIX-NEXT: xxsel 1, 1, 35, 34 341; AIX-NEXT: xxsel 34, 0, 1, 2 342; AIX-NEXT: blr 343entry: 344 %m = call <4 x float> @llvm.minimum.v4f32(<4 x float> %a, <4 x float> %b) 345 ret <4 x float> %m 346} 347 348define <4 x float> @v4f32_maximum(<4 x float> %a, <4 x float> %b) { 349; NOVSX-LABEL: v4f32_maximum: 350; NOVSX: # %bb.0: # %entry 351; NOVSX-NEXT: vcmpeqfp 5, 3, 3 352; NOVSX-NEXT: vcmpeqfp 0, 2, 2 353; NOVSX-NEXT: addis 3, 2, .LCPI5_0@toc@ha 354; NOVSX-NEXT: addi 3, 3, .LCPI5_0@toc@l 355; NOVSX-NEXT: vnot 5, 5 356; NOVSX-NEXT: vnot 0, 0 357; NOVSX-NEXT: vcmpgtfp 4, 2, 3 358; NOVSX-NEXT: vor 5, 0, 5 359; NOVSX-NEXT: lvx 0, 0, 3 360; NOVSX-NEXT: vsel 4, 3, 2, 4 361; NOVSX-NEXT: vsel 4, 4, 0, 5 362; NOVSX-NEXT: vxor 5, 5, 5 363; NOVSX-NEXT: vcmpequw 0, 2, 5 364; NOVSX-NEXT: vsel 2, 4, 2, 0 365; NOVSX-NEXT: vcmpequw 0, 3, 5 366; NOVSX-NEXT: vsel 2, 2, 3, 0 367; NOVSX-NEXT: vcmpeqfp 3, 4, 5 368; NOVSX-NEXT: vsel 2, 4, 2, 3 369; NOVSX-NEXT: blr 370; 371; VSX-LABEL: v4f32_maximum: 372; VSX: # %bb.0: # %entry 373; VSX-NEXT: xvcmpeqsp 1, 35, 35 374; VSX-NEXT: xvcmpeqsp 2, 34, 34 375; VSX-NEXT: addis 3, 2, .LCPI5_0@toc@ha 376; VSX-NEXT: addi 3, 3, .LCPI5_0@toc@l 377; VSX-NEXT: xxlnor 1, 1, 1 378; VSX-NEXT: xxlnor 2, 2, 2 379; VSX-NEXT: xvmaxsp 0, 34, 35 380; VSX-NEXT: xxlxor 36, 36, 36 381; VSX-NEXT: vcmpequw 5, 2, 4 382; VSX-NEXT: xxlor 1, 2, 1 383; VSX-NEXT: lxvd2x 2, 0, 3 384; VSX-NEXT: xxsel 0, 0, 2, 1 385; VSX-NEXT: xvcmpeqsp 2, 0, 36 386; VSX-NEXT: xxsel 1, 0, 34, 37 387; VSX-NEXT: vcmpequw 2, 3, 4 388; VSX-NEXT: xxsel 1, 1, 35, 34 389; VSX-NEXT: xxsel 34, 0, 1, 2 390; VSX-NEXT: blr 391; 392; AIX-LABEL: v4f32_maximum: 393; AIX: # %bb.0: # %entry 394; AIX-NEXT: xvcmpeqsp 1, 35, 35 395; AIX-NEXT: xvcmpeqsp 2, 34, 34 396; AIX-NEXT: ld 3, L..C5(2) # %const.0 397; AIX-NEXT: xvmaxsp 0, 34, 35 398; AIX-NEXT: xxlxor 36, 36, 36 399; AIX-NEXT: xxlnor 1, 1, 1 400; AIX-NEXT: xxlnor 2, 2, 2 401; AIX-NEXT: vcmpequw 5, 2, 4 402; AIX-NEXT: xxlor 1, 2, 1 403; AIX-NEXT: lxvw4x 2, 0, 3 404; AIX-NEXT: xxsel 0, 0, 2, 1 405; AIX-NEXT: xvcmpeqsp 2, 0, 36 406; AIX-NEXT: xxsel 1, 0, 34, 37 407; AIX-NEXT: vcmpequw 2, 3, 4 408; AIX-NEXT: xxsel 1, 1, 35, 34 409; AIX-NEXT: xxsel 34, 0, 1, 2 410; AIX-NEXT: blr 411entry: 412 %m = call <4 x float> @llvm.maximum.v4f32(<4 x float> %a, <4 x float> %b) 413 ret <4 x float> %m 414} 415 416define <2 x double> @v2f64_minimum(<2 x double> %a, <2 x double> %b) { 417; NOVSX-LABEL: v2f64_minimum: 418; NOVSX: # %bb.0: # %entry 419; NOVSX-NEXT: fcmpu 0, 1, 3 420; NOVSX-NEXT: fmr 6, 1 421; NOVSX-NEXT: stfd 4, -16(1) 422; NOVSX-NEXT: stfd 2, -8(1) 423; NOVSX-NEXT: stfd 3, -32(1) 424; NOVSX-NEXT: stfd 1, -24(1) 425; NOVSX-NEXT: bc 12, 0, .LBB6_2 426; NOVSX-NEXT: # %bb.1: # %entry 427; NOVSX-NEXT: fmr 6, 3 428; NOVSX-NEXT: .LBB6_2: # %entry 429; NOVSX-NEXT: addis 3, 2, .LCPI6_0@toc@ha 430; NOVSX-NEXT: ld 4, -24(1) 431; NOVSX-NEXT: lfs 0, .LCPI6_0@toc@l(3) 432; NOVSX-NEXT: fmr 5, 0 433; NOVSX-NEXT: bc 12, 3, .LBB6_4 434; NOVSX-NEXT: # %bb.3: # %entry 435; NOVSX-NEXT: fmr 5, 6 436; NOVSX-NEXT: .LBB6_4: # %entry 437; NOVSX-NEXT: li 3, 1 438; NOVSX-NEXT: ld 5, -32(1) 439; NOVSX-NEXT: rldic 3, 3, 63, 0 440; NOVSX-NEXT: cmpd 4, 3 441; NOVSX-NEXT: bc 12, 2, .LBB6_6 442; NOVSX-NEXT: # %bb.5: # %entry 443; NOVSX-NEXT: fmr 1, 5 444; NOVSX-NEXT: .LBB6_6: # %entry 445; NOVSX-NEXT: cmpd 5, 3 446; NOVSX-NEXT: bc 12, 2, .LBB6_8 447; NOVSX-NEXT: # %bb.7: # %entry 448; NOVSX-NEXT: fmr 3, 1 449; NOVSX-NEXT: .LBB6_8: # %entry 450; NOVSX-NEXT: addis 4, 2, .LCPI6_1@toc@ha 451; NOVSX-NEXT: lfs 1, .LCPI6_1@toc@l(4) 452; NOVSX-NEXT: fcmpu 0, 5, 1 453; NOVSX-NEXT: bc 12, 2, .LBB6_10 454; NOVSX-NEXT: # %bb.9: # %entry 455; NOVSX-NEXT: fmr 3, 5 456; NOVSX-NEXT: .LBB6_10: # %entry 457; NOVSX-NEXT: fcmpu 0, 2, 4 458; NOVSX-NEXT: fmr 5, 2 459; NOVSX-NEXT: bc 12, 0, .LBB6_12 460; NOVSX-NEXT: # %bb.11: # %entry 461; NOVSX-NEXT: fmr 5, 4 462; NOVSX-NEXT: .LBB6_12: # %entry 463; NOVSX-NEXT: ld 5, -8(1) 464; NOVSX-NEXT: bc 12, 3, .LBB6_14 465; NOVSX-NEXT: # %bb.13: # %entry 466; NOVSX-NEXT: fmr 0, 5 467; NOVSX-NEXT: .LBB6_14: # %entry 468; NOVSX-NEXT: cmpd 5, 3 469; NOVSX-NEXT: ld 4, -16(1) 470; NOVSX-NEXT: bc 4, 2, .LBB6_19 471; NOVSX-NEXT: # %bb.15: # %entry 472; NOVSX-NEXT: cmpd 4, 3 473; NOVSX-NEXT: bc 4, 2, .LBB6_20 474; NOVSX-NEXT: .LBB6_16: # %entry 475; NOVSX-NEXT: fcmpu 0, 0, 1 476; NOVSX-NEXT: bc 12, 2, .LBB6_18 477; NOVSX-NEXT: .LBB6_17: # %entry 478; NOVSX-NEXT: fmr 4, 0 479; NOVSX-NEXT: .LBB6_18: # %entry 480; NOVSX-NEXT: fmr 1, 3 481; NOVSX-NEXT: fmr 2, 4 482; NOVSX-NEXT: blr 483; NOVSX-NEXT: .LBB6_19: # %entry 484; NOVSX-NEXT: fmr 2, 0 485; NOVSX-NEXT: cmpd 4, 3 486; NOVSX-NEXT: bc 12, 2, .LBB6_16 487; NOVSX-NEXT: .LBB6_20: # %entry 488; NOVSX-NEXT: fmr 4, 2 489; NOVSX-NEXT: fcmpu 0, 0, 1 490; NOVSX-NEXT: bc 4, 2, .LBB6_17 491; NOVSX-NEXT: b .LBB6_18 492; 493; VSX-LABEL: v2f64_minimum: 494; VSX: # %bb.0: # %entry 495; VSX-NEXT: addis 3, 2, .LCPI6_0@toc@ha 496; VSX-NEXT: xvcmpeqdp 36, 35, 35 497; VSX-NEXT: xvcmpeqdp 37, 34, 34 498; VSX-NEXT: addi 3, 3, .LCPI6_0@toc@l 499; VSX-NEXT: xxlnor 36, 36, 36 500; VSX-NEXT: xxlnor 37, 37, 37 501; VSX-NEXT: xvmindp 0, 34, 35 502; VSX-NEXT: lxvd2x 2, 0, 3 503; VSX-NEXT: addis 3, 2, .LCPI6_1@toc@ha 504; VSX-NEXT: xxlor 1, 37, 36 505; VSX-NEXT: addi 3, 3, .LCPI6_1@toc@l 506; VSX-NEXT: lxvd2x 36, 0, 3 507; VSX-NEXT: vcmpequd 5, 2, 4 508; VSX-NEXT: xxsel 0, 0, 2, 1 509; VSX-NEXT: xxlxor 2, 2, 2 510; VSX-NEXT: xxsel 1, 0, 34, 37 511; VSX-NEXT: vcmpequd 2, 3, 4 512; VSX-NEXT: xxsel 1, 1, 35, 34 513; VSX-NEXT: xvcmpeqdp 34, 0, 2 514; VSX-NEXT: xxsel 34, 0, 1, 34 515; VSX-NEXT: blr 516; 517; AIX-LABEL: v2f64_minimum: 518; AIX: # %bb.0: # %entry 519; AIX-NEXT: ld 3, L..C6(2) # %const.0 520; AIX-NEXT: xvcmpeqdp 36, 35, 35 521; AIX-NEXT: xvcmpeqdp 37, 34, 34 522; AIX-NEXT: lxvd2x 2, 0, 3 523; AIX-NEXT: ld 3, L..C7(2) # %const.1 524; AIX-NEXT: xxlnor 36, 36, 36 525; AIX-NEXT: xxlnor 37, 37, 37 526; AIX-NEXT: xvmindp 0, 34, 35 527; AIX-NEXT: xxlor 1, 37, 36 528; AIX-NEXT: lxvd2x 36, 0, 3 529; AIX-NEXT: vcmpequd 5, 2, 4 530; AIX-NEXT: xxsel 0, 0, 2, 1 531; AIX-NEXT: xxlxor 2, 2, 2 532; AIX-NEXT: xxsel 1, 0, 34, 37 533; AIX-NEXT: vcmpequd 2, 3, 4 534; AIX-NEXT: xxsel 1, 1, 35, 34 535; AIX-NEXT: xvcmpeqdp 34, 0, 2 536; AIX-NEXT: xxsel 34, 0, 1, 34 537; AIX-NEXT: blr 538entry: 539 %m = call <2 x double> @llvm.minimum.v2f64(<2 x double> %a, <2 x double> %b) 540 ret <2 x double> %m 541} 542 543define <2 x double> @v2f64_maximum(<2 x double> %a, <2 x double> %b) { 544; NOVSX-LABEL: v2f64_maximum: 545; NOVSX: # %bb.0: # %entry 546; NOVSX-NEXT: fcmpu 0, 1, 3 547; NOVSX-NEXT: fmr 6, 1 548; NOVSX-NEXT: stfd 4, -16(1) 549; NOVSX-NEXT: stfd 2, -8(1) 550; NOVSX-NEXT: stfd 3, -32(1) 551; NOVSX-NEXT: stfd 1, -24(1) 552; NOVSX-NEXT: bc 12, 1, .LBB7_2 553; NOVSX-NEXT: # %bb.1: # %entry 554; NOVSX-NEXT: fmr 6, 3 555; NOVSX-NEXT: .LBB7_2: # %entry 556; NOVSX-NEXT: addis 4, 2, .LCPI7_0@toc@ha 557; NOVSX-NEXT: ld 3, -24(1) 558; NOVSX-NEXT: lfs 0, .LCPI7_0@toc@l(4) 559; NOVSX-NEXT: fmr 5, 0 560; NOVSX-NEXT: bc 12, 3, .LBB7_4 561; NOVSX-NEXT: # %bb.3: # %entry 562; NOVSX-NEXT: fmr 5, 6 563; NOVSX-NEXT: .LBB7_4: # %entry 564; NOVSX-NEXT: cmpdi 3, 0 565; NOVSX-NEXT: ld 4, -32(1) 566; NOVSX-NEXT: bc 12, 2, .LBB7_6 567; NOVSX-NEXT: # %bb.5: # %entry 568; NOVSX-NEXT: fmr 1, 5 569; NOVSX-NEXT: .LBB7_6: # %entry 570; NOVSX-NEXT: cmpdi 4, 0 571; NOVSX-NEXT: bc 12, 2, .LBB7_8 572; NOVSX-NEXT: # %bb.7: # %entry 573; NOVSX-NEXT: fmr 3, 1 574; NOVSX-NEXT: .LBB7_8: # %entry 575; NOVSX-NEXT: addis 3, 2, .LCPI7_1@toc@ha 576; NOVSX-NEXT: lfs 1, .LCPI7_1@toc@l(3) 577; NOVSX-NEXT: fcmpu 0, 5, 1 578; NOVSX-NEXT: bc 12, 2, .LBB7_10 579; NOVSX-NEXT: # %bb.9: # %entry 580; NOVSX-NEXT: fmr 3, 5 581; NOVSX-NEXT: .LBB7_10: # %entry 582; NOVSX-NEXT: fcmpu 0, 2, 4 583; NOVSX-NEXT: fmr 5, 2 584; NOVSX-NEXT: bc 12, 1, .LBB7_12 585; NOVSX-NEXT: # %bb.11: # %entry 586; NOVSX-NEXT: fmr 5, 4 587; NOVSX-NEXT: .LBB7_12: # %entry 588; NOVSX-NEXT: ld 4, -8(1) 589; NOVSX-NEXT: bc 12, 3, .LBB7_14 590; NOVSX-NEXT: # %bb.13: # %entry 591; NOVSX-NEXT: fmr 0, 5 592; NOVSX-NEXT: .LBB7_14: # %entry 593; NOVSX-NEXT: cmpdi 4, 0 594; NOVSX-NEXT: ld 3, -16(1) 595; NOVSX-NEXT: bc 4, 2, .LBB7_19 596; NOVSX-NEXT: # %bb.15: # %entry 597; NOVSX-NEXT: cmpdi 3, 0 598; NOVSX-NEXT: bc 4, 2, .LBB7_20 599; NOVSX-NEXT: .LBB7_16: # %entry 600; NOVSX-NEXT: fcmpu 0, 0, 1 601; NOVSX-NEXT: bc 12, 2, .LBB7_18 602; NOVSX-NEXT: .LBB7_17: # %entry 603; NOVSX-NEXT: fmr 4, 0 604; NOVSX-NEXT: .LBB7_18: # %entry 605; NOVSX-NEXT: fmr 1, 3 606; NOVSX-NEXT: fmr 2, 4 607; NOVSX-NEXT: blr 608; NOVSX-NEXT: .LBB7_19: # %entry 609; NOVSX-NEXT: fmr 2, 0 610; NOVSX-NEXT: cmpdi 3, 0 611; NOVSX-NEXT: bc 12, 2, .LBB7_16 612; NOVSX-NEXT: .LBB7_20: # %entry 613; NOVSX-NEXT: fmr 4, 2 614; NOVSX-NEXT: fcmpu 0, 0, 1 615; NOVSX-NEXT: bc 4, 2, .LBB7_17 616; NOVSX-NEXT: b .LBB7_18 617; 618; VSX-LABEL: v2f64_maximum: 619; VSX: # %bb.0: # %entry 620; VSX-NEXT: addis 3, 2, .LCPI7_0@toc@ha 621; VSX-NEXT: xvcmpeqdp 36, 35, 35 622; VSX-NEXT: xvcmpeqdp 37, 34, 34 623; VSX-NEXT: addi 3, 3, .LCPI7_0@toc@l 624; VSX-NEXT: xxlnor 36, 36, 36 625; VSX-NEXT: xxlnor 37, 37, 37 626; VSX-NEXT: xvmaxdp 0, 34, 35 627; VSX-NEXT: lxvd2x 2, 0, 3 628; VSX-NEXT: xxlor 1, 37, 36 629; VSX-NEXT: xxlxor 36, 36, 36 630; VSX-NEXT: vcmpequd 5, 2, 4 631; VSX-NEXT: xxsel 0, 0, 2, 1 632; VSX-NEXT: xxsel 1, 0, 34, 37 633; VSX-NEXT: vcmpequd 2, 3, 4 634; VSX-NEXT: xxsel 1, 1, 35, 34 635; VSX-NEXT: xvcmpeqdp 34, 0, 36 636; VSX-NEXT: xxsel 34, 0, 1, 34 637; VSX-NEXT: blr 638; 639; AIX-LABEL: v2f64_maximum: 640; AIX: # %bb.0: # %entry 641; AIX-NEXT: ld 3, L..C8(2) # %const.0 642; AIX-NEXT: xvcmpeqdp 36, 35, 35 643; AIX-NEXT: xvcmpeqdp 37, 34, 34 644; AIX-NEXT: lxvd2x 2, 0, 3 645; AIX-NEXT: xxlnor 36, 36, 36 646; AIX-NEXT: xxlnor 37, 37, 37 647; AIX-NEXT: xvmaxdp 0, 34, 35 648; AIX-NEXT: xxlor 1, 37, 36 649; AIX-NEXT: xxlxor 36, 36, 36 650; AIX-NEXT: vcmpequd 5, 2, 4 651; AIX-NEXT: xxsel 0, 0, 2, 1 652; AIX-NEXT: xxsel 1, 0, 34, 37 653; AIX-NEXT: vcmpequd 2, 3, 4 654; AIX-NEXT: xxsel 1, 1, 35, 34 655; AIX-NEXT: xvcmpeqdp 34, 0, 36 656; AIX-NEXT: xxsel 34, 0, 1, 34 657; AIX-NEXT: blr 658entry: 659 %m = call <2 x double> @llvm.maximum.v2f64(<2 x double> %a, <2 x double> %b) 660 ret <2 x double> %m 661} 662 663declare float @llvm.maximum.f32(float, float) 664declare double @llvm.maximum.f64(double, double) 665declare <4 x float> @llvm.maximum.v4f32(<4 x float>, <4 x float>) 666declare <2 x double> @llvm.maximum.v2f64(<2 x double>, <2 x double>) 667 668declare float @llvm.minimum.f32(float, float) 669declare double @llvm.minimum.f64(double, double) 670declare <4 x float> @llvm.minimum.v4f32(<4 x float>, <4 x float>) 671declare <2 x double> @llvm.minimum.v2f64(<2 x double>, <2 x double>) 672