[X86] Autogen a few tests for ease of update [nfc]
This commit is contained in:
parent
9c46a9cf61
commit
e9d4a9dd8b
|
|
@ -1,17 +1,35 @@
|
|||
; RUN: llc < %s -relocation-model=static -mtriple=x86_64-unknown-linux-gnu -asm-verbose=0 | FileCheck %s
|
||||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
||||
; RUN: llc < %s -relocation-model=static -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
|
||||
|
||||
; The inner loop should require only one add (and no leas either).
|
||||
; rdar://8100380
|
||||
|
||||
; CHECK: BB0_2:
|
||||
; CHECK-NEXT: movb $0, flags(%rcx)
|
||||
; CHECK-NEXT: addq %rax, %rcx
|
||||
; CHECK-NEXT: cmpq $8192, %rcx
|
||||
; CHECK-NEXT: jl
|
||||
|
||||
@flags = external dso_local global [8192 x i8], align 16 ; <[8192 x i8]*> [#uses=1]
|
||||
|
||||
define void @foo() nounwind {
|
||||
; CHECK-LABEL: foo:
|
||||
; CHECK: # %bb.0: # %entry
|
||||
; CHECK-NEXT: movl $2, %eax
|
||||
; CHECK-NEXT: .p2align 4, 0x90
|
||||
; CHECK-NEXT: .LBB0_1: # %bb7
|
||||
; CHECK-NEXT: # =>This Loop Header: Depth=1
|
||||
; CHECK-NEXT: # Child Loop BB0_2 Depth 2
|
||||
; CHECK-NEXT: movl $2, %ecx
|
||||
; CHECK-NEXT: .p2align 4, 0x90
|
||||
; CHECK-NEXT: .LBB0_2: # %bb11
|
||||
; CHECK-NEXT: # Parent Loop BB0_1 Depth=1
|
||||
; CHECK-NEXT: # => This Inner Loop Header: Depth=2
|
||||
; CHECK-NEXT: movb $0, flags(%rcx)
|
||||
; CHECK-NEXT: addq %rax, %rcx
|
||||
; CHECK-NEXT: cmpq $8192, %rcx # imm = 0x2000
|
||||
; CHECK-NEXT: jl .LBB0_2
|
||||
; CHECK-NEXT: # %bb.3: # %bb16
|
||||
; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
|
||||
; CHECK-NEXT: incq %rax
|
||||
; CHECK-NEXT: cmpq $8192, %rax # imm = 0x2000
|
||||
; CHECK-NEXT: jl .LBB0_1
|
||||
; CHECK-NEXT: # %bb.4: # %bb20
|
||||
; CHECK-NEXT: retq
|
||||
entry:
|
||||
br label %bb
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
||||
; RUN: llc -mtriple=x86_64-apple-darwin < %s | FileCheck %s
|
||||
|
||||
; A MOV32ri is inside a loop, it has two successors, one successor is inside the
|
||||
|
|
@ -5,15 +6,48 @@
|
|||
; MOV32ri outside the loop.
|
||||
; rdar://11980766
|
||||
define i32 @sink_succ(i32 %argc, i8** nocapture %argv) nounwind uwtable ssp {
|
||||
; CHECK-LABEL: sink_succ
|
||||
; CHECK: [[OUTER_LN1:LBB0_[0-9]+]]: ## %preheader
|
||||
; CHECK: %exit
|
||||
; CHECK-NOT: movl
|
||||
; CHECK: jne [[OUTER_LN1]]
|
||||
; CHECK: movl
|
||||
; CHECK: [[LN2:LBB0_[0-9]+]]: ## %for.body2
|
||||
; CHECK: jne [[LN2]]
|
||||
; CHECK: ret
|
||||
; CHECK-LABEL: sink_succ:
|
||||
; CHECK: ## %bb.0: ## %entry
|
||||
; CHECK-NEXT: xorl %eax, %eax
|
||||
; CHECK-NEXT: .p2align 4, 0x90
|
||||
; CHECK-NEXT: LBB0_1: ## %preheader
|
||||
; CHECK-NEXT: ## =>This Loop Header: Depth=1
|
||||
; CHECK-NEXT: ## Child Loop BB0_2 Depth 2
|
||||
; CHECK-NEXT: ## Child Loop BB0_3 Depth 3
|
||||
; CHECK-NEXT: movl $1, %ecx
|
||||
; CHECK-NEXT: .p2align 4, 0x90
|
||||
; CHECK-NEXT: LBB0_2: ## %for.body1.lr
|
||||
; CHECK-NEXT: ## Parent Loop BB0_1 Depth=1
|
||||
; CHECK-NEXT: ## => This Loop Header: Depth=2
|
||||
; CHECK-NEXT: ## Child Loop BB0_3 Depth 3
|
||||
; CHECK-NEXT: movl %ecx, %edx
|
||||
; CHECK-NEXT: .p2align 4, 0x90
|
||||
; CHECK-NEXT: LBB0_3: ## %for.body1
|
||||
; CHECK-NEXT: ## Parent Loop BB0_1 Depth=1
|
||||
; CHECK-NEXT: ## Parent Loop BB0_2 Depth=2
|
||||
; CHECK-NEXT: ## => This Inner Loop Header: Depth=3
|
||||
; CHECK-NEXT: decl %edx
|
||||
; CHECK-NEXT: jne LBB0_3
|
||||
; CHECK-NEXT: ## %bb.4: ## %for.inc40.i
|
||||
; CHECK-NEXT: ## in Loop: Header=BB0_2 Depth=2
|
||||
; CHECK-NEXT: incl %ecx
|
||||
; CHECK-NEXT: cmpl $32, %ecx
|
||||
; CHECK-NEXT: jne LBB0_2
|
||||
; CHECK-NEXT: ## %bb.5: ## %exit
|
||||
; CHECK-NEXT: ## in Loop: Header=BB0_1 Depth=1
|
||||
; CHECK-NEXT: incl %eax
|
||||
; CHECK-NEXT: cmpl $10, %eax
|
||||
; CHECK-NEXT: jne LBB0_1
|
||||
; CHECK-NEXT: ## %bb.6: ## %for.body2.preheader
|
||||
; CHECK-NEXT: movl $2048, %eax ## imm = 0x800
|
||||
; CHECK-NEXT: .p2align 4, 0x90
|
||||
; CHECK-NEXT: LBB0_7: ## %for.body2
|
||||
; CHECK-NEXT: ## =>This Inner Loop Header: Depth=1
|
||||
; CHECK-NEXT: decl %eax
|
||||
; CHECK-NEXT: jne LBB0_7
|
||||
; CHECK-NEXT: ## %bb.8: ## %for.end20
|
||||
; CHECK-NEXT: xorl %eax, %eax
|
||||
; CHECK-NEXT: retq
|
||||
entry:
|
||||
br label %preheader
|
||||
|
||||
|
|
@ -55,6 +89,19 @@ for.end20:
|
|||
|
||||
define i32 @sink_out_of_loop(i32 %n, i32* %output) {
|
||||
; CHECK-LABEL: sink_out_of_loop:
|
||||
; CHECK: ## %bb.0: ## %entry
|
||||
; CHECK-NEXT: xorl %ecx, %ecx
|
||||
; CHECK-NEXT: .p2align 4, 0x90
|
||||
; CHECK-NEXT: LBB1_1: ## %loop
|
||||
; CHECK-NEXT: ## =>This Inner Loop Header: Depth=1
|
||||
; CHECK-NEXT: movl %ecx, %eax
|
||||
; CHECK-NEXT: movl %ecx, (%rsi,%rcx,4)
|
||||
; CHECK-NEXT: incq %rcx
|
||||
; CHECK-NEXT: cmpl %edi, %ecx
|
||||
; CHECK-NEXT: jl LBB1_1
|
||||
; CHECK-NEXT: ## %bb.2: ## %exit
|
||||
; CHECK-NEXT: imull %eax, %eax
|
||||
; CHECK-NEXT: retq
|
||||
entry:
|
||||
br label %loop
|
||||
|
||||
|
|
@ -68,8 +115,5 @@ loop:
|
|||
br i1 %exit_cond, label %exit, label %loop
|
||||
|
||||
exit:
|
||||
; CHECK: %bb.2
|
||||
; CHECK: imull %eax, %eax
|
||||
; CHECK: retq
|
||||
ret i32 %j
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,15 +1,61 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
||||
; RUN: llc < %s -O3 -mtriple=x86_64-- -mcpu=core2 | FileCheck %s
|
||||
|
||||
declare i1 @check() nounwind
|
||||
declare i1 @foo(i8*, i8*, i8*) nounwind
|
||||
|
||||
; Check that redundant phi elimination ran
|
||||
; CHECK: @test
|
||||
; CHECK: %while.body.i
|
||||
; CHECK: movs
|
||||
; CHECK-NOT: movs
|
||||
; CHECK: %for.end.i
|
||||
define i32 @test(i8* %base) nounwind uwtable ssp {
|
||||
; CHECK-LABEL: test:
|
||||
; CHECK: # %bb.0: # %entry
|
||||
; CHECK-NEXT: pushq %r15
|
||||
; CHECK-NEXT: .cfi_def_cfa_offset 16
|
||||
; CHECK-NEXT: pushq %r14
|
||||
; CHECK-NEXT: .cfi_def_cfa_offset 24
|
||||
; CHECK-NEXT: pushq %r13
|
||||
; CHECK-NEXT: .cfi_def_cfa_offset 32
|
||||
; CHECK-NEXT: pushq %r12
|
||||
; CHECK-NEXT: .cfi_def_cfa_offset 40
|
||||
; CHECK-NEXT: pushq %rbx
|
||||
; CHECK-NEXT: .cfi_def_cfa_offset 48
|
||||
; CHECK-NEXT: .cfi_offset %rbx, -48
|
||||
; CHECK-NEXT: .cfi_offset %r12, -40
|
||||
; CHECK-NEXT: .cfi_offset %r13, -32
|
||||
; CHECK-NEXT: .cfi_offset %r14, -24
|
||||
; CHECK-NEXT: .cfi_offset %r15, -16
|
||||
; CHECK-NEXT: movq %rdi, %r14
|
||||
; CHECK-NEXT: leaq 16(%rdi), %r15
|
||||
; CHECK-NEXT: movl $16, %eax
|
||||
; CHECK-NEXT: xorl %r12d, %r12d
|
||||
; CHECK-NEXT: .p2align 4, 0x90
|
||||
; CHECK-NEXT: .LBB0_1: # %while.body.i
|
||||
; CHECK-NEXT: # =>This Loop Header: Depth=1
|
||||
; CHECK-NEXT: # Child Loop BB0_2 Depth 2
|
||||
; CHECK-NEXT: movslq %r12d, %r13
|
||||
; CHECK-NEXT: movq %rax, %r12
|
||||
; CHECK-NEXT: leaq (%r15,%r13), %rbx
|
||||
; CHECK-NEXT: addq $16, %r13
|
||||
; CHECK-NEXT: .p2align 4, 0x90
|
||||
; CHECK-NEXT: .LBB0_2: # %for.body.i
|
||||
; CHECK-NEXT: # Parent Loop BB0_1 Depth=1
|
||||
; CHECK-NEXT: # => This Inner Loop Header: Depth=2
|
||||
; CHECK-NEXT: callq check@PLT
|
||||
; CHECK-NEXT: incq %rbx
|
||||
; CHECK-NEXT: testb $1, %al
|
||||
; CHECK-NEXT: je .LBB0_2
|
||||
; CHECK-NEXT: # %bb.3: # %for.end.i
|
||||
; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
|
||||
; CHECK-NEXT: addq %r14, %r13
|
||||
; CHECK-NEXT: movq %r13, %rdi
|
||||
; CHECK-NEXT: movq %r13, %rsi
|
||||
; CHECK-NEXT: callq foo@PLT
|
||||
; CHECK-NEXT: testb $1, %al
|
||||
; CHECK-NEXT: je .LBB0_5
|
||||
; CHECK-NEXT: # %bb.4: # %cond.true29.i
|
||||
; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1
|
||||
; CHECK-NEXT: leaq 16(%r12), %rax
|
||||
; CHECK-NEXT: jmp .LBB0_1
|
||||
; CHECK-NEXT: .LBB0_5: # %cond.false35.i
|
||||
entry:
|
||||
br label %while.body.lr.ph.i
|
||||
|
||||
|
|
@ -58,11 +104,20 @@ exit: ; preds = %cond.true29.i, %cond.true.i
|
|||
; Test phi reuse after LSR that requires SCEVExpander to hoist an
|
||||
; interesting GEP.
|
||||
;
|
||||
; CHECK: @test2
|
||||
; CHECK: %entry
|
||||
; CHECK-NOT: mov
|
||||
; CHECK: je
|
||||
define void @test2(i32 %n) nounwind uwtable {
|
||||
; CHECK-LABEL: test2:
|
||||
; CHECK: # %bb.0: # %entry
|
||||
; CHECK-NEXT: xorl %eax, %eax
|
||||
; CHECK-NEXT: testb %al, %al
|
||||
; CHECK-NEXT: je .LBB1_1
|
||||
; CHECK-NEXT: # %bb.3: # %while.end
|
||||
; CHECK-NEXT: retq
|
||||
; CHECK-NEXT: .LBB1_1: # %for.cond468.preheader
|
||||
; CHECK-NEXT: cmpl $2, %edi
|
||||
; CHECK-NEXT: .p2align 4, 0x90
|
||||
; CHECK-NEXT: .LBB1_2: # %for.inc498
|
||||
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
|
||||
; CHECK-NEXT: jmp .LBB1_2
|
||||
entry:
|
||||
br i1 undef, label %while.end, label %for.cond468
|
||||
|
||||
|
|
@ -95,16 +150,36 @@ while.end: ; preds = %entry
|
|||
; Test redundant phi elimination when the deleted phi's increment is
|
||||
; itself a phi.
|
||||
;
|
||||
; CHECK: @test3
|
||||
; CHECK: %meshBB1
|
||||
; CHECK: %meshBB
|
||||
; CHECK-NEXT: Parent Loop
|
||||
; CHECK-NEXT: Inner Loop
|
||||
; CHECK-NEXT: incq
|
||||
; CHECK: testb
|
||||
; CHECK: je
|
||||
; CHECK: jmp
|
||||
define fastcc void @test3(double* nocapture %u) nounwind uwtable ssp {
|
||||
; CHECK-LABEL: test3:
|
||||
; CHECK: # %bb.0: # %entry
|
||||
; CHECK-NEXT: xorl %eax, %eax
|
||||
; CHECK-NEXT: testb %al, %al
|
||||
; CHECK-NEXT: jne .LBB2_6
|
||||
; CHECK-NEXT: # %bb.1:
|
||||
; CHECK-NEXT: xorl %eax, %eax
|
||||
; CHECK-NEXT: .p2align 4, 0x90
|
||||
; CHECK-NEXT: .LBB2_2: # %meshBB1
|
||||
; CHECK-NEXT: # =>This Loop Header: Depth=1
|
||||
; CHECK-NEXT: # Child Loop BB2_4 Depth 2
|
||||
; CHECK-NEXT: # implicit-def: $rcx
|
||||
; CHECK-NEXT: testb %al, %al
|
||||
; CHECK-NEXT: jne .LBB2_2
|
||||
; CHECK-NEXT: .p2align 4, 0x90
|
||||
; CHECK-NEXT: .LBB2_4: # %meshBB
|
||||
; CHECK-NEXT: # Parent Loop BB2_2 Depth=1
|
||||
; CHECK-NEXT: # => This Inner Loop Header: Depth=2
|
||||
; CHECK-NEXT: incq %rcx
|
||||
; CHECK-NEXT: testb %al, %al
|
||||
; CHECK-NEXT: je .LBB2_4
|
||||
; CHECK-NEXT: jmp .LBB2_2
|
||||
; CHECK-NEXT: .LBB2_6: # %meshBB5
|
||||
; CHECK-NEXT: xorl %eax, %eax
|
||||
; CHECK-NEXT: testb %al, %al
|
||||
; CHECK-NEXT: je .LBB2_5
|
||||
; CHECK-NEXT: # %bb.7: # %eval_At_times_u.exit
|
||||
; CHECK-NEXT: retq
|
||||
; CHECK-NEXT: .LBB2_5: # %for.inc8.us.i2
|
||||
entry:
|
||||
br i1 undef, label %meshBB1, label %meshBB5
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue