[llvm] r289443 - [X86] Regenerate vector bitcast/widening tests.

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 12 08:15:45 PST 2016


Author: rksimon
Date: Mon Dec 12 10:15:45 2016
New Revision: 289443

URL: http://llvm.org/viewvc/llvm-project?rev=289443&view=rev
Log:
[X86] Regenerate vector bitcast/widening tests.

Modified:
    llvm/trunk/test/CodeGen/X86/lower-bitcast.ll

Modified: llvm/trunk/test/CodeGen/X86/lower-bitcast.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/lower-bitcast.ll?rev=289443&r1=289442&r2=289443&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/lower-bitcast.ll (original)
+++ llvm/trunk/test/CodeGen/X86/lower-bitcast.ll Mon Dec 12 10:15:45 2016
@@ -1,188 +1,180 @@
-; RUN: llc < %s -march=x86-64 -mcpu=core2 -mattr=+sse2 | FileCheck %s
-; RUN: llc < %s -march=x86-64 -mcpu=core2 -mattr=+sse2 -x86-experimental-vector-widening-legalization | FileCheck %s --check-prefix=CHECK-WIDE
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -mtriple=x86_64-unknown -mcpu=core2 -mattr=+sse2 | FileCheck %s
+; RUN: llc < %s -mtriple=x86_64-unknown -mcpu=core2 -mattr=+sse2 -x86-experimental-vector-widening-legalization | FileCheck %s --check-prefix=CHECK-WIDE
 
+; FIXME: Ideally we should be able to fold the entire body of @test1 into a
+; single paddd instruction. At the moment we produce the sequence
+; pshufd+paddq+pshufd. This is fixed with the widening legalization.
 
 define double @test1(double %A) {
+; CHECK-LABEL: test1:
+; CHECK:       # BB#0:
+; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]
+; CHECK-NEXT:    paddd {{.*}}(%rip), %xmm0
+; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; CHECK-NEXT:    retq
+;
+; CHECK-WIDE-LABEL: test1:
+; CHECK-WIDE:       # BB#0:
+; CHECK-WIDE-NEXT:    paddd {{.*}}(%rip), %xmm0
+; CHECK-WIDE-NEXT:    retq
   %1 = bitcast double %A to <2 x i32>
   %add = add <2 x i32> %1, <i32 3, i32 5>
   %2 = bitcast <2 x i32> %add to double
   ret double %2
 }
-; FIXME: Ideally we should be able to fold the entire body of @test1 into a
-; single paddd instruction. At the moment we produce the sequence 
-; pshufd+paddq+pshufd. This is fixed with the widening legalization.
-;
-; CHECK-LABEL: test1
-; CHECK-NOT: movsd
-; CHECK: pshufd
-; CHECK-NEXT: paddd
-; CHECK-NEXT: pshufd
-; CHECK-NEXT: ret
-;
-; CHECK-WIDE-LABEL: test1
-; CHECK-WIDE-NOT: movsd
-; CHECK-WIDE: paddd
-; CHECK-WIDE-NEXT: ret
-
 
 define double @test2(double %A, double %B) {
+; CHECK-LABEL: test2:
+; CHECK:       # BB#0:
+; CHECK-NEXT:    paddd %xmm1, %xmm0
+; CHECK-NEXT:    retq
+;
+; CHECK-WIDE-LABEL: test2:
+; CHECK-WIDE:       # BB#0:
+; CHECK-WIDE-NEXT:    paddd %xmm1, %xmm0
+; CHECK-WIDE-NEXT:    retq
   %1 = bitcast double %A to <2 x i32>
   %2 = bitcast double %B to <2 x i32>
   %add = add <2 x i32> %1, %2
   %3 = bitcast <2 x i32> %add to double
   ret double %3
 }
-; CHECK-LABEL: test2
-; CHECK-NOT: movsd
-; CHECK: paddd
-; CHECK-NEXT: ret
-;
-; CHECK-WIDE-LABEL: test2
-; CHECK-WIDE-NOT: movsd
-; CHECK-WIDE: paddd
-; CHECK-WIDE-NEXT: ret
-
 
 define i64 @test3(i64 %A) {
+; CHECK-LABEL: test3:
+; CHECK:       # BB#0:
+; CHECK-NEXT:    movd %rdi, %xmm0
+; CHECK-NEXT:    addps {{.*}}(%rip), %xmm0
+; CHECK-NEXT:    movd %xmm0, %rax
+; CHECK-NEXT:    retq
+;
+; CHECK-WIDE-LABEL: test3:
+; CHECK-WIDE:       # BB#0:
+; CHECK-WIDE-NEXT:    movd %rdi, %xmm0
+; CHECK-WIDE-NEXT:    addps {{.*}}(%rip), %xmm0
+; CHECK-WIDE-NEXT:    movd %xmm0, %rax
+; CHECK-WIDE-NEXT:    retq
   %1 = bitcast i64 %A to <2 x float>
   %add = fadd <2 x float> %1, <float 3.0, float 5.0>
   %2 = bitcast <2 x float> %add to i64
   ret i64 %2
 }
