From f8808700bc8436c932afb38b161d0d91e0911e0f Mon Sep 17 00:00:00 2001 From: Hendrik Greving Date: Mon, 9 Oct 2023 12:13:55 +0000 Subject: [PATCH] Revert "[MachineLICM] Relax overlay conservative PHI check (#67186)" This reverts commit 71a8d2e3064fcb3ff76565e6e8529613f90aa51b. --- llvm/lib/CodeGen/MachineLICM.cpp | 2 +- .../CodeGen/X86/2008-04-28-CoalescerBug.ll | 19 +- .../X86/2012-01-10-UndefExceptionEdge.ll | 29 +-- .../test/CodeGen/X86/cmpxchg-clobber-flags.ll | 31 ++- llvm/test/CodeGen/X86/conditional-tailcall.ll | 64 +++--- llvm/test/CodeGen/X86/licm-nested.ll | 2 +- .../test/CodeGen/X86/loop-strength-reduce7.ll | 10 +- llvm/test/CodeGen/X86/pr38795.ll | 188 +++++++++--------- llvm/test/CodeGen/X86/ragreedy-hoist-spill.ll | 83 ++++---- .../test/CodeGen/X86/setcc-non-simple-type.ll | 4 +- .../DebugInfo/X86/dbg-value-transfer-order.ll | 2 +- 11 files changed, 230 insertions(+), 204 deletions(-) diff --git a/llvm/lib/CodeGen/MachineLICM.cpp b/llvm/lib/CodeGen/MachineLICM.cpp index fedfdddfcd6358..e29f28ecaea0dc 100644 --- a/llvm/lib/CodeGen/MachineLICM.cpp +++ b/llvm/lib/CodeGen/MachineLICM.cpp @@ -1050,7 +1050,7 @@ bool MachineLICMBase::HasLoopPHIUse(const MachineInstr *MI, if (UseMI.isPHI()) { // A PHI inside the loop causes a copy because the live range of Reg is // extended across the PHI. - if (CurLoop->getHeader() == UseMI.getParent()) + if (CurLoop->contains(&UseMI)) return true; // A PHI in an exit block can cause a copy to be inserted if the PHI // has multiple predecessors in the loop with different values. diff --git a/llvm/test/CodeGen/X86/2008-04-28-CoalescerBug.ll b/llvm/test/CodeGen/X86/2008-04-28-CoalescerBug.ll index 0e9a2457d090ab..8e6d2c11b7b3dc 100644 --- a/llvm/test/CodeGen/X86/2008-04-28-CoalescerBug.ll +++ b/llvm/test/CodeGen/X86/2008-04-28-CoalescerBug.ll @@ -15,7 +15,7 @@ define void @t(ptr %depth, ptr %bop, i32 %mode) nounwind { ; CHECK-NEXT: je LBB0_3 ; CHECK-NEXT: ## %bb.1: ## %entry ; CHECK-NEXT: cmpl $1, %edx -; CHECK-NEXT: jne LBB0_9 +; CHECK-NEXT: jne LBB0_10 ; CHECK-NEXT: .p2align 4, 0x90 ; CHECK-NEXT: LBB0_2: ## %bb2898.us ; CHECK-NEXT: ## =>This Inner Loop Header: Depth=1 @@ -26,12 +26,15 @@ define void @t(ptr %depth, ptr %bop, i32 %mode) nounwind { ; CHECK-NEXT: LBB0_4: ## %bb13088 ; CHECK-NEXT: ## =>This Inner Loop Header: Depth=1 ; CHECK-NEXT: testb %al, %al -; CHECK-NEXT: movl $65535, %ecx ## imm = 0xFFFF -; CHECK-NEXT: jne LBB0_6 -; CHECK-NEXT: ## %bb.5: ## %bb13101 +; CHECK-NEXT: jne LBB0_5 +; CHECK-NEXT: ## %bb.6: ## %bb13101 ; CHECK-NEXT: ## in Loop: Header=BB0_4 Depth=1 ; CHECK-NEXT: xorl %ecx, %ecx -; CHECK-NEXT: LBB0_6: ## %bb13107 +; CHECK-NEXT: jmp LBB0_7 +; CHECK-NEXT: .p2align 4, 0x90 +; CHECK-NEXT: LBB0_5: ## in Loop: Header=BB0_4 Depth=1 +; CHECK-NEXT: movl $65535, %ecx ## imm = 0xFFFF +; CHECK-NEXT: LBB0_7: ## %bb13107 ; CHECK-NEXT: ## in Loop: Header=BB0_4 Depth=1 ; CHECK-NEXT: movl %ecx, %edx ; CHECK-NEXT: shll $16, %edx @@ -41,11 +44,11 @@ define void @t(ptr %depth, ptr %bop, i32 %mode) nounwind { ; CHECK-NEXT: subl %edx, %ecx ; CHECK-NEXT: testw %cx, %cx ; CHECK-NEXT: je LBB0_4 -; CHECK-NEXT: ## %bb.7: ## %bb13236 +; CHECK-NEXT: ## %bb.8: ## %bb13236 ; CHECK-NEXT: ## in Loop: Header=BB0_4 Depth=1 ; CHECK-NEXT: testb %al, %al ; CHECK-NEXT: jne LBB0_4 -; CHECK-NEXT: ## %bb.8: ## %bb13572 +; CHECK-NEXT: ## %bb.9: ## %bb13572 ; CHECK-NEXT: ## in Loop: Header=BB0_4 Depth=1 ; CHECK-NEXT: movzwl %cx, %ecx ; CHECK-NEXT: movl %ecx, %edx @@ -55,7 +58,7 @@ define void @t(ptr %depth, ptr %bop, i32 %mode) nounwind { ; CHECK-NEXT: shrl $16, %edx ; CHECK-NEXT: movw %dx, 0 ; CHECK-NEXT: jmp LBB0_4 -; CHECK-NEXT: LBB0_9: ## %return +; CHECK-NEXT: LBB0_10: ## %return ; CHECK-NEXT: retq entry: switch i32 %mode, label %return [ diff --git a/llvm/test/CodeGen/X86/2012-01-10-UndefExceptionEdge.ll b/llvm/test/CodeGen/X86/2012-01-10-UndefExceptionEdge.ll index 9aa2143039c265..1962ddebc2115e 100644 --- a/llvm/test/CodeGen/X86/2012-01-10-UndefExceptionEdge.ll +++ b/llvm/test/CodeGen/X86/2012-01-10-UndefExceptionEdge.ll @@ -33,10 +33,11 @@ define void @f(ptr nocapture %arg, ptr nocapture %arg1, ptr nocapture %arg2, ptr ; CHECK-NEXT: .cfi_offset %esi, -20 ; CHECK-NEXT: .cfi_offset %edi, -16 ; CHECK-NEXT: .cfi_offset %ebx, -12 -; CHECK-NEXT: xorl %ebx, %ebx -; CHECK-NEXT: testb %bl, %bl +; CHECK-NEXT: xorl %eax, %eax +; CHECK-NEXT: xorl %edi, %edi +; CHECK-NEXT: testb %al, %al ; CHECK-NEXT: Ltmp0: -; CHECK-NEXT: ## implicit-def: $edi +; CHECK-NEXT: ## implicit-def: $ebx ; CHECK-NEXT: calll __Znam ; CHECK-NEXT: Ltmp1: ; CHECK-NEXT: ## %bb.1: ## %bb11 @@ -85,16 +86,16 @@ define void @f(ptr nocapture %arg, ptr nocapture %arg1, ptr nocapture %arg2, ptr ; CHECK-NEXT: jne LBB0_17 ; CHECK-NEXT: ## %bb.15: ## %bb49.preheader ; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=2 -; CHECK-NEXT: movl %esi, %ecx -; CHECK-NEXT: movl %ebx, %edx -; CHECK-NEXT: xorl %edi, %edi +; CHECK-NEXT: xorl %ecx, %ecx +; CHECK-NEXT: movl %esi, %edx +; CHECK-NEXT: movl %edi, %ebx ; CHECK-NEXT: LBB0_16: ## %bb49 ; CHECK-NEXT: ## Parent Loop BB0_8 Depth=1 ; CHECK-NEXT: ## Parent Loop BB0_13 Depth=2 ; CHECK-NEXT: ## => This Inner Loop Header: Depth=3 -; CHECK-NEXT: incl %edi -; CHECK-NEXT: addl $4, %ecx -; CHECK-NEXT: decl %edx +; CHECK-NEXT: incl %ecx +; CHECK-NEXT: addl $4, %edx +; CHECK-NEXT: decl %ebx ; CHECK-NEXT: jne LBB0_16 ; CHECK-NEXT: LBB0_17: ## %bb57 ; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=2 @@ -112,7 +113,7 @@ define void @f(ptr nocapture %arg, ptr nocapture %arg1, ptr nocapture %arg2, ptr ; CHECK-NEXT: ## %bb.20: ## %bb61.preheader ; CHECK-NEXT: ## in Loop: Header=BB0_8 Depth=1 ; CHECK-NEXT: movl %esi, %eax -; CHECK-NEXT: movl %ebx, %ecx +; CHECK-NEXT: movl %edi, %ecx ; CHECK-NEXT: LBB0_21: ## %bb61 ; CHECK-NEXT: ## Parent Loop BB0_8 Depth=1 ; CHECK-NEXT: ## => This Inner Loop Header: Depth=2 @@ -126,13 +127,13 @@ define void @f(ptr nocapture %arg, ptr nocapture %arg1, ptr nocapture %arg2, ptr ; CHECK-NEXT: jmp LBB0_8 ; CHECK-NEXT: LBB0_18: ## %bb43 ; CHECK-NEXT: Ltmp5: -; CHECK-NEXT: movl %esi, %edi +; CHECK-NEXT: movl %esi, %ebx ; CHECK-NEXT: calll _OnOverFlow ; CHECK-NEXT: Ltmp6: ; CHECK-NEXT: jmp LBB0_3 ; CHECK-NEXT: LBB0_2: ## %bb29 ; CHECK-NEXT: Ltmp7: -; CHECK-NEXT: movl %esi, %edi +; CHECK-NEXT: movl %esi, %ebx ; CHECK-NEXT: calll _OnOverFlow ; CHECK-NEXT: Ltmp8: ; CHECK-NEXT: LBB0_3: ## %bb30 @@ -140,9 +141,9 @@ define void @f(ptr nocapture %arg, ptr nocapture %arg1, ptr nocapture %arg2, ptr ; CHECK-NEXT: LBB0_4: ## %bb20.loopexit ; CHECK-NEXT: Ltmp4: ; CHECK-NEXT: LBB0_9: -; CHECK-NEXT: movl %esi, %edi +; CHECK-NEXT: movl %esi, %ebx ; CHECK-NEXT: LBB0_6: ## %bb23 -; CHECK-NEXT: testl %edi, %edi +; CHECK-NEXT: testl %ebx, %ebx ; CHECK-NEXT: addl $28, %esp ; CHECK-NEXT: popl %esi ; CHECK-NEXT: popl %edi diff --git a/llvm/test/CodeGen/X86/cmpxchg-clobber-flags.ll b/llvm/test/CodeGen/X86/cmpxchg-clobber-flags.ll index d1855fbdbc0410..7738ce49a7636c 100644 --- a/llvm/test/CodeGen/X86/cmpxchg-clobber-flags.ll +++ b/llvm/test/CodeGen/X86/cmpxchg-clobber-flags.ll @@ -137,8 +137,8 @@ define i32 @test_control_flow(ptr %p, i32 %i, i32 %j) nounwind { ; 32-ALL-NEXT: # Parent Loop BB1_2 Depth=1 ; 32-ALL-NEXT: # => This Inner Loop Header: Depth=2 ; 32-ALL-NEXT: movl %edx, %eax -; 32-ALL-NEXT: testl %edx, %edx -; 32-ALL-NEXT: movl $0, %edx +; 32-ALL-NEXT: xorl %edx, %edx +; 32-ALL-NEXT: testl %eax, %eax ; 32-ALL-NEXT: je .LBB1_3 ; 32-ALL-NEXT: # %bb.4: # %while.body.i ; 32-ALL-NEXT: # in Loop: Header=BB1_2 Depth=1 @@ -148,6 +148,33 @@ define i32 @test_control_flow(ptr %p, i32 %i, i32 %j) nounwind { ; 32-ALL-NEXT: xorl %eax, %eax ; 32-ALL-NEXT: .LBB1_6: # %cond.end ; 32-ALL-NEXT: retl +; +; 64-ALL-LABEL: test_control_flow: +; 64-ALL: # %bb.0: # %entry +; 64-ALL-NEXT: movl %esi, %eax +; 64-ALL-NEXT: cmpl %edx, %esi +; 64-ALL-NEXT: jle .LBB1_5 +; 64-ALL-NEXT: .p2align 4, 0x90 +; 64-ALL-NEXT: .LBB1_1: # %while.condthread-pre-split.i +; 64-ALL-NEXT: # =>This Loop Header: Depth=1 +; 64-ALL-NEXT: # Child Loop BB1_2 Depth 2 +; 64-ALL-NEXT: movl (%rdi), %ecx +; 64-ALL-NEXT: .p2align 4, 0x90 +; 64-ALL-NEXT: .LBB1_2: # %while.cond.i +; 64-ALL-NEXT: # Parent Loop BB1_1 Depth=1 +; 64-ALL-NEXT: # => This Inner Loop Header: Depth=2 +; 64-ALL-NEXT: movl %ecx, %eax +; 64-ALL-NEXT: xorl %ecx, %ecx +; 64-ALL-NEXT: testl %eax, %eax +; 64-ALL-NEXT: je .LBB1_2 +; 64-ALL-NEXT: # %bb.3: # %while.body.i +; 64-ALL-NEXT: # in Loop: Header=BB1_1 Depth=1 +; 64-ALL-NEXT: lock cmpxchgl %eax, (%rdi) +; 64-ALL-NEXT: jne .LBB1_1 +; 64-ALL-NEXT: # %bb.4: +; 64-ALL-NEXT: xorl %eax, %eax +; 64-ALL-NEXT: .LBB1_5: # %cond.end +; 64-ALL-NEXT: retq entry: %cmp = icmp sgt i32 %i, %j br i1 %cmp, label %loop_start, label %cond.end diff --git a/llvm/test/CodeGen/X86/conditional-tailcall.ll b/llvm/test/CodeGen/X86/conditional-tailcall.ll index 1bf46f0d79e1ce..d1ef1ab390396c 100644 --- a/llvm/test/CodeGen/X86/conditional-tailcall.ll +++ b/llvm/test/CodeGen/X86/conditional-tailcall.ll @@ -456,74 +456,70 @@ define zeroext i1 @pr31257(ptr nocapture readonly dereferenceable(8) %s) minsize ; WIN64-NEXT: .LBB3_1: # %for.cond ; WIN64-NEXT: # =>This Inner Loop Header: Depth=1 ; WIN64-NEXT: testq %rax, %rax # encoding: [0x48,0x85,0xc0] -; WIN64-NEXT: je .LBB3_12 # encoding: [0x74,A] -; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_12-1, kind: FK_PCRel_1 +; WIN64-NEXT: je .LBB3_11 # encoding: [0x74,A] +; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_11-1, kind: FK_PCRel_1 ; WIN64-NEXT: # %bb.2: # %for.body ; WIN64-NEXT: # in Loop: Header=BB3_1 Depth=1 ; WIN64-NEXT: cmpl $2, %r8d # encoding: [0x41,0x83,0xf8,0x02] -; WIN64-NEXT: je .LBB3_10 # encoding: [0x74,A] -; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_10-1, kind: FK_PCRel_1 +; WIN64-NEXT: je .LBB3_9 # encoding: [0x74,A] +; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_9-1, kind: FK_PCRel_1 ; WIN64-NEXT: # %bb.3: # %for.body ; WIN64-NEXT: # in Loop: Header=BB3_1 Depth=1 ; WIN64-NEXT: cmpl $1, %r8d # encoding: [0x41,0x83,0xf8,0x01] -; WIN64-NEXT: je .LBB3_8 # encoding: [0x74,A] -; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_8-1, kind: FK_PCRel_1 +; WIN64-NEXT: je .LBB3_7 # encoding: [0x74,A] +; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_7-1, kind: FK_PCRel_1 ; WIN64-NEXT: # %bb.4: # %for.body ; WIN64-NEXT: # in Loop: Header=BB3_1 Depth=1 ; WIN64-NEXT: testl %r8d, %r8d # encoding: [0x45,0x85,0xc0] -; WIN64-NEXT: jne .LBB3_11 # encoding: [0x75,A] -; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_11-1, kind: FK_PCRel_1 +; WIN64-NEXT: jne .LBB3_10 # encoding: [0x75,A] +; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_10-1, kind: FK_PCRel_1 ; WIN64-NEXT: # %bb.5: # %sw.bb ; WIN64-NEXT: # in Loop: Header=BB3_1 Depth=1 ; WIN64-NEXT: movzbl (%rcx), %r9d # encoding: [0x44,0x0f,0xb6,0x09] ; WIN64-NEXT: cmpl $43, %r9d # encoding: [0x41,0x83,0xf9,0x2b] ; WIN64-NEXT: movl $1, %r8d # encoding: [0x41,0xb8,0x01,0x00,0x00,0x00] -; WIN64-NEXT: je .LBB3_11 # encoding: [0x74,A] -; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_11-1, kind: FK_PCRel_1 +; WIN64-NEXT: je .LBB3_10 # encoding: [0x74,A] +; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_10-1, kind: FK_PCRel_1 ; WIN64-NEXT: # %bb.6: # %sw.bb ; WIN64-NEXT: # in Loop: Header=BB3_1 Depth=1 ; WIN64-NEXT: cmpl $45, %r9d # encoding: [0x41,0x83,0xf9,0x2d] -; WIN64-NEXT: je .LBB3_11 # encoding: [0x74,A] -; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_11-1, kind: FK_PCRel_1 -; WIN64-NEXT: # %bb.7: # %if.else -; WIN64-NEXT: # in Loop: Header=BB3_1 Depth=1 -; WIN64-NEXT: addl $-48, %r9d # encoding: [0x41,0x83,0xc1,0xd0] -; WIN64-NEXT: cmpl $10, %r9d # encoding: [0x41,0x83,0xf9,0x0a] -; WIN64-NEXT: jmp .LBB3_9 # encoding: [0xeb,A] -; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_9-1, kind: FK_PCRel_1 -; WIN64-NEXT: .LBB3_8: # %sw.bb14 +; WIN64-NEXT: je .LBB3_10 # encoding: [0x74,A] +; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_10-1, kind: FK_PCRel_1 +; WIN64-NEXT: jmp .LBB3_8 # encoding: [0xeb,A] +; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_8-1, kind: FK_PCRel_1 +; WIN64-NEXT: .LBB3_7: # %sw.bb14 ; WIN64-NEXT: # in Loop: Header=BB3_1 Depth=1 -; WIN64-NEXT: movzbl (%rcx), %r8d # encoding: [0x44,0x0f,0xb6,0x01] -; WIN64-NEXT: addl $-48, %r8d # encoding: [0x41,0x83,0xc0,0xd0] -; WIN64-NEXT: cmpl $10, %r8d # encoding: [0x41,0x83,0xf8,0x0a] -; WIN64-NEXT: .LBB3_9: # %if.else +; WIN64-NEXT: movzbl (%rcx), %r9d # encoding: [0x44,0x0f,0xb6,0x09] +; WIN64-NEXT: .LBB3_8: # %if.else ; WIN64-NEXT: # in Loop: Header=BB3_1 Depth=1 +; WIN64-NEXT: addl $-48, %r9d # encoding: [0x41,0x83,0xc1,0xd0] ; WIN64-NEXT: movl $2, %r8d # encoding: [0x41,0xb8,0x02,0x00,0x00,0x00] -; WIN64-NEXT: jb .LBB3_11 # encoding: [0x72,A] -; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_11-1, kind: FK_PCRel_1 -; WIN64-NEXT: jmp .LBB3_13 # encoding: [0xeb,A] -; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_13-1, kind: FK_PCRel_1 -; WIN64-NEXT: .LBB3_10: # %sw.bb22 +; WIN64-NEXT: cmpl $10, %r9d # encoding: [0x41,0x83,0xf9,0x0a] +; WIN64-NEXT: jb .LBB3_10 # encoding: [0x72,A] +; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_10-1, kind: FK_PCRel_1 +; WIN64-NEXT: jmp .LBB3_12 # encoding: [0xeb,A] +; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_12-1, kind: FK_PCRel_1 +; WIN64-NEXT: .LBB3_9: # %sw.bb22 ; WIN64-NEXT: # in Loop: Header=BB3_1 Depth=1 -; WIN64-NEXT: movzbl (%rcx), %r8d # encoding: [0x44,0x0f,0xb6,0x01] -; WIN64-NEXT: addl $-48, %r8d # encoding: [0x41,0x83,0xc0,0xd0] -; WIN64-NEXT: cmpl $10, %r8d # encoding: [0x41,0x83,0xf8,0x0a] +; WIN64-NEXT: movzbl (%rcx), %r9d # encoding: [0x44,0x0f,0xb6,0x09] +; WIN64-NEXT: addl $-48, %r9d # encoding: [0x41,0x83,0xc1,0xd0] ; WIN64-NEXT: movl $2, %r8d # encoding: [0x41,0xb8,0x02,0x00,0x00,0x00] +; WIN64-NEXT: cmpl $10, %r9d # encoding: [0x41,0x83,0xf9,0x0a] ; WIN64-NEXT: jae _Z20isValidIntegerSuffixN9__gnu_cxx17__normal_iteratorIPKcSsEES3_ # TAILCALL ; WIN64-NEXT: # encoding: [0x73,A] ; WIN64-NEXT: # fixup A - offset: 1, value: _Z20isValidIntegerSuffixN9__gnu_cxx17__normal_iteratorIPKcSsEES3_-1, kind: FK_PCRel_1 -; WIN64-NEXT: .LBB3_11: # %for.inc +; WIN64-NEXT: .LBB3_10: # %for.inc ; WIN64-NEXT: # in Loop: Header=BB3_1 Depth=1 ; WIN64-NEXT: incq %rcx # encoding: [0x48,0xff,0xc1] ; WIN64-NEXT: decq %rax # encoding: [0x48,0xff,0xc8] ; WIN64-NEXT: jmp .LBB3_1 # encoding: [0xeb,A] ; WIN64-NEXT: # fixup A - offset: 1, value: .LBB3_1-1, kind: FK_PCRel_1 -; WIN64-NEXT: .LBB3_12: +; WIN64-NEXT: .LBB3_11: ; WIN64-NEXT: cmpl $2, %r8d # encoding: [0x41,0x83,0xf8,0x02] ; WIN64-NEXT: sete %al # encoding: [0x0f,0x94,0xc0] ; WIN64-NEXT: # kill: def $al killed $al killed $eax ; WIN64-NEXT: retq # encoding: [0xc3] -; WIN64-NEXT: .LBB3_13: +; WIN64-NEXT: .LBB3_12: ; WIN64-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0] ; WIN64-NEXT: # kill: def $al killed $al killed $eax ; WIN64-NEXT: retq # encoding: [0xc3] diff --git a/llvm/test/CodeGen/X86/licm-nested.ll b/llvm/test/CodeGen/X86/licm-nested.ll index 8a81c617a1dc23..fe50249e874955 100644 --- a/llvm/test/CodeGen/X86/licm-nested.ll +++ b/llvm/test/CodeGen/X86/licm-nested.ll @@ -1,5 +1,5 @@ ; REQUIRES: asserts -; RUN: llc -mtriple=x86_64-apple-darwin < %s -o /dev/null -stats -info-output-file - | grep "hoisted out of loops" | grep 7 +; RUN: llc -mtriple=x86_64-apple-darwin < %s -o /dev/null -stats -info-output-file - | grep "hoisted out of loops" | grep 3 ; MachineLICM should be able to hoist the symbolic addresses out of ; the inner loops. diff --git a/llvm/test/CodeGen/X86/loop-strength-reduce7.ll b/llvm/test/CodeGen/X86/loop-strength-reduce7.ll index 61efafa8056764..3687194972f27f 100644 --- a/llvm/test/CodeGen/X86/loop-strength-reduce7.ll +++ b/llvm/test/CodeGen/X86/loop-strength-reduce7.ll @@ -17,15 +17,15 @@ define fastcc void @outer_loop(ptr nocapture %gfp, ptr nocapture %xr, i32 %targ_ ; CHECK-NEXT: LBB0_2: ## %bb28.i37 ; CHECK-NEXT: ## =>This Loop Header: Depth=1 ; CHECK-NEXT: ## Child Loop BB0_3 Depth 2 -; CHECK-NEXT: movl %eax, %edx -; CHECK-NEXT: xorl %esi, %esi +; CHECK-NEXT: xorl %edx, %edx +; CHECK-NEXT: movl %eax, %esi ; CHECK-NEXT: .p2align 4, 0x90 ; CHECK-NEXT: LBB0_3: ## %bb29.i38 ; CHECK-NEXT: ## Parent Loop BB0_2 Depth=1 ; CHECK-NEXT: ## => This Inner Loop Header: Depth=2 -; CHECK-NEXT: incl %esi -; CHECK-NEXT: addl $12, %edx -; CHECK-NEXT: cmpl $11, %esi +; CHECK-NEXT: incl %edx +; CHECK-NEXT: addl $12, %esi +; CHECK-NEXT: cmpl $11, %edx ; CHECK-NEXT: jbe LBB0_3 ; CHECK-NEXT: ## %bb.1: ## %bb28.i37.loopexit ; CHECK-NEXT: ## in Loop: Header=BB0_2 Depth=1 diff --git a/llvm/test/CodeGen/X86/pr38795.ll b/llvm/test/CodeGen/X86/pr38795.ll index 278d223749842e..8e0532e6065280 100644 --- a/llvm/test/CodeGen/X86/pr38795.ll +++ b/llvm/test/CodeGen/X86/pr38795.ll @@ -30,13 +30,12 @@ define dso_local void @fn() { ; CHECK-NEXT: # implicit-def: $ebp ; CHECK-NEXT: jmp .LBB0_1 ; CHECK-NEXT: .p2align 4, 0x90 -; CHECK-NEXT: .LBB0_13: # in Loop: Header=BB0_1 Depth=1 -; CHECK-NEXT: xorl %esi, %esi +; CHECK-NEXT: .LBB0_14: # in Loop: Header=BB0_1 Depth=1 ; CHECK-NEXT: movb %dl, %ch ; CHECK-NEXT: movl %ecx, %edx ; CHECK-NEXT: .LBB0_1: # %for.cond ; CHECK-NEXT: # =>This Loop Header: Depth=1 -; CHECK-NEXT: # Child Loop BB0_20 Depth 2 +; CHECK-NEXT: # Child Loop BB0_22 Depth 2 ; CHECK-NEXT: cmpb $8, %dl ; CHECK-NEXT: movb %dl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill ; CHECK-NEXT: ja .LBB0_3 @@ -54,7 +53,7 @@ define dso_local void @fn() { ; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx ; CHECK-NEXT: movl $0, h ; CHECK-NEXT: cmpb $8, %dl -; CHECK-NEXT: jg .LBB0_9 +; CHECK-NEXT: jg .LBB0_8 ; CHECK-NEXT: # %bb.5: # %if.then13 ; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1 ; CHECK-NEXT: movl %eax, %esi @@ -67,7 +66,7 @@ define dso_local void @fn() { ; CHECK-NEXT: movb {{[-0-9]+}}(%e{{[sb]}}p), %ch # 1-byte Reload ; CHECK-NEXT: movl %ecx, %edx ; CHECK-NEXT: je .LBB0_6 -; CHECK-NEXT: jmp .LBB0_16 +; CHECK-NEXT: jmp .LBB0_18 ; CHECK-NEXT: .p2align 4, 0x90 ; CHECK-NEXT: .LBB0_3: # %if.then ; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1 @@ -77,84 +76,88 @@ define dso_local void @fn() { ; CHECK-NEXT: movb {{[-0-9]+}}(%e{{[sb]}}p), %ch # 1-byte Reload ; CHECK-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 1-byte Folded Reload ; CHECK-NEXT: # implicit-def: $eax -; CHECK-NEXT: jmp .LBB0_6 -; CHECK-NEXT: .p2align 4, 0x90 -; CHECK-NEXT: .LBB0_9: # %if.end21 -; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1 -; CHECK-NEXT: # implicit-def: $ebp -; CHECK-NEXT: jmp .LBB0_10 -; CHECK-NEXT: .p2align 4, 0x90 ; CHECK-NEXT: .LBB0_6: # %for.cond35 ; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1 -; CHECK-NEXT: movb %dl, %cl ; CHECK-NEXT: testl %edi, %edi -; CHECK-NEXT: movl %edi, %esi -; CHECK-NEXT: movl $0, %edi -; CHECK-NEXT: movb %ch, %dl -; CHECK-NEXT: je .LBB0_20 -; CHECK-NEXT: # %bb.7: # %af +; CHECK-NEXT: je .LBB0_7 +; CHECK-NEXT: .LBB0_11: # %af ; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1 ; CHECK-NEXT: testb %bl, %bl -; CHECK-NEXT: jne .LBB0_8 -; CHECK-NEXT: .LBB0_17: # %if.end39 +; CHECK-NEXT: jne .LBB0_12 +; CHECK-NEXT: .LBB0_19: # %if.end39 ; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1 ; CHECK-NEXT: testl %eax, %eax -; CHECK-NEXT: je .LBB0_19 -; CHECK-NEXT: # %bb.18: # %if.then41 +; CHECK-NEXT: je .LBB0_21 +; CHECK-NEXT: # %bb.20: # %if.then41 ; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1 ; CHECK-NEXT: movl $0, {{[0-9]+}}(%esp) ; CHECK-NEXT: movl $fn, {{[0-9]+}}(%esp) ; CHECK-NEXT: movl $.str, (%esp) ; CHECK-NEXT: calll printf -; CHECK-NEXT: .LBB0_19: # %for.end46 +; CHECK-NEXT: .LBB0_21: # %for.end46 ; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1 -; CHECK-NEXT: movl %esi, %edi -; CHECK-NEXT: # implicit-def: $dl +; CHECK-NEXT: # implicit-def: $ch ; CHECK-NEXT: # implicit-def: $cl ; CHECK-NEXT: # implicit-def: $ebp +; CHECK-NEXT: jmp .LBB0_22 ; CHECK-NEXT: .p2align 4, 0x90 -; CHECK-NEXT: .LBB0_20: # %for.cond47 +; CHECK-NEXT: .LBB0_8: # %if.end21 +; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1 +; CHECK-NEXT: # implicit-def: $ebp +; CHECK-NEXT: testb %bl, %bl +; CHECK-NEXT: je .LBB0_13 +; CHECK-NEXT: .p2align 4, 0x90 +; CHECK-NEXT: .LBB0_10: # in Loop: Header=BB0_1 Depth=1 +; CHECK-NEXT: # implicit-def: $eax +; CHECK-NEXT: testb %bl, %bl +; CHECK-NEXT: je .LBB0_19 +; CHECK-NEXT: .LBB0_12: # in Loop: Header=BB0_1 Depth=1 +; CHECK-NEXT: # implicit-def: $edi +; CHECK-NEXT: # implicit-def: $ch +; CHECK-NEXT: # implicit-def: $dl +; CHECK-NEXT: # implicit-def: $ebp +; CHECK-NEXT: testl %edi, %edi +; CHECK-NEXT: jne .LBB0_11 +; CHECK-NEXT: .LBB0_7: # in Loop: Header=BB0_1 Depth=1 +; CHECK-NEXT: xorl %edi, %edi +; CHECK-NEXT: movb %dl, %cl +; CHECK-NEXT: .p2align 4, 0x90 +; CHECK-NEXT: .LBB0_22: # %for.cond47 ; CHECK-NEXT: # Parent Loop BB0_1 Depth=1 ; CHECK-NEXT: # => This Inner Loop Header: Depth=2 ; CHECK-NEXT: testb %bl, %bl -; CHECK-NEXT: jne .LBB0_20 -; CHECK-NEXT: # %bb.21: # %for.cond47 -; CHECK-NEXT: # in Loop: Header=BB0_20 Depth=2 +; CHECK-NEXT: jne .LBB0_22 +; CHECK-NEXT: # %bb.23: # %for.cond47 +; CHECK-NEXT: # in Loop: Header=BB0_22 Depth=2 ; CHECK-NEXT: testb %bl, %bl -; CHECK-NEXT: jne .LBB0_20 -; CHECK-NEXT: .LBB0_10: # %ae -; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1 +; CHECK-NEXT: jne .LBB0_22 +; CHECK-NEXT: # %bb.24: # in Loop: Header=BB0_1 Depth=1 +; CHECK-NEXT: movb %ch, %dl ; CHECK-NEXT: testb %bl, %bl -; CHECK-NEXT: jne .LBB0_11 -; CHECK-NEXT: # %bb.12: # %if.end26 +; CHECK-NEXT: jne .LBB0_10 +; CHECK-NEXT: .LBB0_13: # %if.end26 ; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1 +; CHECK-NEXT: xorl %esi, %esi ; CHECK-NEXT: testb %dl, %dl -; CHECK-NEXT: je .LBB0_13 -; CHECK-NEXT: # %bb.14: # %if.end26 +; CHECK-NEXT: je .LBB0_14 +; CHECK-NEXT: # %bb.15: # %if.end26 ; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1 ; CHECK-NEXT: testl %ebp, %ebp -; CHECK-NEXT: jne .LBB0_13 -; CHECK-NEXT: # %bb.15: # %if.then31 +; CHECK-NEXT: jne .LBB0_16 +; CHECK-NEXT: # %bb.17: # %if.then31 ; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1 ; CHECK-NEXT: xorl %esi, %esi ; CHECK-NEXT: movb %dl, %ch ; CHECK-NEXT: xorl %ebp, %ebp -; CHECK-NEXT: .LBB0_16: # %for.inc +; CHECK-NEXT: .LBB0_18: # %for.inc ; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1 ; CHECK-NEXT: movl %ecx, %edx ; CHECK-NEXT: jmp .LBB0_1 ; CHECK-NEXT: .p2align 4, 0x90 -; CHECK-NEXT: .LBB0_11: # in Loop: Header=BB0_1 Depth=1 -; CHECK-NEXT: movl %edi, %esi -; CHECK-NEXT: # implicit-def: $eax -; CHECK-NEXT: testb %bl, %bl -; CHECK-NEXT: je .LBB0_17 -; CHECK-NEXT: .LBB0_8: # in Loop: Header=BB0_1 Depth=1 -; CHECK-NEXT: # implicit-def: $edi -; CHECK-NEXT: # implicit-def: $ch -; CHECK-NEXT: # implicit-def: $dl -; CHECK-NEXT: # implicit-def: $ebp -; CHECK-NEXT: jmp .LBB0_6 +; CHECK-NEXT: .LBB0_16: # in Loop: Header=BB0_1 Depth=1 +; CHECK-NEXT: movb %dl, %ch +; CHECK-NEXT: movl %ecx, %edx +; CHECK-NEXT: jmp .LBB0_1 entry: br label %for.cond @@ -269,57 +272,52 @@ define void @verifier_error_reduced_issue38788(i1 %cmp11) { ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: pushl %ebx ; CHECK-NEXT: .cfi_def_cfa_offset 8 -; CHECK-NEXT: pushl %eax -; CHECK-NEXT: .cfi_def_cfa_offset 12 ; CHECK-NEXT: .cfi_offset %ebx, -8 -; CHECK-NEXT: xorl %ebx, %ebx +; CHECK-NEXT: movzbl {{[0-9]+}}(%esp), %eax ; CHECK-NEXT: xorl %ecx, %ecx -; CHECK-NEXT: jmp .LBB1_3 +; CHECK-NEXT: xorl %ebx, %ebx +; CHECK-NEXT: jmp .LBB1_1 ; CHECK-NEXT: .p2align 4, 0x90 -; CHECK-NEXT: .LBB1_1: # %if.end26 -; CHECK-NEXT: # in Loop: Header=BB1_3 Depth=1 -; CHECK-NEXT: movl %ebx, %edx -; CHECK-NEXT: .LBB1_2: # %for.inc -; CHECK-NEXT: # in Loop: Header=BB1_3 Depth=1 -; CHECK-NEXT: movl %ecx, %ebx -; CHECK-NEXT: movl %edx, %ecx -; CHECK-NEXT: .LBB1_3: # %for.cond +; CHECK-NEXT: .LBB1_7: # %if.end26 +; CHECK-NEXT: # in Loop: Header=BB1_1 Depth=1 +; CHECK-NEXT: movl %ecx, %edx +; CHECK-NEXT: .LBB1_8: # %for.inc +; CHECK-NEXT: # in Loop: Header=BB1_1 Depth=1 +; CHECK-NEXT: movl %eax, %ecx +; CHECK-NEXT: movl %edx, %ebx +; CHECK-NEXT: movzbl {{[0-9]+}}(%esp), %eax +; CHECK-NEXT: .LBB1_1: # %for.cond ; CHECK-NEXT: # =>This Inner Loop Header: Depth=1 -; CHECK-NEXT: testb $1, {{[0-9]+}}(%esp) -; CHECK-NEXT: je .LBB1_5 -; CHECK-NEXT: # %bb.4: # in Loop: Header=BB1_3 Depth=1 -; CHECK-NEXT: movl $0, (%esp) # 4-byte Folded Spill -; CHECK-NEXT: movl %ecx, %eax -; CHECK-NEXT: jmp .LBB1_7 +; CHECK-NEXT: testb $1, %al +; CHECK-NEXT: je .LBB1_3 +; CHECK-NEXT: # %bb.2: # in Loop: Header=BB1_1 Depth=1 +; CHECK-NEXT: xorl %eax, %eax +; CHECK-NEXT: jmp .LBB1_5 ; CHECK-NEXT: .p2align 4, 0x90 -; CHECK-NEXT: .LBB1_5: # %if.end -; CHECK-NEXT: # in Loop: Header=BB1_3 Depth=1 -; CHECK-NEXT: je .LBB1_8 -; CHECK-NEXT: # %bb.6: # %if.then13 -; CHECK-NEXT: # in Loop: Header=BB1_3 Depth=1 -; CHECK-NEXT: testb $1, {{[0-9]+}}(%esp) -; CHECK-NEXT: movl $0, %edx -; CHECK-NEXT: movl %ecx, %eax -; CHECK-NEXT: movl %eax, (%esp) # 4-byte Spill -; CHECK-NEXT: movl $0, %eax -; CHECK-NEXT: jne .LBB1_2 +; CHECK-NEXT: .LBB1_3: # %if.end +; CHECK-NEXT: # in Loop: Header=BB1_1 Depth=1 +; CHECK-NEXT: testb $1, %al +; CHECK-NEXT: je .LBB1_4 +; CHECK-NEXT: # %bb.9: # %if.then13 +; CHECK-NEXT: # in Loop: Header=BB1_1 Depth=1 +; CHECK-NEXT: xorl %edx, %edx +; CHECK-NEXT: testb $1, %al +; CHECK-NEXT: movl %ebx, %eax +; CHECK-NEXT: movl $0, %ebx +; CHECK-NEXT: jne .LBB1_8 +; CHECK-NEXT: jmp .LBB1_5 ; CHECK-NEXT: .p2align 4, 0x90 -; CHECK-NEXT: .LBB1_7: # %for.cond35 -; CHECK-NEXT: # in Loop: Header=BB1_3 Depth=1 -; CHECK-NEXT: movl (%esp), %ecx # 4-byte Reload -; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx def $ecx -; CHECK-NEXT: testb %bl, %bl -; CHECK-NEXT: je .LBB1_1 -; CHECK-NEXT: jmp .LBB1_10 -; CHECK-NEXT: .p2align 4, 0x90 -; CHECK-NEXT: .LBB1_8: # in Loop: Header=BB1_3 Depth=1 -; CHECK-NEXT: xorl %eax, %eax -; CHECK-NEXT: testb %bl, %bl -; CHECK-NEXT: je .LBB1_1 -; CHECK-NEXT: .LBB1_10: # %if.end26 -; CHECK-NEXT: # in Loop: Header=BB1_3 Depth=1 -; CHECK-NEXT: movl %eax, %ebx -; CHECK-NEXT: jmp .LBB1_1 +; CHECK-NEXT: .LBB1_4: # in Loop: Header=BB1_1 Depth=1 +; CHECK-NEXT: movl %ebx, %eax +; CHECK-NEXT: xorl %ebx, %ebx +; CHECK-NEXT: .LBB1_5: # %if.end26 +; CHECK-NEXT: # in Loop: Header=BB1_1 Depth=1 +; CHECK-NEXT: testb %cl, %cl +; CHECK-NEXT: je .LBB1_7 +; CHECK-NEXT: # %bb.6: # %if.end26 +; CHECK-NEXT: # in Loop: Header=BB1_1 Depth=1 +; CHECK-NEXT: movl %ebx, %ecx +; CHECK-NEXT: jmp .LBB1_7 entry: br label %for.cond diff --git a/llvm/test/CodeGen/X86/ragreedy-hoist-spill.ll b/llvm/test/CodeGen/X86/ragreedy-hoist-spill.ll index 2abf69d612514e..e9448a800fd959 100644 --- a/llvm/test/CodeGen/X86/ragreedy-hoist-spill.ll +++ b/llvm/test/CodeGen/X86/ragreedy-hoist-spill.ll @@ -46,11 +46,11 @@ define ptr @SyFgets(ptr %line, i64 %length, i64 %fid) { ; CHECK-NEXT: ## %bb.2: ## %if.then4 ; CHECK-NEXT: xorl %eax, %eax ; CHECK-NEXT: testb %al, %al -; CHECK-NEXT: je LBB0_53 +; CHECK-NEXT: je LBB0_54 ; CHECK-NEXT: ## %bb.3: ## %SyTime.exit ; CHECK-NEXT: xorl %eax, %eax ; CHECK-NEXT: testb %al, %al -; CHECK-NEXT: je LBB0_53 +; CHECK-NEXT: je LBB0_54 ; CHECK-NEXT: LBB0_4: ## %cleanup ; CHECK-NEXT: addq $552, %rsp ## imm = 0x228 ; CHECK-NEXT: popq %rbx @@ -63,7 +63,7 @@ define ptr @SyFgets(ptr %line, i64 %length, i64 %fid) { ; CHECK-NEXT: LBB0_5: ## %if.end25 ; CHECK-NEXT: xorl %eax, %eax ; CHECK-NEXT: testb %al, %al -; CHECK-NEXT: je LBB0_53 +; CHECK-NEXT: je LBB0_54 ; CHECK-NEXT: ## %bb.6: ## %SyTime.exit2720 ; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %rax ; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %rcx @@ -107,22 +107,22 @@ define ptr @SyFgets(ptr %line, i64 %length, i64 %fid) { ; CHECK-NEXT: LBB0_43: ## %while.cond1037.preheader ; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=1 ; CHECK-NEXT: testb %r12b, %r12b -; CHECK-NEXT: je LBB0_53 +; CHECK-NEXT: je LBB0_54 ; CHECK-NEXT: .p2align 4, 0x90 ; CHECK-NEXT: LBB0_20: ## %while.cond197.backedge ; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=1 ; CHECK-NEXT: decl %r13d ; CHECK-NEXT: testl %r13d, %r13d -; CHECK-NEXT: movl %ebx, %r15d +; CHECK-NEXT: movl %ebp, %r15d ; CHECK-NEXT: jle LBB0_21 ; CHECK-NEXT: LBB0_13: ## %while.body200 ; CHECK-NEXT: ## =>This Loop Header: Depth=1 ; CHECK-NEXT: ## Child Loop BB0_28 Depth 2 ; CHECK-NEXT: ## Child Loop BB0_37 Depth 2 -; CHECK-NEXT: leal -268(%rbx), %eax +; CHECK-NEXT: leal -268(%rbp), %eax ; CHECK-NEXT: cmpl $105, %eax ; CHECK-NEXT: ja LBB0_14 -; CHECK-NEXT: ## %bb.54: ## %while.body200 +; CHECK-NEXT: ## %bb.55: ## %while.body200 ; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=1 ; CHECK-NEXT: movslq (%r14,%rax,4), %rax ; CHECK-NEXT: addq %r14, %rax @@ -130,12 +130,12 @@ define ptr @SyFgets(ptr %line, i64 %length, i64 %fid) { ; CHECK-NEXT: LBB0_25: ## %sw.bb474 ; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=1 ; CHECK-NEXT: testb %r12b, %r12b -; CHECK-NEXT: ## implicit-def: $rbp +; CHECK-NEXT: ## implicit-def: $rbx ; CHECK-NEXT: jne LBB0_33 ; CHECK-NEXT: ## %bb.26: ## %do.body479.preheader ; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=1 ; CHECK-NEXT: testb %r12b, %r12b -; CHECK-NEXT: ## implicit-def: $rbp +; CHECK-NEXT: ## implicit-def: $rbx ; CHECK-NEXT: jne LBB0_33 ; CHECK-NEXT: ## %bb.27: ## %land.rhs485.preheader ; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=1 @@ -144,17 +144,17 @@ define ptr @SyFgets(ptr %line, i64 %length, i64 %fid) { ; CHECK-NEXT: .p2align 4, 0x90 ; CHECK-NEXT: LBB0_31: ## %do.body479.backedge ; CHECK-NEXT: ## in Loop: Header=BB0_28 Depth=2 -; CHECK-NEXT: leaq 1(%rbp), %rax +; CHECK-NEXT: leaq 1(%rbx), %rax ; CHECK-NEXT: testb %r12b, %r12b ; CHECK-NEXT: je LBB0_32 ; CHECK-NEXT: LBB0_28: ## %land.rhs485 ; CHECK-NEXT: ## Parent Loop BB0_13 Depth=1 ; CHECK-NEXT: ## => This Inner Loop Header: Depth=2 ; CHECK-NEXT: testb %sil, %sil -; CHECK-NEXT: jne LBB0_53 +; CHECK-NEXT: jne LBB0_54 ; CHECK-NEXT: ## %bb.29: ## %cond.true.i.i2780 ; CHECK-NEXT: ## in Loop: Header=BB0_28 Depth=2 -; CHECK-NEXT: movq %rax, %rbp +; CHECK-NEXT: movq %rax, %rbx ; CHECK-NEXT: testb %r12b, %r12b ; CHECK-NEXT: jne LBB0_31 ; CHECK-NEXT: ## %bb.30: ## %lor.rhs500 @@ -168,7 +168,7 @@ define ptr @SyFgets(ptr %line, i64 %length, i64 %fid) { ; CHECK-NEXT: .p2align 4, 0x90 ; CHECK-NEXT: LBB0_14: ## %while.body200 ; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=1 -; CHECK-NEXT: leal 1(%rbx), %eax +; CHECK-NEXT: leal 1(%rbp), %eax ; CHECK-NEXT: cmpl $21, %eax ; CHECK-NEXT: ja LBB0_20 ; CHECK-NEXT: ## %bb.15: ## %while.body200 @@ -178,34 +178,35 @@ define ptr @SyFgets(ptr %line, i64 %length, i64 %fid) { ; CHECK-NEXT: jmpq *%rax ; CHECK-NEXT: LBB0_18: ## %while.cond201.preheader ; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=1 -; CHECK-NEXT: movl $1, %ebx +; CHECK-NEXT: movl $1, %ebp ; CHECK-NEXT: jmp LBB0_20 ; CHECK-NEXT: LBB0_44: ## %sw.bb1134 ; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=1 ; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %rax ; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %rcx ; CHECK-NEXT: cmpq %rax, %rcx -; CHECK-NEXT: movl $268, %ebx ## imm = 0x10C +; CHECK-NEXT: jb LBB0_54 +; CHECK-NEXT: ## %bb.45: ## in Loop: Header=BB0_13 Depth=1 ; CHECK-NEXT: movl $0, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Folded Spill -; CHECK-NEXT: jae LBB0_20 -; CHECK-NEXT: jmp LBB0_53 +; CHECK-NEXT: movl $268, %ebp ## imm = 0x10C +; CHECK-NEXT: jmp LBB0_20 ; CHECK-NEXT: LBB0_39: ## %sw.bb566 ; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=1 -; CHECK-NEXT: movl $20, %ebx +; CHECK-NEXT: movl $20, %ebp ; CHECK-NEXT: jmp LBB0_20 ; CHECK-NEXT: LBB0_19: ## %sw.bb243 ; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=1 -; CHECK-NEXT: movl $2, %ebx +; CHECK-NEXT: movl $2, %ebp ; CHECK-NEXT: jmp LBB0_20 ; CHECK-NEXT: LBB0_32: ## %if.end517.loopexitsplit ; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=1 -; CHECK-NEXT: incq %rbp +; CHECK-NEXT: incq %rbx ; CHECK-NEXT: LBB0_33: ## %if.end517 ; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=1 ; CHECK-NEXT: leal -324(%r15), %eax ; CHECK-NEXT: cmpl $59, %eax ; CHECK-NEXT: ja LBB0_34 -; CHECK-NEXT: ## %bb.55: ## %if.end517 +; CHECK-NEXT: ## %bb.56: ## %if.end517 ; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=1 ; CHECK-NEXT: movabsq $576460756598390785, %rcx ## imm = 0x800000100000001 ; CHECK-NEXT: btq %rax, %rcx @@ -231,7 +232,7 @@ define ptr @SyFgets(ptr %line, i64 %length, i64 %fid) { ; CHECK-NEXT: ## %bb.38: ## %for.cond542.preheader ; CHECK-NEXT: ## in Loop: Header=BB0_13 Depth=1 ; CHECK-NEXT: testb %r12b, %r12b -; CHECK-NEXT: movb $0, (%rbp) +; CHECK-NEXT: movb $0, (%rbx) ; CHECK-NEXT: leaq LJTI0_0(%rip), %rdx ; CHECK-NEXT: jmp LBB0_20 ; CHECK-NEXT: .p2align 4, 0x90 @@ -249,31 +250,31 @@ define ptr @SyFgets(ptr %line, i64 %length, i64 %fid) { ; CHECK-NEXT: LBB0_11: ; CHECK-NEXT: movl $0, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Folded Spill ; CHECK-NEXT: LBB0_21: ## %while.end1465 -; CHECK-NEXT: incl %ebx -; CHECK-NEXT: cmpl $16, %ebx -; CHECK-NEXT: ja LBB0_48 +; CHECK-NEXT: incl %ebp +; CHECK-NEXT: cmpl $16, %ebp +; CHECK-NEXT: ja LBB0_49 ; CHECK-NEXT: ## %bb.22: ## %while.end1465 ; CHECK-NEXT: movl $83969, %eax ## imm = 0x14801 -; CHECK-NEXT: btl %ebx, %eax -; CHECK-NEXT: jae LBB0_48 +; CHECK-NEXT: btl %ebp, %eax +; CHECK-NEXT: jae LBB0_49 ; CHECK-NEXT: ## %bb.23: ; CHECK-NEXT: xorl %ebx, %ebx ; CHECK-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 ## 8-byte Reload -; CHECK-NEXT: LBB0_46: ## %if.then1477 +; CHECK-NEXT: LBB0_47: ## %if.then1477 ; CHECK-NEXT: movl $1, %edx ; CHECK-NEXT: callq _write ; CHECK-NEXT: subq %rbx, %r14 ; CHECK-NEXT: movq _syHistory@GOTPCREL(%rip), %rax ; CHECK-NEXT: leaq 8189(%r14,%rax), %rax ; CHECK-NEXT: .p2align 4, 0x90 -; CHECK-NEXT: LBB0_47: ## %for.body1723 +; CHECK-NEXT: LBB0_48: ## %for.body1723 ; CHECK-NEXT: ## =>This Inner Loop Header: Depth=1 ; CHECK-NEXT: decq %rax -; CHECK-NEXT: jmp LBB0_47 -; CHECK-NEXT: LBB0_45: ## %if.then1477.loopexit +; CHECK-NEXT: jmp LBB0_48 +; CHECK-NEXT: LBB0_46: ## %if.then1477.loopexit ; CHECK-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 ## 8-byte Reload ; CHECK-NEXT: movq %r14, %rbx -; CHECK-NEXT: jmp LBB0_46 +; CHECK-NEXT: jmp LBB0_47 ; CHECK-NEXT: LBB0_16: ## %while.cond635.preheader ; CHECK-NEXT: xorl %eax, %eax ; CHECK-NEXT: testb %al, %al @@ -286,31 +287,31 @@ define ptr @SyFgets(ptr %line, i64 %length, i64 %fid) { ; CHECK-NEXT: LBB0_40: ## %while.cond661 ; CHECK-NEXT: ## =>This Inner Loop Header: Depth=1 ; CHECK-NEXT: jmp LBB0_40 -; CHECK-NEXT: LBB0_48: ## %for.cond1480.preheader +; CHECK-NEXT: LBB0_49: ## %for.cond1480.preheader ; CHECK-NEXT: xorl %eax, %eax ; CHECK-NEXT: testb %al, %al -; CHECK-NEXT: je LBB0_53 -; CHECK-NEXT: ## %bb.49: ## %for.body1664.lr.ph +; CHECK-NEXT: je LBB0_54 +; CHECK-NEXT: ## %bb.50: ## %for.body1664.lr.ph ; CHECK-NEXT: xorl %eax, %eax ; CHECK-NEXT: testb %al, %al ; CHECK-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 ## 8-byte Reload ; CHECK-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %ebp ## 4-byte Reload -; CHECK-NEXT: jne LBB0_52 -; CHECK-NEXT: ## %bb.50: ## %while.body1679.preheader +; CHECK-NEXT: jne LBB0_53 +; CHECK-NEXT: ## %bb.51: ## %while.body1679.preheader ; CHECK-NEXT: incl %ebp ; CHECK-NEXT: xorl %ebx, %ebx ; CHECK-NEXT: .p2align 4, 0x90 -; CHECK-NEXT: LBB0_51: ## %while.body1679 +; CHECK-NEXT: LBB0_52: ## %while.body1679 ; CHECK-NEXT: ## =>This Inner Loop Header: Depth=1 ; CHECK-NEXT: movq (%r14), %rdi ; CHECK-NEXT: callq _fileno ; CHECK-NEXT: incl %ebp ; CHECK-NEXT: testb %bl, %bl -; CHECK-NEXT: jne LBB0_51 -; CHECK-NEXT: LBB0_52: ## %while.cond1683.preheader +; CHECK-NEXT: jne LBB0_52 +; CHECK-NEXT: LBB0_53: ## %while.cond1683.preheader ; CHECK-NEXT: xorl %eax, %eax ; CHECK-NEXT: testb %al, %al -; CHECK-NEXT: LBB0_53: ## %if.then.i +; CHECK-NEXT: LBB0_54: ## %if.then.i ; CHECK-NEXT: ud2 entry: %sub.ptr.rhs.cast646 = ptrtoint ptr %line to i64 diff --git a/llvm/test/CodeGen/X86/setcc-non-simple-type.ll b/llvm/test/CodeGen/X86/setcc-non-simple-type.ll index fc214ef161fc63..483c16d6531b49 100644 --- a/llvm/test/CodeGen/X86/setcc-non-simple-type.ll +++ b/llvm/test/CodeGen/X86/setcc-non-simple-type.ll @@ -53,9 +53,9 @@ define void @failing(ptr %0, ptr %1) nounwind { ; CHECK-NEXT: .LBB0_1: # %vector.ph ; CHECK-NEXT: # =>This Loop Header: Depth=1 ; CHECK-NEXT: # Child Loop BB0_2 Depth 2 +; CHECK-NEXT: xorpd %xmm3, %xmm3 ; CHECK-NEXT: movq $-1024, %rdi # imm = 0xFC00 ; CHECK-NEXT: movdqa %xmm0, %xmm4 -; CHECK-NEXT: xorpd %xmm3, %xmm3 ; CHECK-NEXT: .p2align 4, 0x90 ; CHECK-NEXT: .LBB0_2: # %vector.body ; CHECK-NEXT: # Parent Loop BB0_1 Depth=1 @@ -114,9 +114,9 @@ define void @failing(ptr %0, ptr %1) nounwind { ; CHECK-AVX2-NEXT: .LBB0_1: # %vector.ph ; CHECK-AVX2-NEXT: # =>This Loop Header: Depth=1 ; CHECK-AVX2-NEXT: # Child Loop BB0_2 Depth 2 +; CHECK-AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3 ; CHECK-AVX2-NEXT: movq $-1024, %rdi # imm = 0xFC00 ; CHECK-AVX2-NEXT: vmovdqa %xmm0, %xmm4 -; CHECK-AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3 ; CHECK-AVX2-NEXT: .p2align 4, 0x90 ; CHECK-AVX2-NEXT: .LBB0_2: # %vector.body ; CHECK-AVX2-NEXT: # Parent Loop BB0_1 Depth=1 diff --git a/llvm/test/DebugInfo/X86/dbg-value-transfer-order.ll b/llvm/test/DebugInfo/X86/dbg-value-transfer-order.ll index 7e4cc4b0394c0b..1261bc3a1cf6f1 100644 --- a/llvm/test/DebugInfo/X86/dbg-value-transfer-order.ll +++ b/llvm/test/DebugInfo/X86/dbg-value-transfer-order.ll @@ -31,8 +31,8 @@ ; CHECK: movl $1, %[[reg:[^ ]*]] ; CHECK: shll %cl, %[[reg]] ; CHECK: .LBB0_2: # %while.body -; CHECK: testl {{.*}} ; CHECK: movl $32, %ecx +; CHECK: testl {{.*}} ; CHECK: jne .LBB0_4 ; CHECK: # %bb.3: # %if.then ; CHECK: callq if_then