From 1239ce3145da249734896c84e122f714b4db9656 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Sun, 25 Sep 2016 16:33:53 +0000 Subject: [PATCH] [AVX-512] Remove duplicate instructions for converting integer to scalar floating point. We can use patterns to point to the other instructions instead. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282355 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86InstrAVX512.td | 40 ++++++++++++++++++-------------- lib/Target/X86/X86InstrInfo.cpp | 8 ------- 2 files changed, 22 insertions(+), 26 deletions(-) diff --git a/lib/Target/X86/X86InstrAVX512.td b/lib/Target/X86/X86InstrAVX512.td index 5ce8969389d..6abb2bab609 100644 --- a/lib/Target/X86/X86InstrAVX512.td +++ b/lib/Target/X86/X86InstrAVX512.td @@ -5608,24 +5608,28 @@ let Predicates = [HasAVX512] in { (VCVTSD2SI64Zrm addr:$src)>; } // HasAVX512 -let isCodeGenOnly = 1 , Predicates = [HasAVX512] in { - defm Int_VCVTSI2SSZ : sse12_cvt_sint_3addr<0x2A, GR32, VR128X, - int_x86_sse_cvtsi2ss, i32mem, loadi32, "cvtsi2ss{l}", - SSE_CVT_Scalar, 0>, XS, EVEX_4V; - defm Int_VCVTSI2SS64Z : sse12_cvt_sint_3addr<0x2A, GR64, VR128X, - int_x86_sse_cvtsi642ss, i64mem, loadi64, "cvtsi2ss{q}", - SSE_CVT_Scalar, 0>, XS, EVEX_4V, VEX_W; - defm Int_VCVTSI2SDZ : sse12_cvt_sint_3addr<0x2A, GR32, VR128X, - int_x86_sse2_cvtsi2sd, i32mem, loadi32, "cvtsi2sd{l}", - SSE_CVT_Scalar, 0>, XD, EVEX_4V; - defm Int_VCVTSI2SD64Z : sse12_cvt_sint_3addr<0x2A, GR64, VR128X, - int_x86_sse2_cvtsi642sd, i64mem, loadi64, "cvtsi2sd{q}", - SSE_CVT_Scalar, 0>, XD, EVEX_4V, VEX_W; - - defm Int_VCVTUSI2SDZ : sse12_cvt_sint_3addr<0x7B, GR32, VR128X, - int_x86_avx512_cvtusi2sd, i32mem, loadi32, "cvtusi2sd{l}", - SSE_CVT_Scalar, 0>, XD, EVEX_4V; -} // isCodeGenOnly = 1, Predicates = [HasAVX512] +let Predicates = [HasAVX512] in { + def : Pat<(int_x86_sse_cvtsi2ss VR128X:$src1, GR32:$src2), + (VCVTSI2SSZrr_Int VR128X:$src1, GR32:$src2)>; + def : Pat<(int_x86_sse_cvtsi2ss VR128X:$src1, (loadi32 addr:$src2)), + (VCVTSI2SSZrm_Int VR128X:$src1, addr:$src2)>; + def : Pat<(int_x86_sse_cvtsi642ss VR128X:$src1, GR64:$src2), + (VCVTSI642SSZrr_Int VR128X:$src1, GR64:$src2)>; + def : Pat<(int_x86_sse_cvtsi642ss VR128X:$src1, (loadi64 addr:$src2)), + (VCVTSI642SSZrm_Int VR128X:$src1, addr:$src2)>; + def : Pat<(int_x86_sse2_cvtsi2sd VR128X:$src1, GR32:$src2), + (VCVTSI2SDZrr_Int VR128X:$src1, GR32:$src2)>; + def : Pat<(int_x86_sse2_cvtsi2sd VR128X:$src1, (loadi32 addr:$src2)), + (VCVTSI2SDZrm_Int VR128X:$src1, addr:$src2)>; + def : Pat<(int_x86_sse2_cvtsi642sd VR128X:$src1, GR64:$src2), + (VCVTSI642SDZrr_Int VR128X:$src1, GR64:$src2)>; + def : Pat<(int_x86_sse2_cvtsi642sd VR128X:$src1, (loadi64 addr:$src2)), + (VCVTSI642SDZrm_Int VR128X:$src1, addr:$src2)>; + def : Pat<(int_x86_avx512_cvtusi2sd VR128X:$src1, GR32:$src2), + (VCVTUSI2SDZrr_Int VR128X:$src1, GR32:$src2)>; + def : Pat<(int_x86_avx512_cvtusi2sd VR128X:$src1, (loadi32 addr:$src2)), + (VCVTUSI2SDZrm_Int VR128X:$src1, addr:$src2)>; +} // Predicates = [HasAVX512] // Convert float/double to signed/unsigned int 32/64 with truncation multiclass avx512_cvt_s_all opc, string asm, X86VectorVTInfo _SrcRC, diff --git a/lib/Target/X86/X86InstrInfo.cpp b/lib/Target/X86/X86InstrInfo.cpp index 2f7dcfbe245..14f4102658d 100644 --- a/lib/Target/X86/X86InstrInfo.cpp +++ b/lib/Target/X86/X86InstrInfo.cpp @@ -6383,26 +6383,18 @@ static bool hasUndefRegUpdate(unsigned Opcode) { // AVX-512 case X86::VCVTSI2SSZrr: case X86::VCVTSI2SSZrm: - case X86::Int_VCVTSI2SSZrr: - case X86::Int_VCVTSI2SSZrm: case X86::VCVTSI2SSZrr_Int: case X86::VCVTSI2SSZrm_Int: case X86::VCVTSI642SSZrr: case X86::VCVTSI642SSZrm: - case X86::Int_VCVTSI2SS64Zrr: - case X86::Int_VCVTSI2SS64Zrm: case X86::VCVTSI642SSZrr_Int: case X86::VCVTSI642SSZrm_Int: case X86::VCVTSI2SDZrr: case X86::VCVTSI2SDZrm: - case X86::Int_VCVTSI2SDZrr: - case X86::Int_VCVTSI2SDZrm: case X86::VCVTSI2SDZrr_Int: case X86::VCVTSI2SDZrm_Int: case X86::VCVTSI642SDZrr: case X86::VCVTSI642SDZrm: - case X86::Int_VCVTSI2SD64Zrr: - case X86::Int_VCVTSI2SD64Zrm: case X86::VCVTSI642SDZrr_Int: case X86::VCVTSI642SDZrm_Int: case X86::VCVTSD2SSZrr: -- 2.50.1