-; CHECK-LABEL: test3
-; CHECK-NOT: pshufd
-; CHECK: addps
-; CHECK-NOT: pshufd
-; CHECK: ret
-;
-; CHECK-WIDE-LABEL: test3
-; CHECK-WIDE-NOT: pshufd
-; CHECK-WIDE: addps
-; CHECK-WIDE-NOT: pshufd
-; CHECK-WIDE: ret
 
+; FIXME: Ideally we should be able to fold the entire body of @test4 into a
+; single paddd instruction. This is fixed with the widening legalization.
 
 define i64 @test4(i64 %A) {
+; CHECK-LABEL: test4:
+; CHECK:       # BB#0:
+; CHECK-NEXT:    movd %rdi, %xmm0
+; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]
+; CHECK-NEXT:    paddd {{.*}}(%rip), %xmm0
+; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
+; CHECK-NEXT:    movd %xmm0, %rax
+; CHECK-NEXT:    retq
+;
+; CHECK-WIDE-LABEL: test4:
+; CHECK-WIDE:       # BB#0:
+; CHECK-WIDE-NEXT:    movd %rdi, %xmm0
+; CHECK-WIDE-NEXT:    paddd {{.*}}(%rip), %xmm0
+; CHECK-WIDE-NEXT:    movd %xmm0, %rax
+; CHECK-WIDE-NEXT:    retq
   %1 = bitcast i64 %A to <2 x i32>
   %add = add <2 x i32> %1, <i32 3, i32 5>
   %2 = bitcast <2 x i32> %add to i64
   ret i64 %2
 }
-; FIXME: At the moment we still produce the sequence pshufd+paddd+pshufd.
-; Ideally, we should fold that sequence into a single paddd. This is fixed with
-; the widening legalization.
-;
-; CHECK-LABEL: test4
-; CHECK: pshufd
-; CHECK-NEXT: paddd
-; CHECK-NEXT: pshufd
-; CHECK: ret
-;
-; CHECK-WIDE-LABEL: test4
-; CHECK-WIDE: movd %{{rdi|rcx}},
-; CHECK-WIDE-NEXT: paddd
-; CHECK-WIDE-NEXT: movd {{.*}}, %rax
-; CHECK-WIDE: ret
-
 
 define double @test5(double %A) {
+; CHECK-LABEL: test5:
+; CHECK:       # BB#0:
+; CHECK-NEXT:    addps {{.*}}(%rip), %xmm0
+; CHECK-NEXT:    retq
+;
+; CHECK-WIDE-LABEL: test5:
+; CHECK-WIDE:       # BB#0:
+; CHECK-WIDE-NEXT:    addps {{.*}}(%rip), %xmm0
+; CHECK-WIDE-NEXT:    retq
   %1 = bitcast double %A to <2 x float>
   %add = fadd <2 x float> %1, <float 3.0, float 5.0>
   %2 = bitcast <2 x float> %add to double
   ret double %2
 }
-; CHECK-LABEL: test5
-; CHECK: addps
-; CHECK-NEXT: ret
-;
-; CHECK-WIDE-LABEL: test5
-; CHECK-WIDE: addps
-; CHECK-WIDE-NEXT: ret
 
+; FIXME: Ideally we should be able to fold the entire body of @test6 into a
+; single paddw instruction. This is fixed with the widening legalization.
 
 define double @test6(double %A) {
+; CHECK-LABEL: test6:
+; CHECK:       # BB#0:
+; CHECK-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
+; CHECK-NEXT:    paddw {{.*}}(%rip), %xmm0
+; CHECK-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
+; CHECK-NEXT:    retq
+;
+; CHECK-WIDE-LABEL: test6:
+; CHECK-WIDE:       # BB#0:
+; CHECK-WIDE-NEXT:    paddw {{.*}}(%rip), %xmm0
+; CHECK-WIDE-NEXT:    retq
   %1 = bitcast double %A to <4 x i16>
   %add = add <4 x i16> %1, <i16 3, i16 4, i16 5, i16 6>
   %2 = bitcast <4 x i16> %add to double
   ret double %2
 }
