]> granicus.if.org Git - llvm/commitdiff
[X86][MMX] Add IIC_MMX_MOVMSK instruction itinerary class
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Sun, 26 Nov 2017 17:56:07 +0000 (17:56 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sun, 26 Nov 2017 17:56:07 +0000 (17:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@318999 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86InstrMMX.td
lib/Target/X86/X86Schedule.td
lib/Target/X86/X86ScheduleAtom.td
test/CodeGen/X86/mmx-schedule.ll

index d387f93109e2331a59ef3b7444c1788b38bc3a98..039b4a2485447cb88036ad1cf84e5b5f428ca163 100644 (file)
@@ -616,7 +616,8 @@ def MMX_PMOVMSKBrr : MMXI<0xD7, MRMSrcReg, (outs GR32orGR64:$dst),
                           (ins VR64:$src),
                           "pmovmskb\t{$src, $dst|$dst, $src}",
                           [(set GR32orGR64:$dst,
-                                (int_x86_mmx_pmovmskb VR64:$src))]>;
+                                (int_x86_mmx_pmovmskb VR64:$src))],
+                          IIC_MMX_MOVMSK>, Sched<[WriteVecLogic]>;
 
 // Low word of XMM to MMX.
 def MMX_X86movdq2q : SDNode<"X86ISD::MOVDQ2Q", SDTypeProfile<1, 1,
index fcf9f4ff6384f1d182e8e33e059b84e9d590c9fc..91d450c1ffbc4c87a8f563107a47369288469ccc 100644 (file)
@@ -426,7 +426,7 @@ def IIC_MMX_PSHUF : InstrItinClass;
 def IIC_MMX_PEXTR : InstrItinClass;
 def IIC_MMX_PINSRW : InstrItinClass;
 def IIC_MMX_MASKMOV : InstrItinClass;
-
+def IIC_MMX_MOVMSK : InstrItinClass;
 def IIC_MMX_CVT_PD_RR : InstrItinClass;
 def IIC_MMX_CVT_PD_RM : InstrItinClass;
 def IIC_MMX_CVT_PS_RR : InstrItinClass;
index 200a3216f6f482d13c42bd46c493ab9cde6ffb9c..1a070f79de692023ecae018d31291d2e7516a7c0 100644 (file)
@@ -338,6 +338,7 @@ def AtomItineraries : ProcessorItineraries<
   InstrItinData<IIC_MMX_PEXTR,   [InstrStage<4, [Port0, Port1]>] >,
   InstrItinData<IIC_MMX_PINSRW,  [InstrStage<1, [Port0]>] >,
   InstrItinData<IIC_MMX_MASKMOV, [InstrStage<1, [Port0]>] >,
+  InstrItinData<IIC_MMX_MOVMSK, [InstrStage<3, [Port0]>] >,
   // conversions
   // from/to PD
   InstrItinData<IIC_MMX_CVT_PD_RR, [InstrStage<7, [Port0, Port1]>] >,
index 7f7c00d075ba75338ed5bce449c305ba00c90b8b..6b99559d380a7affb2a8b33ba71bbd37dc86e546 100644 (file)
@@ -4088,22 +4088,22 @@ declare x86_mmx @llvm.x86.mmx.pminu.b(x86_mmx, x86_mmx) nounwind readnone
 define i32 @test_pmovmskb(x86_mmx %a0) optsize {
 ; GENERIC-LABEL: test_pmovmskb:
 ; GENERIC:       # BB#0:
-; GENERIC-NEXT:    pmovmskb %mm0, %eax
+; GENERIC-NEXT:    pmovmskb %mm0, %eax # sched: [1:1.00]
 ; GENERIC-NEXT:    retq # sched: [1:1.00]
 ;
 ; ATOM-LABEL: test_pmovmskb:
 ; ATOM:       # BB#0:
-; ATOM-NEXT:    pmovmskb %mm0, %eax
+; ATOM-NEXT:    pmovmskb %mm0, %eax # sched: [3:3.00]
 ; ATOM-NEXT:    retq # sched: [79:39.50]
 ;
 ; SLM-LABEL: test_pmovmskb:
 ; SLM:       # BB#0:
-; SLM-NEXT:    pmovmskb %mm0, %eax
+; SLM-NEXT:    pmovmskb %mm0, %eax # sched: [1:0.50]
 ; SLM-NEXT:    retq # sched: [4:1.00]
 ;
 ; SANDY-LABEL: test_pmovmskb:
 ; SANDY:       # BB#0:
-; SANDY-NEXT:    pmovmskb %mm0, %eax
+; SANDY-NEXT:    pmovmskb %mm0, %eax # sched: [1:1.00]
 ; SANDY-NEXT:    retq # sched: [1:1.00]
 ;
 ; HASWELL-LABEL: test_pmovmskb:
@@ -4128,7 +4128,7 @@ define i32 @test_pmovmskb(x86_mmx %a0) optsize {
 ;
 ; BTVER2-LABEL: test_pmovmskb:
 ; BTVER2:       # BB#0:
-; BTVER2-NEXT:    pmovmskb %mm0, %eax
+; BTVER2-NEXT:    pmovmskb %mm0, %eax # sched: [1:0.50]
 ; BTVER2-NEXT:    retq # sched: [4:1.00]
 ;
 ; ZNVER1-LABEL: test_pmovmskb: