From 43d9a3799634035adbfcd1cbb7fbabd9bd25499e Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Wed, 16 Aug 2017 16:22:19 +0000 Subject: [PATCH] [X86] Regenerate immediate store merging tests git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@311016 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/X86/immediate_merging.ll | 98 +++++++++++++++++++-------- 1 file changed, 71 insertions(+), 27 deletions(-) diff --git a/test/CodeGen/X86/immediate_merging.ll b/test/CodeGen/X86/immediate_merging.ll index 8aef9c279b3..9c9e4830116 100644 --- a/test/CodeGen/X86/immediate_merging.ll +++ b/test/CodeGen/X86/immediate_merging.ll @@ -1,5 +1,6 @@ -; RUN: llc -o - -mtriple=i386-unknown-linux-gnu < %s | FileCheck %s -; RUN: llc -o - -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc < %s -mtriple=i386-unknown-linux-gnu | FileCheck %s --check-prefix=X86 +; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s --check-prefix=X64 @a = common global i32 0, align 4 @b = common global i32 0, align 4 @@ -13,15 +14,43 @@ ; Test -Os to make sure immediates with multiple users don't get pulled in to ; instructions. define i32 @foo() optsize { -; CHECK-LABEL: foo: -; CHECK: movl $1234, [[R1:%[a-z]+]] -; CHECK-NOT: movl $1234, a -; CHECK-NOT: movl $1234, b -; CHECK-NOT: movl $12, c -; CHECK-NOT: cmpl $12, e -; CHECK: movl [[R1]], a -; CHECK: movl [[R1]], b - +; X86-LABEL: foo: +; X86: # BB#0: # %entry +; X86-NEXT: movl $1234, %eax # imm = 0x4D2 +; X86-NEXT: movl %eax, a +; X86-NEXT: movl %eax, b +; X86-NEXT: movl $12, %eax +; X86-NEXT: movl %eax, c +; X86-NEXT: cmpl %eax, e +; X86-NEXT: jne .LBB0_2 +; X86-NEXT: # BB#1: # %if.then +; X86-NEXT: movl $1, x +; X86-NEXT: .LBB0_2: # %if.end +; X86-NEXT: movl $1234, f # imm = 0x4D2 +; X86-NEXT: movl $555, %eax # imm = 0x22B +; X86-NEXT: movl %eax, h +; X86-NEXT: addl %eax, i +; X86-NEXT: xorl %eax, %eax +; X86-NEXT: retl +; +; X64-LABEL: foo: +; X64: # BB#0: # %entry +; X64-NEXT: movl $1234, %eax # imm = 0x4D2 +; X64-NEXT: movl %eax, {{.*}}(%rip) +; X64-NEXT: movl %eax, {{.*}}(%rip) +; X64-NEXT: movl $12, %eax +; X64-NEXT: movl %eax, {{.*}}(%rip) +; X64-NEXT: cmpl %eax, {{.*}}(%rip) +; X64-NEXT: jne .LBB0_2 +; X64-NEXT: # BB#1: # %if.then +; X64-NEXT: movl $1, {{.*}}(%rip) +; X64-NEXT: .LBB0_2: # %if.end +; X64-NEXT: movl $1234, {{.*}}(%rip) # imm = 0x4D2 +; X64-NEXT: movl $555, %eax # imm = 0x22B +; X64-NEXT: movl %eax, {{.*}}(%rip) +; X64-NEXT: addl %eax, {{.*}}(%rip) +; X64-NEXT: xorl %eax, %eax +; X64-NEXT: retq entry: store i32 1234, i32* @a store i32 1234, i32* @b @@ -35,13 +64,6 @@ if.then: ; preds = %entry br label %if.end ; New block.. Make sure 1234 isn't live across basic blocks from before. -; CHECK: movl $1234, f -; CHECK: movl $555, [[R3:%[a-z]+]] -; CHECK-NOT: movl $555, h -; CHECK-NOT: addl $555, i -; CHECK: movl [[R3]], h -; CHECK: addl [[R3]], i - if.end: ; preds = %if.then, %entry store i32 1234, i32* @f store i32 555, i32* @h @@ -53,14 +75,22 @@ if.end: ; preds = %if.then, %entry ; Test -O2 to make sure that all immediates get pulled in to their users. define i32 @foo2() { -; CHECK-LABEL: foo2: -; CHECK: movl $1234, a -; CHECK: movl $1234, b - +; X86-LABEL: foo2: +; X86: # BB#0: # %entry +; X86-NEXT: movl $1234, a # imm = 0x4D2 +; X86-NEXT: movl $1234, b # imm = 0x4D2 +; X86-NEXT: xorl %eax, %eax +; X86-NEXT: retl +; +; X64-LABEL: foo2: +; X64: # BB#0: # %entry +; X64-NEXT: movl $1234, {{.*}}(%rip) # imm = 0x4D2 +; X64-NEXT: movl $1234, {{.*}}(%rip) # imm = 0x4D2 +; X64-NEXT: xorl %eax, %eax +; X64-NEXT: retq entry: store i32 1234, i32* @a store i32 1234, i32* @b - ret i32 0 } @@ -72,10 +102,24 @@ declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) #1 ; immediates used to store to the individual memory locations. Make ; sure we don't directly store the immediates. define void @foomemset() optsize { -; CHECK-LABEL: foomemset: -; CHECK-NOT: movl ${{.*}}, AA -; CHECK: mov{{l|q}} %{{e|r}}ax, AA - +; X86-LABEL: foomemset: +; X86: # BB#0: # %entry +; X86-NEXT: movl $555819297, %eax # imm = 0x21212121 +; X86-NEXT: movl %eax, AA+20 +; X86-NEXT: movl %eax, AA+16 +; X86-NEXT: movl %eax, AA+12 +; X86-NEXT: movl %eax, AA+8 +; X86-NEXT: movl %eax, AA+4 +; X86-NEXT: movl %eax, AA +; X86-NEXT: retl +; +; X64-LABEL: foomemset: +; X64: # BB#0: # %entry +; X64-NEXT: movabsq $2387225703656530209, %rax # imm = 0x2121212121212121 +; X64-NEXT: movq %rax, AA+{{.*}}(%rip) +; X64-NEXT: movq %rax, AA+{{.*}}(%rip) +; X64-NEXT: movq %rax, {{.*}}(%rip) +; X64-NEXT: retq entry: call void @llvm.memset.p0i8.i32(i8* getelementptr inbounds ([100 x i8], [100 x i8]* @AA, i32 0, i32 0), i8 33, i32 24, i32 1, i1 false) ret void -- 2.50.1