1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=powerpc64le-unknown-unknown -mcpu=pwr8 -verify-machineinstrs | FileCheck %s --check-prefixes=CHECK,PWR8 3; RUN: llc < %s -mtriple=powerpc64le-unknown-unknown -mcpu=pwr7 -verify-machineinstrs | FileCheck %s --check-prefixes=CHECK,PWR7 4 5define <16 x i8> @getsmaxi8(<16 x i8> %a, <16 x i8> %b) { 6; CHECK-LABEL: getsmaxi8: 7; CHECK: # %bb.0: # %entry 8; CHECK-NEXT: vmaxsb 2, 2, 3 9; CHECK-NEXT: blr 10entry: 11 %0 = icmp sgt <16 x i8> %a, %b 12 %1 = select <16 x i1> %0, <16 x i8> %a, <16 x i8> %b 13 ret <16 x i8> %1 14} 15 16define <8 x i16> @getsmaxi16(<8 x i16> %a, <8 x i16> %b) { 17; CHECK-LABEL: getsmaxi16: 18; CHECK: # %bb.0: # %entry 19; CHECK-NEXT: vmaxsh 2, 2, 3 20; CHECK-NEXT: blr 21entry: 22 %0 = icmp sgt <8 x i16> %a, %b 23 %1 = select <8 x i1> %0, <8 x i16> %a, <8 x i16> %b 24 ret <8 x i16> %1 25} 26 27define <4 x i32> @getsmaxi32(<4 x i32> %a, <4 x i32> %b) { 28; CHECK-LABEL: getsmaxi32: 29; CHECK: # %bb.0: # %entry 30; CHECK-NEXT: vmaxsw 2, 2, 3 31; CHECK-NEXT: blr 32entry: 33 %0 = icmp sgt <4 x i32> %a, %b 34 %1 = select <4 x i1> %0, <4 x i32> %a, <4 x i32> %b 35 ret <4 x i32> %1 36} 37 38define <2 x i64> @getsmaxi64(<2 x i64> %a, <2 x i64> %b) { 39; PWR8-LABEL: getsmaxi64: 40; PWR8: # %bb.0: # %entry 41; PWR8-NEXT: vmaxsd 2, 2, 3 42; PWR8-NEXT: blr 43; 44; PWR7-LABEL: getsmaxi64: 45; PWR7: # %bb.0: # %entry 46; PWR7-NEXT: xxswapd 0, 35 47; PWR7-NEXT: addi 3, 1, -32 48; PWR7-NEXT: xxswapd 1, 34 49; PWR7-NEXT: stxvd2x 0, 0, 3 50; PWR7-NEXT: addi 3, 1, -48 51; PWR7-NEXT: stxvd2x 1, 0, 3 52; PWR7-NEXT: ld 3, -24(1) 53; PWR7-NEXT: ld 4, -40(1) 54; PWR7-NEXT: ld 6, -48(1) 55; PWR7-NEXT: cmpd 4, 3 56; PWR7-NEXT: li 3, 0 57; PWR7-NEXT: li 4, -1 58; PWR7-NEXT: iselgt 5, 4, 3 59; PWR7-NEXT: std 5, -8(1) 60; PWR7-NEXT: ld 5, -32(1) 61; PWR7-NEXT: cmpd 6, 5 62; PWR7-NEXT: iselgt 3, 4, 3 63; PWR7-NEXT: std 3, -16(1) 64; PWR7-NEXT: addi 3, 1, -16 65; PWR7-NEXT: lxvd2x 0, 0, 3 66; PWR7-NEXT: xxswapd 36, 0 67; PWR7-NEXT: xxsel 34, 35, 34, 36 68; PWR7-NEXT: blr 69entry: 70 %0 = icmp sgt <2 x i64> %a, %b 71 %1 = select <2 x i1> %0, <2 x i64> %a, <2 x i64> %b 72 ret <2 x i64> %1 73} 74 75define <4 x float> @getsmaxf32(<4 x float> %a, <4 x float> %b) { 76; CHECK-LABEL: getsmaxf32: 77; CHECK: # %bb.0: # %entry 78; CHECK-NEXT: xvmaxsp 34, 34, 35 79; CHECK-NEXT: blr 80entry: 81 %0 = fcmp nnan nsz oge <4 x float> %a, %b 82 %1 = select <4 x i1> %0, <4 x float> %a, <4 x float> %b 83 ret <4 x float> %1 84} 85 86define <2 x double> @getsmaxf64(<2 x double> %a, <2 x double> %b) { 87; CHECK-LABEL: getsmaxf64: 88; CHECK: # %bb.0: # %entry 89; CHECK-NEXT: xvmaxdp 34, 34, 35 90; CHECK-NEXT: blr 91entry: 92 %0 = fcmp nnan nsz oge <2 x double> %a, %b 93 %1 = select <2 x i1> %0, <2 x double> %a, <2 x double> %b 94 ret <2 x double> %1 95} 96 97define <16 x i8> @getsmini8(<16 x i8> %a, <16 x i8> %b) { 98; CHECK-LABEL: getsmini8: 99; CHECK: # %bb.0: # %entry 100; CHECK-NEXT: vminsb 2, 2, 3 101; CHECK-NEXT: blr 102entry: 103 %0 = icmp slt <16 x i8> %a, %b 104 %1 = select <16 x i1> %0, <16 x i8> %a, <16 x i8> %b 105 ret <16 x i8> %1 106} 107 108define <8 x i16> @getsmini16(<8 x i16> %a, <8 x i16> %b) { 109; CHECK-LABEL: getsmini16: 110; CHECK: # %bb.0: # %entry 111; CHECK-NEXT: vminsh 2, 2, 3 112; CHECK-NEXT: blr 113entry: 114 %0 = icmp slt <8 x i16> %a, %b 115 %1 = select <8 x i1> %0, <8 x i16> %a, <8 x i16> %b 116 ret <8 x i16> %1 117} 118 119define <4 x i32> @getsmini32(<4 x i32> %a, <4 x i32> %b) { 120; CHECK-LABEL: getsmini32: 121; CHECK: # %bb.0: # %entry 122; CHECK-NEXT: vminsw 2, 2, 3 123; CHECK-NEXT: blr 124entry: 125 %0 = icmp slt <4 x i32> %a, %b 126 %1 = select <4 x i1> %0, <4 x i32> %a, <4 x i32> %b 127 ret <4 x i32> %1 128} 129 130define <2 x i64> @getsmini64(<2 x i64> %a, <2 x i64> %b) { 131; PWR8-LABEL: getsmini64: 132; PWR8: # %bb.0: # %entry 133; PWR8-NEXT: vminsd 2, 2, 3 134; PWR8-NEXT: blr 135; 136; PWR7-LABEL: getsmini64: 137; PWR7: # %bb.0: # %entry 138; PWR7-NEXT: xxswapd 0, 35 139; PWR7-NEXT: addi 3, 1, -32 140; PWR7-NEXT: xxswapd 1, 34 141; PWR7-NEXT: stxvd2x 0, 0, 3 142; PWR7-NEXT: addi 3, 1, -48 143; PWR7-NEXT: stxvd2x 1, 0, 3 144; PWR7-NEXT: ld 3, -24(1) 145; PWR7-NEXT: ld 4, -40(1) 146; PWR7-NEXT: ld 6, -48(1) 147; PWR7-NEXT: cmpd 4, 3 148; PWR7-NEXT: li 3, 0 149; PWR7-NEXT: li 4, -1 150; PWR7-NEXT: isellt 5, 4, 3 151; PWR7-NEXT: std 5, -8(1) 152; PWR7-NEXT: ld 5, -32(1) 153; PWR7-NEXT: cmpd 6, 5 154; PWR7-NEXT: isellt 3, 4, 3 155; PWR7-NEXT: std 3, -16(1) 156; PWR7-NEXT: addi 3, 1, -16 157; PWR7-NEXT: lxvd2x 0, 0, 3 158; PWR7-NEXT: xxswapd 36, 0 159; PWR7-NEXT: xxsel 34, 35, 34, 36 160; PWR7-NEXT: blr 161entry: 162 %0 = icmp slt <2 x i64> %a, %b 163 %1 = select <2 x i1> %0, <2 x i64> %a, <2 x i64> %b 164 ret <2 x i64> %1 165} 166 167define <4 x float> @getsminf32(<4 x float> %a, <4 x float> %b) { 168; CHECK-LABEL: getsminf32: 169; CHECK: # %bb.0: # %entry 170; CHECK-NEXT: xvminsp 34, 34, 35 171; CHECK-NEXT: blr 172entry: 173 %0 = fcmp nnan nsz ole <4 x float> %a, %b 174 %1 = select <4 x i1> %0, <4 x float> %a, <4 x float> %b 175 ret <4 x float> %1 176} 177 178define <2 x double> @getsminf64(<2 x double> %a, <2 x double> %b) { 179; CHECK-LABEL: getsminf64: 180; CHECK: # %bb.0: # %entry 181; CHECK-NEXT: xvmindp 34, 34, 35 182; CHECK-NEXT: blr 183entry: 184 %0 = fcmp nnan nsz ole <2 x double> %a, %b 185 %1 = select <2 x i1> %0, <2 x double> %a, <2 x double> %b 186 ret <2 x double> %1 187} 188 189define i128 @invalidv1i128(<2 x i128> %v1, <2 x i128> %v2) { 190; PWR8-LABEL: invalidv1i128: 191; PWR8: # %bb.0: 192; PWR8-NEXT: mfvsrd 3, 36 193; PWR8-NEXT: mfvsrd 4, 34 194; PWR8-NEXT: cmpld 4, 3 195; PWR8-NEXT: xxswapd 0, 36 196; PWR8-NEXT: xxswapd 1, 34 197; PWR8-NEXT: cmpd 1, 4, 3 198; PWR8-NEXT: mffprd 3, 0 199; PWR8-NEXT: mffprd 4, 1 200; PWR8-NEXT: crandc 20, 4, 2 201; PWR8-NEXT: cmpld 1, 4, 3 202; PWR8-NEXT: bc 12, 20, .LBB12_3 203; PWR8-NEXT: # %bb.1: 204; PWR8-NEXT: crand 20, 2, 4 205; PWR8-NEXT: bc 12, 20, .LBB12_3 206; PWR8-NEXT: # %bb.2: 207; PWR8-NEXT: vmr 2, 4 208; PWR8-NEXT: .LBB12_3: 209; PWR8-NEXT: xxswapd 0, 34 210; PWR8-NEXT: mfvsrd 4, 34 211; PWR8-NEXT: mffprd 3, 0 212; PWR8-NEXT: blr 213; 214; PWR7-LABEL: invalidv1i128: 215; PWR7: # %bb.0: 216; PWR7-NEXT: cmpld 4, 8 217; PWR7-NEXT: cmpd 1, 4, 8 218; PWR7-NEXT: crandc 20, 4, 2 219; PWR7-NEXT: cmpld 1, 3, 7 220; PWR7-NEXT: crand 21, 2, 4 221; PWR7-NEXT: cror 20, 21, 20 222; PWR7-NEXT: isel 3, 3, 7, 20 223; PWR7-NEXT: isel 4, 4, 8, 20 224; PWR7-NEXT: std 3, -32(1) 225; PWR7-NEXT: addi 3, 1, -32 226; PWR7-NEXT: std 4, -24(1) 227; PWR7-NEXT: lxvd2x 0, 0, 3 228; PWR7-NEXT: addi 3, 1, -16 229; PWR7-NEXT: stxvd2x 0, 0, 3 230; PWR7-NEXT: ld 3, -16(1) 231; PWR7-NEXT: ld 4, -8(1) 232; PWR7-NEXT: blr 233%1 = icmp slt <2 x i128> %v1, %v2 234%2 = select <2 x i1> %1, <2 x i128> %v1, <2 x i128> %v2 235%3 = extractelement <2 x i128> %2, i32 0 236ret i128 %3 237} 238