-; FIXME: Ideally we should be able to fold the entire body of @test6 into a
-; single paddw instruction. This is fixed with the widening legalization.
-;
-; CHECK-LABEL: test6
-; CHECK-NOT: movsd
-; CHECK: punpcklwd
-; CHECK-NEXT: paddw
-; CHECK-NEXT: pshufb
-; CHECK-NEXT: ret
-;
-; CHECK-WIDE-LABEL: test6
-; CHECK-WIDE-NOT: mov
-; CHECK-WIDE-NOT: punpcklwd
-; CHECK-WIDE: paddw
-; CHECK-WIDE-NEXT: ret
-
 
 define double @test7(double %A, double %B) {
+; CHECK-LABEL: test7:
+; CHECK:       # BB#0:
+; CHECK-NEXT:    paddw %xmm1, %xmm0
+; CHECK-NEXT:    retq
+;
+; CHECK-WIDE-LABEL: test7:
+; CHECK-WIDE:       # BB#0:
+; CHECK-WIDE-NEXT:    paddw %xmm1, %xmm0
+; CHECK-WIDE-NEXT:    retq
   %1 = bitcast double %A to <4 x i16>
   %2 = bitcast double %B to <4 x i16>
   %add = add <4 x i16> %1, %2
   %3 = bitcast <4 x i16> %add to double
   ret double %3
 }
-; CHECK-LABEL: test7
-; CHECK-NOT: movsd
-; CHECK-NOT: punpcklwd
-; CHECK: paddw
-; CHECK-NEXT: ret
-;
-; CHECK-WIDE-LABEL: test7
-; CHECK-WIDE-NOT: movsd
-; CHECK-WIDE-NOT: punpcklwd
-; CHECK-WIDE: paddw
-; CHECK-WIDE-NEXT: ret
 
+; FIXME: Ideally we should be able to fold the entire body of @test8 into a
+; single paddb instruction. At the moment we produce the sequence
+; pshufd+paddw+pshufd. This is fixed with the widening legalization.
 
 define double @test8(double %A) {
+; CHECK-LABEL: test8:
+; CHECK:       # BB#0:
+; CHECK-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
+; CHECK-NEXT:    paddb {{.*}}(%rip), %xmm0
+; CHECK-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
+; CHECK-NEXT:    retq
+;
+; CHECK-WIDE-LABEL: test8:
+; CHECK-WIDE:       # BB#0:
+; CHECK-WIDE-NEXT:    paddb {{.*}}(%rip), %xmm0
+; CHECK-WIDE-NEXT:    retq
   %1 = bitcast double %A to <8 x i8>
   %add = add <8 x i8> %1, <i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10>
   %2 = bitcast <8 x i8> %add to double
   ret double %2
 }
-; FIXME: Ideally we should be able to fold the entire body of @test8 into a
-; single paddb instruction. At the moment we produce the sequence 
-; pshufd+paddw+pshufd. This is fixed with the widening legalization.
-;
-; CHECK-LABEL: test8
-; CHECK-NOT: movsd
-; CHECK: punpcklbw
-; CHECK-NEXT: paddb
-; CHECK-NEXT: pshufb
-; CHECK-NEXT: ret
-;
-; CHECK-WIDE-LABEL: test8
-; CHECK-WIDE-NOT: movsd
-; CHECK-WIDE-NOT: punpcklbw
-; CHECK-WIDE: paddb
-; CHECK-WIDE-NEXT: ret
-
 
 define double @test9(double %A, double %B) {
+; CHECK-LABEL: test9:
+; CHECK:       # BB#0:
+; CHECK-NEXT:    paddb %xmm1, %xmm0
+; CHECK-NEXT:    retq
+;
+; CHECK-WIDE-LABEL: test9:
+; CHECK-WIDE:       # BB#0:
+; CHECK-WIDE-NEXT:    paddb %xmm1, %xmm0
+; CHECK-WIDE-NEXT:    retq
   %1 = bitcast double %A to <8 x i8>
   %2 = bitcast double %B to <8 x i8>
   %add = add <8 x i8> %1, %2
   %3 = bitcast <8 x i8> %add to double
   ret double %3
 }
-; CHECK-LABEL: test9
-; CHECK-NOT: movsd
-; CHECK-NOT: punpcklbw
-; CHECK: paddb
-; CHECK-NEXT: ret
-;
-; CHECK-WIDE-LABEL: test9
-; CHECK-WIDE-NOT: movsd
-; CHECK-WIDE-NOT: punpcklbw
-; CHECK-WIDE: paddb
-; CHECK-WIDE-NEXT: ret
-




More information about the llvm-commits mailing list