From: Craig Topper Date: Sat, 11 Nov 2017 02:26:05 +0000 (+0000) Subject: [X86] Correct the execution domain on ROUND/VROUND instructions. X-Git-Tag: llvmorg-6.0.0-rc1~3622 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0eb4a4338451fb674c0b0be83fdcda4639e250c8;p=platform%2Fupstream%2Fllvm.git [X86] Correct the execution domain on ROUND/VROUND instructions. llvm-svn: 317968 --- diff --git a/llvm/lib/Target/X86/X86InstrSSE.td b/llvm/lib/Target/X86/X86InstrSSE.td index e7986bf..a9bae9b 100644 --- a/llvm/lib/Target/X86/X86InstrSSE.td +++ b/llvm/lib/Target/X86/X86InstrSSE.td @@ -5829,7 +5829,7 @@ let ExeDomain = SSEPackedDouble in { multiclass avx_fp_unop_rm opcss, bits<8> opcsd, string OpcodeStr> { -let ExeDomain = GenericDomain, hasSideEffects = 0 in { +let ExeDomain = SSEPackedSingle, hasSideEffects = 0 in { def SSr : SS4AIi8, Sched<[WriteFAddLd, ReadAfterLd]>; +} // ExeDomain = SSEPackedSingle, hasSideEffects = 0 +let ExeDomain = SSEPackedDouble, hasSideEffects = 0 in { def SDr : SS4AIi8, Sched<[WriteFAddLd, ReadAfterLd]>; -} // ExeDomain = GenericDomain, hasSideEffects = 0 +} // ExeDomain = SSEPackedDouble, hasSideEffects = 0 } multiclass sse41_fp_unop_s opcss, bits<8> opcsd, string OpcodeStr> { -let ExeDomain = GenericDomain, hasSideEffects = 0 in { +let ExeDomain = SSEPackedSingle, hasSideEffects = 0 in { def SSr : SS4AIi8, Sched<[WriteFAddLd, ReadAfterLd]>; +} // ExeDomain = SSEPackedSingle, hasSideEffects = 0 +let ExeDomain = SSEPackedDouble, hasSideEffects = 0 in { def SDr : SS4AIi8, Sched<[WriteFAddLd, ReadAfterLd]>; -} // ExeDomain = GenericDomain, hasSideEffects = 0 +} // ExeDomain = SSEPackedDouble, hasSideEffects = 0 } multiclass sse41_fp_binop_s opcss, bits<8> opcsd, string OpcodeStr, Intrinsic F32Int, Intrinsic F64Int, bit Is2Addr = 1> { -let ExeDomain = GenericDomain, isCodeGenOnly = 1 in { +let ExeDomain = SSEPackedSingle, isCodeGenOnly = 1 in { def SSr_Int : SS4AIi8, Sched<[WriteFAddLd, ReadAfterLd]>; +} // ExeDomain = SSEPackedSingle, isCodeGenOnly = 1 +let ExeDomain = SSEPackedDouble, isCodeGenOnly = 1 in { def SDr_Int : SS4AIi8, Sched<[WriteFAddLd, ReadAfterLd]>; -} // ExeDomain = GenericDomain, isCodeGenOnly = 1 +} // ExeDomain = SSEPackedDouble, isCodeGenOnly = 1 } // FP round - roundss, roundps, roundsd, roundpd diff --git a/llvm/test/CodeGen/X86/sse41-schedule.ll b/llvm/test/CodeGen/X86/sse41-schedule.ll index 76242c8..f86388f 100644 --- a/llvm/test/CodeGen/X86/sse41-schedule.ll +++ b/llvm/test/CodeGen/X86/sse41-schedule.ll @@ -3107,7 +3107,7 @@ declare <4 x float> @llvm.x86.sse41.round.ps(<4 x float>, i32) nounwind readnone define <2 x double> @test_roundsd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) { ; GENERIC-LABEL: test_roundsd: ; GENERIC: # BB#0: -; GENERIC-NEXT: movaps %xmm0, %xmm2 # sched: [1:1.00] +; GENERIC-NEXT: movapd %xmm0, %xmm2 # sched: [1:1.00] ; GENERIC-NEXT: roundsd $7, %xmm1, %xmm2 # sched: [3:1.00] ; GENERIC-NEXT: roundsd $7, (%rdi), %xmm0 # sched: [9:1.00] ; GENERIC-NEXT: addpd %xmm2, %xmm0 # sched: [3:1.00] @@ -3115,7 +3115,7 @@ define <2 x double> @test_roundsd(<2 x double> %a0, <2 x double> %a1, <2 x doubl ; ; SLM-LABEL: test_roundsd: ; SLM: # BB#0: -; SLM-NEXT: movaps %xmm0, %xmm2 # sched: [1:1.00] +; SLM-NEXT: movapd %xmm0, %xmm2 # sched: [1:1.00] ; SLM-NEXT: roundsd $7, (%rdi), %xmm0 # sched: [6:1.00] ; SLM-NEXT: roundsd $7, %xmm1, %xmm2 # sched: [3:1.00] ; SLM-NEXT: addpd %xmm2, %xmm0 # sched: [3:1.00]