338 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 < %s \3; RUN: -verify-machineinstrs | FileCheck %s --check-prefix=P84; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr9 < %s \5; RUN: -verify-machineinstrs | FileCheck %s --check-prefix=P96 7define zeroext i1 @abs_isinff(float %x) {8; P8-LABEL: abs_isinff:9; P8: # %bb.0: # %entry10; P8-NEXT: xscvdpspn 0, 111; P8-NEXT: lis 4, 3264012; P8-NEXT: mffprwz 3, 013; P8-NEXT: clrlwi 3, 3, 114; P8-NEXT: xor 3, 3, 415; P8-NEXT: cntlzw 3, 316; P8-NEXT: srwi 3, 3, 517; P8-NEXT: blr18;19; P9-LABEL: abs_isinff:20; P9: # %bb.0: # %entry21; P9-NEXT: xststdcsp 0, 1, 4822; P9-NEXT: li 3, 023; P9-NEXT: li 4, 124; P9-NEXT: iseleq 3, 4, 325; P9-NEXT: blr26entry:27 %0 = tail call float @llvm.fabs.f32(float %x)28 %cmpinf = fcmp oeq float %0, 0x7FF000000000000029 ret i1 %cmpinf30}31 32define zeroext i1 @abs_isinf(double %x) {33; P8-LABEL: abs_isinf:34; P8: # %bb.0: # %entry35; P8-NEXT: mffprd 3, 136; P8-NEXT: li 4, 204737; P8-NEXT: rldic 4, 4, 52, 138; P8-NEXT: clrldi 3, 3, 139; P8-NEXT: xor 3, 3, 440; P8-NEXT: cntlzd 3, 341; P8-NEXT: rldicl 3, 3, 58, 6342; P8-NEXT: blr43;44; P9-LABEL: abs_isinf:45; P9: # %bb.0: # %entry46; P9-NEXT: xststdcdp 0, 1, 4847; P9-NEXT: li 3, 048; P9-NEXT: li 4, 149; P9-NEXT: iseleq 3, 4, 350; P9-NEXT: blr51entry:52 %0 = tail call double @llvm.fabs.f64(double %x)53 %cmpinf = fcmp oeq double %0, 0x7FF000000000000054 ret i1 %cmpinf55}56 57define zeroext i1 @abs_isinfq(fp128 %x) {58; P8-LABEL: abs_isinfq:59; P8: # %bb.0: # %entry60; P8-NEXT: xxswapd 0, 3461; P8-NEXT: addi 3, 1, -1662; P8-NEXT: li 5, 3276763; P8-NEXT: stxvd2x 0, 0, 364; P8-NEXT: rldic 5, 5, 48, 165; P8-NEXT: ld 4, -8(1)66; P8-NEXT: ld 3, -16(1)67; P8-NEXT: clrldi 4, 4, 168; P8-NEXT: xor 4, 4, 569; P8-NEXT: or 3, 3, 470; P8-NEXT: cntlzd 3, 371; P8-NEXT: rldicl 3, 3, 58, 6372; P8-NEXT: blr73;74; P9-LABEL: abs_isinfq:75; P9: # %bb.0: # %entry76; P9-NEXT: xststdcqp 0, 2, 4877; P9-NEXT: li 3, 078; P9-NEXT: li 4, 179; P9-NEXT: iseleq 3, 4, 380; P9-NEXT: blr81entry:82 %0 = tail call fp128 @llvm.fabs.f128(fp128 %x)83 %cmpinf = fcmp oeq fp128 %0, 0xL00000000000000007FFF00000000000084 ret i1 %cmpinf85}86 87define zeroext i1 @abs_isinfornanf(float %x) {88; P8-LABEL: abs_isinfornanf:89; P8: # %bb.0: # %entry90; P8-NEXT: xscvdpspn 0, 191; P8-NEXT: lis 4, 3263992; P8-NEXT: ori 4, 4, 6553593; P8-NEXT: mffprwz 3, 094; P8-NEXT: clrlwi 3, 3, 195; P8-NEXT: sub 3, 4, 396; P8-NEXT: rldicl 3, 3, 1, 6397; P8-NEXT: blr98;99; P9-LABEL: abs_isinfornanf:100; P9: # %bb.0: # %entry101; P9-NEXT: xststdcsp 0, 1, 112102; P9-NEXT: li 3, 0103; P9-NEXT: li 4, 1104; P9-NEXT: iseleq 3, 4, 3105; P9-NEXT: blr106entry:107 %0 = tail call float @llvm.fabs.f32(float %x)108 %cmpinf = fcmp ueq float %0, 0x7FF0000000000000109 ret i1 %cmpinf110}111 112define zeroext i1 @abs_isinfornan(double %x) {113; P8-LABEL: abs_isinfornan:114; P8: # %bb.0: # %entry115; P8-NEXT: mffprd 3, 1116; P8-NEXT: li 4, -33117; P8-NEXT: rldicl 4, 4, 47, 1118; P8-NEXT: sradi 5, 4, 63119; P8-NEXT: clrldi 3, 3, 1120; P8-NEXT: rldicl 6, 3, 1, 63121; P8-NEXT: subc 3, 4, 3122; P8-NEXT: adde 3, 6, 5123; P8-NEXT: xori 3, 3, 1124; P8-NEXT: blr125;126; P9-LABEL: abs_isinfornan:127; P9: # %bb.0: # %entry128; P9-NEXT: xststdcdp 0, 1, 112129; P9-NEXT: li 3, 0130; P9-NEXT: li 4, 1131; P9-NEXT: iseleq 3, 4, 3132; P9-NEXT: blr133entry:134 %0 = tail call double @llvm.fabs.f64(double %x)135 %cmpinf = fcmp ueq double %0, 0x7FF0000000000000136 ret i1 %cmpinf137}138 139define zeroext i1 @abs_isinfornanq(fp128 %x) {140; P8-LABEL: abs_isinfornanq:141; P8: # %bb.0: # %entry142; P8-NEXT: xxswapd 0, 34143; P8-NEXT: addi 3, 1, -16144; P8-NEXT: li 4, -3145; P8-NEXT: stxvd2x 0, 0, 3146; P8-NEXT: rldicl 4, 4, 47, 1147; P8-NEXT: ld 3, -8(1)148; P8-NEXT: sradi 5, 4, 63149; P8-NEXT: clrldi 3, 3, 1150; P8-NEXT: rldicl 6, 3, 1, 63151; P8-NEXT: subc 3, 4, 3152; P8-NEXT: adde 3, 6, 5153; P8-NEXT: xori 3, 3, 1154; P8-NEXT: blr155;156; P9-LABEL: abs_isinfornanq:157; P9: # %bb.0: # %entry158; P9-NEXT: xststdcqp 0, 2, 112159; P9-NEXT: li 3, 0160; P9-NEXT: li 4, 1161; P9-NEXT: iseleq 3, 4, 3162; P9-NEXT: blr163entry:164 %0 = tail call fp128 @llvm.fabs.f128(fp128 %x)165 %cmpinf = fcmp ueq fp128 %0, 0xL00000000000000007FFF000000000000166 ret i1 %cmpinf167}168 169define <4 x i1> @abs_isinfv4f32(<4 x float> %x) {170; P8-LABEL: abs_isinfv4f32:171; P8: # %bb.0: # %entry172; P8-NEXT: addis 3, 2, .LCPI6_0@toc@ha173; P8-NEXT: xvabssp 0, 34174; P8-NEXT: addi 3, 3, .LCPI6_0@toc@l175; P8-NEXT: lxvd2x 1, 0, 3176; P8-NEXT: xvcmpeqsp 34, 0, 1177; P8-NEXT: blr178;179; P9-LABEL: abs_isinfv4f32:180; P9: # %bb.0: # %entry181; P9-NEXT: addis 3, 2, .LCPI6_0@toc@ha182; P9-NEXT: xvabssp 0, 34183; P9-NEXT: addi 3, 3, .LCPI6_0@toc@l184; P9-NEXT: lxv 1, 0(3)185; P9-NEXT: xvcmpeqsp 34, 0, 1186; P9-NEXT: blr187entry:188 %0 = tail call <4 x float> @llvm.fabs.v4f32(<4 x float> %x)189 %cmpinf = fcmp oeq <4 x float> %0, <float 0x7FF0000000000000, float 0x7FF0000000000000, float 0x7FF0000000000000, float 0x7FF0000000000000>190 ret <4 x i1> %cmpinf191}192 193define <2 x i1> @abs_isinfv2f64(<2 x double> %x) {194; P8-LABEL: abs_isinfv2f64:195; P8: # %bb.0: # %entry196; P8-NEXT: addis 3, 2, .LCPI7_0@toc@ha197; P8-NEXT: xvabsdp 0, 34198; P8-NEXT: addi 3, 3, .LCPI7_0@toc@l199; P8-NEXT: lxvd2x 1, 0, 3200; P8-NEXT: xvcmpeqdp 34, 0, 1201; P8-NEXT: blr202;203; P9-LABEL: abs_isinfv2f64:204; P9: # %bb.0: # %entry205; P9-NEXT: addis 3, 2, .LCPI7_0@toc@ha206; P9-NEXT: xvabsdp 0, 34207; P9-NEXT: addi 3, 3, .LCPI7_0@toc@l208; P9-NEXT: lxv 1, 0(3)209; P9-NEXT: xvcmpeqdp 34, 0, 1210; P9-NEXT: blr211entry:212 %0 = tail call <2 x double> @llvm.fabs.v2f64(<2 x double> %x)213 %cmpinf = fcmp oeq <2 x double> %0, <double 0x7FF0000000000000, double 0x7FF0000000000000>214 ret <2 x i1> %cmpinf215}216 217define zeroext i1 @iszerof(float %x) {218; P8-LABEL: iszerof:219; P8: # %bb.0: # %entry220; P8-NEXT: xxlxor 0, 0, 0221; P8-NEXT: li 3, 0222; P8-NEXT: li 4, 1223; P8-NEXT: fcmpu 0, 1, 0224; P8-NEXT: iseleq 3, 4, 3225; P8-NEXT: blr226;227; P9-LABEL: iszerof:228; P9: # %bb.0: # %entry229; P9-NEXT: xxlxor 0, 0, 0230; P9-NEXT: li 3, 0231; P9-NEXT: li 4, 1232; P9-NEXT: fcmpu 0, 1, 0233; P9-NEXT: iseleq 3, 4, 3234; P9-NEXT: blr235entry:236 %cmp = fcmp oeq float %x, 0.000000e+00237 ret i1 %cmp238}239 240define zeroext i1 @iszero(double %x) {241; P8-LABEL: iszero:242; P8: # %bb.0: # %entry243; P8-NEXT: xxlxor 0, 0, 0244; P8-NEXT: li 3, 0245; P8-NEXT: li 4, 1246; P8-NEXT: fcmpu 0, 1, 0247; P8-NEXT: iseleq 3, 4, 3248; P8-NEXT: blr249;250; P9-LABEL: iszero:251; P9: # %bb.0: # %entry252; P9-NEXT: xxlxor 0, 0, 0253; P9-NEXT: li 3, 0254; P9-NEXT: li 4, 1255; P9-NEXT: fcmpu 0, 1, 0256; P9-NEXT: iseleq 3, 4, 3257; P9-NEXT: blr258entry:259 %cmp = fcmp oeq double %x, 0.000000e+00260 ret i1 %cmp261}262 263define zeroext i1 @iszeroq(fp128 %x) {264; P8-LABEL: iszeroq:265; P8: # %bb.0: # %entry266; P8-NEXT: mflr 0267; P8-NEXT: stdu 1, -32(1)268; P8-NEXT: std 0, 48(1)269; P8-NEXT: .cfi_def_cfa_offset 32270; P8-NEXT: .cfi_offset lr, 16271; P8-NEXT: addis 3, 2, .LCPI10_0@toc@ha272; P8-NEXT: addi 3, 3, .LCPI10_0@toc@l273; P8-NEXT: lxvd2x 0, 0, 3274; P8-NEXT: xxswapd 35, 0275; P8-NEXT: bl __eqkf2276; P8-NEXT: nop277; P8-NEXT: cntlzw 3, 3278; P8-NEXT: srwi 3, 3, 5279; P8-NEXT: addi 1, 1, 32280; P8-NEXT: ld 0, 16(1)281; P8-NEXT: mtlr 0282; P8-NEXT: blr283;284; P9-LABEL: iszeroq:285; P9: # %bb.0: # %entry286; P9-NEXT: addis 3, 2, .LCPI10_0@toc@ha287; P9-NEXT: li 4, 1288; P9-NEXT: addi 3, 3, .LCPI10_0@toc@l289; P9-NEXT: lxv 35, 0(3)290; P9-NEXT: li 3, 0291; P9-NEXT: xscmpuqp 0, 2, 3292; P9-NEXT: iseleq 3, 4, 3293; P9-NEXT: blr294entry:295 %cmp = fcmp oeq fp128 %x, 0xL00000000000000000000000000000000296 ret i1 %cmp297}298 299define <4 x i1> @iszerov4f32(<4 x float> %x) {300; P8-LABEL: iszerov4f32:301; P8: # %bb.0: # %entry302; P8-NEXT: xxlxor 0, 0, 0303; P8-NEXT: xvcmpeqsp 34, 34, 0304; P8-NEXT: blr305;306; P9-LABEL: iszerov4f32:307; P9: # %bb.0: # %entry308; P9-NEXT: xxlxor 0, 0, 0309; P9-NEXT: xvcmpeqsp 34, 34, 0310; P9-NEXT: blr311entry:312 %cmp = fcmp oeq <4 x float> %x, <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>313 ret <4 x i1> %cmp314}315 316define <2 x i1> @iszerov2f64(<2 x double> %x) {317; P8-LABEL: iszerov2f64:318; P8: # %bb.0: # %entry319; P8-NEXT: xxlxor 0, 0, 0320; P8-NEXT: xvcmpeqdp 34, 34, 0321; P8-NEXT: blr322;323; P9-LABEL: iszerov2f64:324; P9: # %bb.0: # %entry325; P9-NEXT: xxlxor 0, 0, 0326; P9-NEXT: xvcmpeqdp 34, 34, 0327; P9-NEXT: blr328entry:329 %cmp = fcmp oeq <2 x double> %x, <double 0.000000e+00, double 0.000000e+00>330 ret <2 x i1> %cmp331}332 333declare float @llvm.fabs.f32(float)334declare double @llvm.fabs.f64(double)335declare fp128 @llvm.fabs.f128(fp128)336declare <4 x float> @llvm.fabs.v4f32(<4 x float>)337declare <2 x double> @llvm.fabs.v2f64(<2 x double>)338