diff options
| author | Cameron McInally <cameron.mcinally@nyu.edu> | 2019-06-06 20:11:30 +0000 |
|---|---|---|
| committer | Cameron McInally <cameron.mcinally@nyu.edu> | 2019-06-06 20:11:30 +0000 |
| commit | 3d2ee0053aa2576fd19cd169798c496199f0a29b (patch) | |
| tree | 853d381706c549338d06cd1a22e102819ddd97ab | |
| parent | e8a301f87f75b7743a62077ac60fe06739fbab4b (diff) | |
| download | bcm5719-llvm-3d2ee0053aa2576fd19cd169798c496199f0a29b.tar.gz bcm5719-llvm-3d2ee0053aa2576fd19cd169798c496199f0a29b.zip | |
[NFC][CodeGen] Add unary fneg tests to X86/fma-scalar-combine.ll
llvm-svn: 362741
| -rw-r--r-- | llvm/test/CodeGen/X86/fma-scalar-combine.ll | 100 |
1 files changed, 97 insertions, 3 deletions
diff --git a/llvm/test/CodeGen/X86/fma-scalar-combine.ll b/llvm/test/CodeGen/X86/fma-scalar-combine.ll index f8e823525b8..6d287f3b1c8 100644 --- a/llvm/test/CodeGen/X86/fma-scalar-combine.ll +++ b/llvm/test/CodeGen/X86/fma-scalar-combine.ll @@ -428,6 +428,31 @@ entry: ret <2 x double> %12 } +define <2 x double> @combine_scalar_mask_fnmsub_f32_unary_fneg(<2 x double> %a, i8 zeroext %k, <2 x double> %b, <2 x double> %c) { +; CHECK-LABEL: combine_scalar_mask_fnmsub_f32_unary_fneg: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf] +; CHECK-NEXT: vfnmsub213ss %xmm2, %xmm1, %xmm0 {%k1} # encoding: [0x62,0xf2,0x75,0x09,0xaf,0xc2] +; CHECK-NEXT: # xmm0 = -(xmm1 * xmm0) - xmm2 +; CHECK-NEXT: retq # encoding: [0xc3] +entry: + %0 = bitcast <2 x double> %a to <4 x float> + %1 = bitcast <2 x double> %b to <4 x float> + %2 = bitcast <2 x double> %c to <4 x float> + %3 = extractelement <4 x float> %0, i64 0 + %4 = extractelement <4 x float> %1, i64 0 + %5 = extractelement <4 x float> %2, i64 0 + %sub = fneg fast float %5 + %6 = fmul fast float %4, %3 + %7 = fsub fast float %sub, %6 + %8 = bitcast i8 %k to <8 x i1> + %9 = extractelement <8 x i1> %8, i64 0 + %10 = select i1 %9, float %7, float %3 + %11 = insertelement <4 x float> %0, float %10, i64 0 + %12 = bitcast <4 x float> %11 to <2 x double> + ret <2 x double> %12 +} + define <2 x double> @combine_scalar_mask_fnmsub_f64(<2 x double> %a, i8 zeroext %k, <2 x double> %b, <2 x double> %c) { ; CHECK-LABEL: combine_scalar_mask_fnmsub_f64: ; CHECK: # %bb.0: # %entry @@ -449,6 +474,27 @@ entry: ret <2 x double> %8 } +define <2 x double> @combine_scalar_mask_fnmsub_f64_unary_fneg(<2 x double> %a, i8 zeroext %k, <2 x double> %b, <2 x double> %c) { +; CHECK-LABEL: combine_scalar_mask_fnmsub_f64_unary_fneg: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf] +; CHECK-NEXT: vfnmsub213sd %xmm2, %xmm1, %xmm0 {%k1} # encoding: [0x62,0xf2,0xf5,0x09,0xaf,0xc2] +; CHECK-NEXT: # xmm0 = -(xmm1 * xmm0) - xmm2 +; CHECK-NEXT: retq # encoding: [0xc3] +entry: + %0 = extractelement <2 x double> %a, i64 0 + %1 = extractelement <2 x double> %b, i64 0 + %2 = extractelement <2 x double> %c, i64 0 + %sub = fneg fast double %2 + %3 = fmul fast double %1, %0 + %4 = fsub fast double %sub, %3 + %5 = bitcast i8 %k to <8 x i1> + %6 = extractelement <8 x i1> %5, i64 0 + %7 = select i1 %6, double %4, double %0 + %8 = insertelement <2 x double> %a, double %7, i64 0 + ret <2 x double> %8 +} + define <2 x double> @combine_scalar_maskz_fnmsub_32(i8 zeroext %k, <2 x double> %a, <2 x double> %b, <2 x double> %c) { ; CHECK-LABEL: combine_scalar_maskz_fnmsub_32: ; CHECK: # %bb.0: # %entry @@ -474,8 +520,8 @@ entry: ret <2 x double> %12 } -define <2 x double> @combine_scalar_maskz_fnmsub_64(i8 zeroext %k, <2 x double> %a, <2 x double> %b, <2 x double> %c) { -; CHECK-LABEL: combine_scalar_maskz_fnmsub_64: +define <2 x double> @combine_scalar_maskz_fnmsub_64_unary_fneg(i8 zeroext %k, <2 x double> %a, <2 x double> %b, <2 x double> %c) { +; CHECK-LABEL: combine_scalar_maskz_fnmsub_64_unary_fneg: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf] ; CHECK-NEXT: vfnmsub213sd %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0x89,0xaf,0xc2] @@ -485,7 +531,7 @@ entry: %0 = extractelement <2 x double> %a, i64 0 %1 = extractelement <2 x double> %b, i64 0 %2 = extractelement <2 x double> %c, i64 0 - %sub = fsub fast double -0.000000e+00, %2 + %sub = fneg fast double %2 %3 = fmul fast double %1, %0 %4 = fsub fast double %sub, %3 %5 = bitcast i8 %k to <8 x i1> @@ -521,6 +567,32 @@ entry: ret <2 x double> %12 } +define <2 x double> @combine_scalar_mask3_fnmsub_32_unary_fneg(<2 x double> %a, <2 x double> %b, <2 x double> %c, i8 zeroext %k) { +; CHECK-LABEL: combine_scalar_mask3_fnmsub_32_unary_fneg: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf] +; CHECK-NEXT: vfnmsub231ss %xmm0, %xmm1, %xmm2 {%k1} # encoding: [0x62,0xf2,0x75,0x09,0xbf,0xd0] +; CHECK-NEXT: # xmm2 = -(xmm1 * xmm0) - xmm2 +; CHECK-NEXT: vmovaps %xmm2, %xmm0 # encoding: [0xc5,0xf8,0x28,0xc2] +; CHECK-NEXT: retq # encoding: [0xc3] +entry: + %0 = bitcast <2 x double> %a to <4 x float> + %1 = bitcast <2 x double> %b to <4 x float> + %2 = bitcast <2 x double> %c to <4 x float> + %3 = extractelement <4 x float> %0, i64 0 + %4 = extractelement <4 x float> %1, i64 0 + %5 = extractelement <4 x float> %2, i64 0 + %sub = fneg fast float %5 + %6 = fmul fast float %4, %3 + %7 = fsub fast float %sub, %6 + %8 = bitcast i8 %k to <8 x i1> + %9 = extractelement <8 x i1> %8, i64 0 + %10 = select i1 %9, float %7, float %5 + %11 = insertelement <4 x float> %2, float %10, i64 0 + %12 = bitcast <4 x float> %11 to <2 x double> + ret <2 x double> %12 +} + define <2 x double> @combine_scalar_mask3_fnmsub_64(<2 x double> %a, <2 x double> %b, <2 x double> %c, i8 zeroext %k) { ; CHECK-LABEL: combine_scalar_mask3_fnmsub_64: ; CHECK: # %bb.0: # %entry @@ -542,3 +614,25 @@ entry: %8 = insertelement <2 x double> %c, double %7, i64 0 ret <2 x double> %8 } + +define <2 x double> @combine_scalar_mask3_fnmsub_64_unary_fneg(<2 x double> %a, <2 x double> %b, <2 x double> %c, i8 zeroext %k) { +; CHECK-LABEL: combine_scalar_mask3_fnmsub_64_unary_fneg: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf] +; CHECK-NEXT: vfnmsub231sd %xmm0, %xmm1, %xmm2 {%k1} # encoding: [0x62,0xf2,0xf5,0x09,0xbf,0xd0] +; CHECK-NEXT: # xmm2 = -(xmm1 * xmm0) - xmm2 +; CHECK-NEXT: vmovapd %xmm2, %xmm0 # encoding: [0xc5,0xf9,0x28,0xc2] +; CHECK-NEXT: retq # encoding: [0xc3] +entry: + %0 = extractelement <2 x double> %a, i64 0 + %1 = extractelement <2 x double> %b, i64 0 + %2 = extractelement <2 x double> %c, i64 0 + %sub = fneg fast double %2 + %3 = fmul fast double %1, %0 + %4 = fsub fast double %sub, %3 + %5 = bitcast i8 %k to <8 x i1> + %6 = extractelement <8 x i1> %5, i64 0 + %7 = select i1 %6, double %4, double %2 + %8 = insertelement <2 x double> %c, double %7, i64 0 + ret <2 x double> %8 +} |

