From 53db663afbe7712d250f20d2b6e3fb7c8015b5d0 Mon Sep 17 00:00:00 2001 From: Yury Gribov Date: Tue, 18 Sep 2018 09:53:42 +0000 Subject: [PATCH] Fixes removal of dead elements from PressureDiff (PR37252). Reviewed By: MatzeB Differential Revision: https://reviews.llvm.org/D51495 llvm-svn: 342457 --- llvm/lib/CodeGen/RegisterPressure.cpp | 3 +-- llvm/test/CodeGen/X86/GlobalISel/gep.ll | 4 ++-- llvm/test/CodeGen/X86/divrem.ll | 24 ++++++++++++------------ llvm/test/CodeGen/X86/divrem8_ext.ll | 2 +- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/llvm/lib/CodeGen/RegisterPressure.cpp b/llvm/lib/CodeGen/RegisterPressure.cpp index 51414de518fd..1099e468e885 100644 --- a/llvm/lib/CodeGen/RegisterPressure.cpp +++ b/llvm/lib/CodeGen/RegisterPressure.cpp @@ -681,8 +681,7 @@ void PressureDiff::addPressureChange(unsigned RegUnit, bool IsDec, PressureDiff::iterator J; for (J = std::next(I); J != E && J->isValid(); ++J, ++I) *I = *J; - if (J != E) - *I = *J; + *I = PressureChange(); } } } diff --git a/llvm/test/CodeGen/X86/GlobalISel/gep.ll b/llvm/test/CodeGen/X86/GlobalISel/gep.ll index 2b64fc4da482..d0e385aa6bcc 100644 --- a/llvm/test/CodeGen/X86/GlobalISel/gep.ll +++ b/llvm/test/CodeGen/X86/GlobalISel/gep.ll @@ -6,12 +6,12 @@ define i32* @test_gep_i8(i32 *%arr, i8 %ind) { ; X64_GISEL-LABEL: test_gep_i8: ; X64_GISEL: # %bb.0: ; X64_GISEL-NEXT: # kill: def $esi killed $esi def $rsi -; X64_GISEL-NEXT: movq $4, %rax ; X64_GISEL-NEXT: movq $56, %rcx ; X64_GISEL-NEXT: # kill: def $cl killed $rcx ; X64_GISEL-NEXT: shlq %cl, %rsi ; X64_GISEL-NEXT: movq $56, %rcx ; X64_GISEL-NEXT: # kill: def $cl killed $rcx +; X64_GISEL-NEXT: movq $4, %rax ; X64_GISEL-NEXT: sarq %cl, %rsi ; X64_GISEL-NEXT: imulq %rax, %rsi ; X64_GISEL-NEXT: leaq (%rdi,%rsi), %rax @@ -46,12 +46,12 @@ define i32* @test_gep_i16(i32 *%arr, i16 %ind) { ; X64_GISEL-LABEL: test_gep_i16: ; X64_GISEL: # %bb.0: ; X64_GISEL-NEXT: # kill: def $esi killed $esi def $rsi -; X64_GISEL-NEXT: movq $4, %rax ; X64_GISEL-NEXT: movq $48, %rcx ; X64_GISEL-NEXT: # kill: def $cl killed $rcx ; X64_GISEL-NEXT: shlq %cl, %rsi ; X64_GISEL-NEXT: movq $48, %rcx ; X64_GISEL-NEXT: # kill: def $cl killed $rcx +; X64_GISEL-NEXT: movq $4, %rax ; X64_GISEL-NEXT: sarq %cl, %rsi ; X64_GISEL-NEXT: imulq %rax, %rsi ; X64_GISEL-NEXT: leaq (%rdi,%rsi), %rax diff --git a/llvm/test/CodeGen/X86/divrem.ll b/llvm/test/CodeGen/X86/divrem.ll index 67acba0b36d3..1e17d7cbd488 100644 --- a/llvm/test/CodeGen/X86/divrem.ll +++ b/llvm/test/CodeGen/X86/divrem.ll @@ -57,11 +57,11 @@ define void @si32(i32 %x, i32 %y, i32* %p, i32* %q) nounwind { ; X32-LABEL: si32: ; X32: # %bb.0: ; X32-NEXT: pushl %esi -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl {{[0-9]+}}(%esp), %esi ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-NEXT: cltd ; X32-NEXT: idivl {{[0-9]+}}(%esp) +; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X32-NEXT: movl {{[0-9]+}}(%esp), %esi ; X32-NEXT: movl %eax, (%esi) ; X32-NEXT: movl %edx, (%ecx) ; X32-NEXT: popl %esi @@ -87,11 +87,11 @@ define void @si16(i16 %x, i16 %y, i16* %p, i16* %q) nounwind { ; X32-LABEL: si16: ; X32: # %bb.0: ; X32-NEXT: pushl %esi -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl {{[0-9]+}}(%esp), %esi ; X32-NEXT: movzwl {{[0-9]+}}(%esp), %eax ; X32-NEXT: cwtd ; X32-NEXT: idivw {{[0-9]+}}(%esp) +; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X32-NEXT: movl {{[0-9]+}}(%esp), %esi ; X32-NEXT: movw %ax, (%esi) ; X32-NEXT: movw %dx, (%ecx) ; X32-NEXT: popl %esi @@ -117,11 +117,11 @@ define void @si8(i8 %x, i8 %y, i8* %p, i8* %q) nounwind { ; X32-LABEL: si8: ; X32: # %bb.0: ; X32-NEXT: pushl %ebx -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl {{[0-9]+}}(%esp), %edx ; X32-NEXT: movb {{[0-9]+}}(%esp), %al ; X32-NEXT: cbtw ; X32-NEXT: idivb {{[0-9]+}}(%esp) +; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X32-NEXT: movl {{[0-9]+}}(%esp), %edx ; X32-NEXT: movsbl %ah, %ebx ; X32-NEXT: movb %al, (%edx) ; X32-NEXT: movb %bl, (%ecx) @@ -199,11 +199,11 @@ define void @ui32(i32 %x, i32 %y, i32* %p, i32* %q) nounwind { ; X32-LABEL: ui32: ; X32: # %bb.0: ; X32-NEXT: pushl %esi -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl {{[0-9]+}}(%esp), %esi ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-NEXT: xorl %edx, %edx ; X32-NEXT: divl {{[0-9]+}}(%esp) +; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X32-NEXT: movl {{[0-9]+}}(%esp), %esi ; X32-NEXT: movl %eax, (%esi) ; X32-NEXT: movl %edx, (%ecx) ; X32-NEXT: popl %esi @@ -229,11 +229,11 @@ define void @ui16(i16 %x, i16 %y, i16* %p, i16* %q) nounwind { ; X32-LABEL: ui16: ; X32: # %bb.0: ; X32-NEXT: pushl %esi -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl {{[0-9]+}}(%esp), %esi ; X32-NEXT: movzwl {{[0-9]+}}(%esp), %eax ; X32-NEXT: xorl %edx, %edx ; X32-NEXT: divw {{[0-9]+}}(%esp) +; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X32-NEXT: movl {{[0-9]+}}(%esp), %esi ; X32-NEXT: movw %ax, (%esi) ; X32-NEXT: movw %dx, (%ecx) ; X32-NEXT: popl %esi @@ -259,11 +259,11 @@ define void @ui8(i8 %x, i8 %y, i8* %p, i8* %q) nounwind { ; X32-LABEL: ui8: ; X32: # %bb.0: ; X32-NEXT: pushl %ebx -; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X32-NEXT: movl {{[0-9]+}}(%esp), %edx ; X32-NEXT: movzbl {{[0-9]+}}(%esp), %eax ; X32-NEXT: # kill: def $eax killed $eax def $ax ; X32-NEXT: divb {{[0-9]+}}(%esp) +; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X32-NEXT: movl {{[0-9]+}}(%esp), %edx ; X32-NEXT: movzbl %ah, %ebx ; X32-NEXT: movb %al, (%edx) ; X32-NEXT: movb %bl, (%ecx) diff --git a/llvm/test/CodeGen/X86/divrem8_ext.ll b/llvm/test/CodeGen/X86/divrem8_ext.ll index 313aa8685007..f13e249789c6 100644 --- a/llvm/test/CodeGen/X86/divrem8_ext.ll +++ b/llvm/test/CodeGen/X86/divrem8_ext.ll @@ -150,8 +150,8 @@ define i8 @test_srem_noext_ah(i8 %x, i8 %y) { ; X32-LABEL: test_srem_noext_ah: ; X32: # %bb.0: ; X32-NEXT: movb {{[0-9]+}}(%esp), %al -; X32-NEXT: movb {{[0-9]+}}(%esp), %cl ; X32-NEXT: cbtw +; X32-NEXT: movb {{[0-9]+}}(%esp), %cl ; X32-NEXT: idivb %cl ; X32-NEXT: movsbl %ah, %eax ; X32-NEXT: addb %cl, %al