[X86] Add MMX MOVD/MOVQ stores to folding tables to support stack folding
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Tue, 24 Sep 2019 16:15:32 +0000 (16:15 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Tue, 24 Sep 2019 16:15:32 +0000 (16:15 +0000)
llvm-svn: 372770

llvm/lib/Target/X86/X86InstrFoldTables.cpp
llvm/test/CodeGen/X86/stack-folding-mmx.ll

index 0f89a8053c74d0a440b3d2e33858e326b8e64023..f02760ff63ad8a08a902e2a231d8a63e808c871e 100644 (file)
@@ -292,6 +292,8 @@ static const X86MemoryFoldTableEntry MemoryFoldTable0[] = {
   { X86::JMP32r_NT,           X86::JMP32m_NT,           TB_FOLDED_LOAD },
   { X86::JMP64r,              X86::JMP64m,              TB_FOLDED_LOAD },
   { X86::JMP64r_NT,           X86::JMP64m_NT,           TB_FOLDED_LOAD },
+  { X86::MMX_MOVD64from64rr,  X86::MMX_MOVD64from64rm,  TB_FOLDED_STORE | TB_NO_REVERSE },
+  { X86::MMX_MOVD64grr,       X86::MMX_MOVD64mr,        TB_FOLDED_STORE | TB_NO_REVERSE },
   { X86::MOV16ri,             X86::MOV16mi,             TB_FOLDED_STORE },
   { X86::MOV16rr,             X86::MOV16mr,             TB_FOLDED_STORE },
   { X86::MOV32ri,             X86::MOV32mi,             TB_FOLDED_STORE },
index 0214800cf9c8f774742e13a1b11d8dd1d88f4484..8b6c2e687941a6ad1d86f2f24ae0a19802ed6ae5 100644 (file)
@@ -97,7 +97,6 @@ declare x86_mmx @llvm.x86.sse.cvttps2pi(<4 x float>) nounwind readnone
 
 ; TODO stack_fold_movd_load
 
-; TODO stack_fold_movd_store
 ; padd forces execution on mmx
 define i32 @stack_fold_movd_store(x86_mmx %a0) nounwind {
 ; CHECK-LABEL: stack_fold_movd_store:
@@ -109,8 +108,7 @@ define i32 @stack_fold_movd_store(x86_mmx %a0) nounwind {
 ; CHECK-NEXT:    pushq %r12
 ; CHECK-NEXT:    pushq %rbx
 ; CHECK-NEXT:    paddb %mm0, %mm0
-; CHECK-NEXT:    movd %mm0, %eax
-; CHECK-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
+; CHECK-NEXT:    movd %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
 ; CHECK-NEXT:    #APP
 ; CHECK-NEXT:    nop
 ; CHECK-NEXT:    #NO_APP
@@ -131,7 +129,6 @@ define i32 @stack_fold_movd_store(x86_mmx %a0) nounwind {
 
 ; TODO stack_fold_movq_load
 
-; TODO stack_fold_movq_store
 ; padd forces execution on mmx
 define i64 @stack_fold_movq_store(x86_mmx %a0) nounwind {
 ; CHECK-LABEL: stack_fold_movq_store:
@@ -143,8 +140,7 @@ define i64 @stack_fold_movq_store(x86_mmx %a0) nounwind {
 ; CHECK-NEXT:    pushq %r12
 ; CHECK-NEXT:    pushq %rbx
 ; CHECK-NEXT:    paddb %mm0, %mm0
-; CHECK-NEXT:    movq %mm0, %rax
-; CHECK-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
+; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Folded Spill
 ; CHECK-NEXT:    #APP
 ; CHECK-NEXT:    nop
 ; CHECK-NEXT:    #NO_APP