1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=avx | FileCheck %s --check-prefix=X86 3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx | FileCheck %s --check-prefix=X64 4 5define <4 x double> @cmp4f64_domain(<4 x double> %a) { 6; X86-LABEL: cmp4f64_domain: 7; X86: # %bb.0: 8; X86-NEXT: vxorps %xmm1, %xmm1, %xmm1 9; X86-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 10; X86-NEXT: vaddpd %ymm1, %ymm0, %ymm0 11; X86-NEXT: retl 12; 13; X64-LABEL: cmp4f64_domain: 14; X64: # %bb.0: 15; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 16; X64-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 17; X64-NEXT: vaddpd %ymm1, %ymm0, %ymm0 18; X64-NEXT: retq 19 %cmp = fcmp oeq <4 x double> zeroinitializer, zeroinitializer 20 %sext = sext <4 x i1> %cmp to <4 x i64> 21 %mask = bitcast <4 x i64> %sext to <4 x double> 22 %add = fadd <4 x double> %a, %mask 23 ret <4 x double> %add 24} 25 26define <4 x double> @cmp4f64_domain_optsize(<4 x double> %a) optsize { 27; X86-LABEL: cmp4f64_domain_optsize: 28; X86: # %bb.0: 29; X86-NEXT: vxorps %xmm1, %xmm1, %xmm1 30; X86-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 31; X86-NEXT: vaddpd %ymm1, %ymm0, %ymm0 32; X86-NEXT: retl 33; 34; X64-LABEL: cmp4f64_domain_optsize: 35; X64: # %bb.0: 36; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 37; X64-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 38; X64-NEXT: vaddpd %ymm1, %ymm0, %ymm0 39; X64-NEXT: retq 40 %cmp = fcmp oeq <4 x double> zeroinitializer, zeroinitializer 41 %sext = sext <4 x i1> %cmp to <4 x i64> 42 %mask = bitcast <4 x i64> %sext to <4 x double> 43 %add = fadd <4 x double> %a, %mask 44 ret <4 x double> %add 45} 46 47define <8 x float> @cmp8f32_domain(<8 x float> %a) { 48; X86-LABEL: cmp8f32_domain: 49; X86: # %bb.0: 50; X86-NEXT: vxorps %xmm1, %xmm1, %xmm1 51; X86-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 52; X86-NEXT: vaddps %ymm1, %ymm0, %ymm0 53; X86-NEXT: retl 54; 55; X64-LABEL: cmp8f32_domain: 56; X64: # %bb.0: 57; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 58; X64-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 59; X64-NEXT: vaddps %ymm1, %ymm0, %ymm0 60; X64-NEXT: retq 61 %cmp = fcmp oeq <8 x float> zeroinitializer, zeroinitializer 62 %sext = sext <8 x i1> %cmp to <8 x i32> 63 %mask = bitcast <8 x i32> %sext to <8 x float> 64 %add = fadd <8 x float> %a, %mask 65 ret <8 x float> %add 66} 67 68define <8 x float> @cmp8f32_domain_optsize(<8 x float> %a) optsize { 69; X86-LABEL: cmp8f32_domain_optsize: 70; X86: # %bb.0: 71; X86-NEXT: vxorps %xmm1, %xmm1, %xmm1 72; X86-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 73; X86-NEXT: vaddps %ymm1, %ymm0, %ymm0 74; X86-NEXT: retl 75; 76; X64-LABEL: cmp8f32_domain_optsize: 77; X64: # %bb.0: 78; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 79; X64-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 80; X64-NEXT: vaddps %ymm1, %ymm0, %ymm0 81; X64-NEXT: retq 82 %cmp = fcmp oeq <8 x float> zeroinitializer, zeroinitializer 83 %sext = sext <8 x i1> %cmp to <8 x i32> 84 %mask = bitcast <8 x i32> %sext to <8 x float> 85 %add = fadd <8 x float> %a, %mask 86 ret <8 x float> %add 87} 88