[llvm] r265186 - [X86][SSE] Regenerated vector float tests - fabs / floor(etc.) / fneg / float2double

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 1 14:30:49 PDT 2016


Author: rksimon
Date: Fri Apr  1 16:30:48 2016
New Revision: 265186

URL: http://llvm.org/viewvc/llvm-project?rev=265186&view=rev
Log:
[X86][SSE] Regenerated vector float tests - fabs / floor(etc.) / fneg / float2double

Modified:
    llvm/trunk/test/CodeGen/X86/vec_fabs.ll
    llvm/trunk/test/CodeGen/X86/vec_floor.ll
    llvm/trunk/test/CodeGen/X86/vec_fneg.ll
    llvm/trunk/test/CodeGen/X86/vec_fpext.ll

Modified: llvm/trunk/test/CodeGen/X86/vec_fabs.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_fabs.ll?rev=265186&r1=265185&r2=265186&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vec_fabs.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vec_fabs.ll Fri Apr  1 16:30:48 2016
@@ -1,37 +1,64 @@
-; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx | FileCheck %s
-; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512f | FileCheck %s
-
-define <2 x double> @fabs_v2f64(<2 x double> %p)
-{
-  ; CHECK-LABEL: fabs_v2f64
-  ; CHECK: vandpd
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=X32
+; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=X32
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=X64
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=X64
+
+define <2 x double> @fabs_v2f64(<2 x double> %p) {
+; X32-LABEL: fabs_v2f64:
+; X32:       # BB#0:
+; X32-NEXT:    vandpd .LCPI0_0, %xmm0, %xmm0
+; X32-NEXT:    retl
+;
+; X64-LABEL: fabs_v2f64:
+; X64:       # BB#0:
+; X64-NEXT:    vandpd {{.*}}(%rip), %xmm0, %xmm0
+; X64-NEXT:    retq
   %t = call <2 x double> @llvm.fabs.v2f64(<2 x double> %p)
   ret <2 x double> %t
 }
 declare <2 x double> @llvm.fabs.v2f64(<2 x double> %p)
 
-define <4 x float> @fabs_v4f32(<4 x float> %p)
-{
-  ; CHECK-LABEL: fabs_v4f32
-  ; CHECK: vandps
+define <4 x float> @fabs_v4f32(<4 x float> %p) {
+; X32-LABEL: fabs_v4f32:
+; X32:       # BB#0:
+; X32-NEXT:    vandps .LCPI1_0, %xmm0, %xmm0
+; X32-NEXT:    retl
+;
+; X64-LABEL: fabs_v4f32:
+; X64:       # BB#0:
+; X64-NEXT:    vandps {{.*}}(%rip), %xmm0, %xmm0
+; X64-NEXT:    retq
   %t = call <4 x float> @llvm.fabs.v4f32(<4 x float> %p)
   ret <4 x float> %t
 }
 declare <4 x float> @llvm.fabs.v4f32(<4 x float> %p)
 
-define <4 x double> @fabs_v4f64(<4 x double> %p)
-{
-  ; CHECK-LABEL: fabs_v4f64
-  ; CHECK: vandpd
+define <4 x double> @fabs_v4f64(<4 x double> %p) {
+; X32-LABEL: fabs_v4f64:
+; X32:       # BB#0:
+; X32-NEXT:    vandpd .LCPI2_0, %ymm0, %ymm0
+; X32-NEXT:    retl
+;
+; X64-LABEL: fabs_v4f64:
+; X64:       # BB#0:
+; X64-NEXT:    vandpd {{.*}}(%rip), %ymm0, %ymm0
+; X64-NEXT:    retq
   %t = call <4 x double> @llvm.fabs.v4f64(<4 x double> %p)
   ret <4 x double> %t
 }
 declare <4 x double> @llvm.fabs.v4f64(<4 x double> %p)
 
-define <8 x float> @fabs_v8f32(<8 x float> %p)
-{
-  ; CHECK-LABEL: fabs_v8f32
-  ; CHECK: vandps
+define <8 x float> @fabs_v8f32(<8 x float> %p) {
+; X32-LABEL: fabs_v8f32:
+; X32:       # BB#0:
+; X32-NEXT:    vandps .LCPI3_0, %ymm0, %ymm0
+; X32-NEXT:    retl
+;
+; X64-LABEL: fabs_v8f32:
+; X64:       # BB#0:
+; X64-NEXT:    vandps {{.*}}(%rip), %ymm0, %ymm0
+; X64-NEXT:    retq
   %t = call <8 x float> @llvm.fabs.v8f32(<8 x float> %p)
   ret <8 x float> %t
 }
@@ -44,7 +71,7 @@ declare <8 x float> @llvm.fabs.v8f32(<8
 ; that has the sign bits turned off.
 ;
 ; So instead of something like this:
-;    movabsq (constant pool load of mask for sign bits) 
+;    movabsq (constant pool load of mask for sign bits)
 ;    vmovq   (move from integer register to vector/fp register)
 ;    vandps  (mask off sign bits)
 ;    vmovq   (move vector/fp register back to integer return register)
@@ -53,9 +80,16 @@ declare <8 x float> @llvm.fabs.v8f32(<8
 ;    mov     (put constant value in return register)
 
 define i64 @fabs_v2f32_1() {
-; CHECK-LABEL: fabs_v2f32_1:
-; CHECK: movabsq $9223372032559808512, %rax # imm = 0x7FFFFFFF00000000
-; CHECK-NEXT: retq
+; X32-LABEL: fabs_v2f32_1:
+; X32:       # BB#0:
+; X32-NEXT:    xorl %eax, %eax
+; X32-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
+; X32-NEXT:    retl
+;
+; X64-LABEL: fabs_v2f32_1:
+; X64:       # BB#0:
+; X64-NEXT:    movabsq $9223372032559808512, %rax # imm = 0x7FFFFFFF00000000
+; X64-NEXT:    retq
  %bitcast = bitcast i64 18446744069414584320 to <2 x float> ; 0xFFFF_FFFF_0000_0000
  %fabs = call <2 x float> @llvm.fabs.v2f32(<2 x float> %bitcast)
  %ret = bitcast <2 x float> %fabs to i64
@@ -63,9 +97,16 @@ define i64 @fabs_v2f32_1() {
 }
 
 define i64 @fabs_v2f32_2() {
-; CHECK-LABEL: fabs_v2f32_2:
-; CHECK: movl $2147483647, %eax       # imm = 0x7FFFFFFF
-; CHECK-NEXT: retq
+; X32-LABEL: fabs_v2f32_2:
+; X32:       # BB#0:
+; X32-NEXT:    movl $2147483647, %eax # imm = 0x7FFFFFFF
+; X32-NEXT:    xorl %edx, %edx
+; X32-NEXT:    retl
+;
+; X64-LABEL: fabs_v2f32_2:
+; X64:       # BB#0:
+; X64-NEXT:    movl $2147483647, %eax # imm = 0x7FFFFFFF
+; X64-NEXT:    retq
  %bitcast = bitcast i64 4294967295 to <2 x float> ; 0x0000_0000_FFFF_FFFF
  %fabs = call <2 x float> @llvm.fabs.v2f32(<2 x float> %bitcast)
  %ret = bitcast <2 x float> %fabs to i64

Modified: llvm/trunk/test/CodeGen/X86/vec_floor.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_floor.ll?rev=265186&r1=265185&r2=265186&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vec_floor.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vec_floor.ll Fri Apr  1 16:30:48 2016
@@ -1,181 +1,312 @@
-; RUN: llc < %s -mtriple=x86_64-apple-darwin -march=x86 -mcpu=corei7-avx | FileCheck %s
-
-
-define <2 x double> @floor_v2f64(<2 x double> %p)
-{
-  ; CHECK: floor_v2f64
-  ; CHECK: vroundpd
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE41
+; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx | FileCheck %s --check-prefix=AVX
+
+define <2 x double> @floor_v2f64(<2 x double> %p) {
+; SSE41-LABEL: floor_v2f64:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundpd $9, %xmm0, %xmm0
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: floor_v2f64:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundpd $9, %xmm0, %xmm0
+; AVX-NEXT:    retq
   %t = call <2 x double> @llvm.floor.v2f64(<2 x double> %p)
   ret <2 x double> %t
 }
 declare <2 x double> @llvm.floor.v2f64(<2 x double> %p)
 
-define <4 x float> @floor_v4f32(<4 x float> %p)
-{
-  ; CHECK: floor_v4f32
-  ; CHECK: vroundps
+define <4 x float> @floor_v4f32(<4 x float> %p) {
+; SSE41-LABEL: floor_v4f32:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundps $9, %xmm0, %xmm0
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: floor_v4f32:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundps $9, %xmm0, %xmm0
+; AVX-NEXT:    retq
   %t = call <4 x float> @llvm.floor.v4f32(<4 x float> %p)
   ret <4 x float> %t
 }
 declare <4 x float> @llvm.floor.v4f32(<4 x float> %p)
 
-define <4 x double> @floor_v4f64(<4 x double> %p)
-{
-  ; CHECK: floor_v4f64
-  ; CHECK: vroundpd
+define <4 x double> @floor_v4f64(<4 x double> %p){
+; SSE41-LABEL: floor_v4f64:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundpd $9, %xmm0, %xmm0
+; SSE41-NEXT:    roundpd $9, %xmm1, %xmm1
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: floor_v4f64:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundpd $9, %ymm0, %ymm0
+; AVX-NEXT:    retq
   %t = call <4 x double> @llvm.floor.v4f64(<4 x double> %p)
   ret <4 x double> %t
 }
 declare <4 x double> @llvm.floor.v4f64(<4 x double> %p)
 
-define <8 x float> @floor_v8f32(<8 x float> %p)
-{
-  ; CHECK: floor_v8f32
-  ; CHECK: vroundps
+define <8 x float> @floor_v8f32(<8 x float> %p) {
+; SSE41-LABEL: floor_v8f32:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundps $9, %xmm0, %xmm0
+; SSE41-NEXT:    roundps $9, %xmm1, %xmm1
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: floor_v8f32:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundps $9, %ymm0, %ymm0
+; AVX-NEXT:    retq
   %t = call <8 x float> @llvm.floor.v8f32(<8 x float> %p)
   ret <8 x float> %t
 }
 declare <8 x float> @llvm.floor.v8f32(<8 x float> %p)
 
-define <2 x double> @ceil_v2f64(<2 x double> %p)
-{
-  ; CHECK: ceil_v2f64
-  ; CHECK: vroundpd
+define <2 x double> @ceil_v2f64(<2 x double> %p) {
+; SSE41-LABEL: ceil_v2f64:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundpd $10, %xmm0, %xmm0
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: ceil_v2f64:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundpd $10, %xmm0, %xmm0
+; AVX-NEXT:    retq
   %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> %p)
   ret <2 x double> %t
 }
 declare <2 x double> @llvm.ceil.v2f64(<2 x double> %p)
 
-define <4 x float> @ceil_v4f32(<4 x float> %p)
-{
-  ; CHECK: ceil_v4f32
-  ; CHECK: vroundps
+define <4 x float> @ceil_v4f32(<4 x float> %p) {
+; SSE41-LABEL: ceil_v4f32:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundps $10, %xmm0, %xmm0
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: ceil_v4f32:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundps $10, %xmm0, %xmm0
+; AVX-NEXT:    retq
   %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %p)
   ret <4 x float> %t
 }
 declare <4 x float> @llvm.ceil.v4f32(<4 x float> %p)
 
-define <4 x double> @ceil_v4f64(<4 x double> %p)
-{
-  ; CHECK: ceil_v4f64
-  ; CHECK: vroundpd
+define <4 x double> @ceil_v4f64(<4 x double> %p) {
+; SSE41-LABEL: ceil_v4f64:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundpd $10, %xmm0, %xmm0
+; SSE41-NEXT:    roundpd $10, %xmm1, %xmm1
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: ceil_v4f64:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundpd $10, %ymm0, %ymm0
+; AVX-NEXT:    retq
   %t = call <4 x double> @llvm.ceil.v4f64(<4 x double> %p)
   ret <4 x double> %t
 }
 declare <4 x double> @llvm.ceil.v4f64(<4 x double> %p)
 
-define <8 x float> @ceil_v8f32(<8 x float> %p)
-{
-  ; CHECK: ceil_v8f32
-  ; CHECK: vroundps
+define <8 x float> @ceil_v8f32(<8 x float> %p) {
+; SSE41-LABEL: ceil_v8f32:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundps $10, %xmm0, %xmm0
+; SSE41-NEXT:    roundps $10, %xmm1, %xmm1
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: ceil_v8f32:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundps $10, %ymm0, %ymm0
+; AVX-NEXT:    retq
   %t = call <8 x float> @llvm.ceil.v8f32(<8 x float> %p)
   ret <8 x float> %t
 }
 declare <8 x float> @llvm.ceil.v8f32(<8 x float> %p)
 
-define <2 x double> @trunc_v2f64(<2 x double> %p)
-{
-  ; CHECK: trunc_v2f64
-  ; CHECK: vroundpd
+define <2 x double> @trunc_v2f64(<2 x double> %p) {
+; SSE41-LABEL: trunc_v2f64:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundpd $11, %xmm0, %xmm0
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: trunc_v2f64:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundpd $11, %xmm0, %xmm0
+; AVX-NEXT:    retq
   %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> %p)
   ret <2 x double> %t
 }
 declare <2 x double> @llvm.trunc.v2f64(<2 x double> %p)
 
-define <4 x float> @trunc_v4f32(<4 x float> %p)
-{
-  ; CHECK: trunc_v4f32
-  ; CHECK: vroundps
+define <4 x float> @trunc_v4f32(<4 x float> %p) {
+; SSE41-LABEL: trunc_v4f32:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundps $11, %xmm0, %xmm0
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: trunc_v4f32:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundps $11, %xmm0, %xmm0
+; AVX-NEXT:    retq
   %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> %p)
   ret <4 x float> %t
 }
 declare <4 x float> @llvm.trunc.v4f32(<4 x float> %p)
 
-define <4 x double> @trunc_v4f64(<4 x double> %p)
-{
-  ; CHECK: trunc_v4f64
-  ; CHECK: vroundpd
+define <4 x double> @trunc_v4f64(<4 x double> %p) {
+; SSE41-LABEL: trunc_v4f64:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundpd $11, %xmm0, %xmm0
+; SSE41-NEXT:    roundpd $11, %xmm1, %xmm1
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: trunc_v4f64:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundpd $11, %ymm0, %ymm0
+; AVX-NEXT:    retq
   %t = call <4 x double> @llvm.trunc.v4f64(<4 x double> %p)
   ret <4 x double> %t
 }
 declare <4 x double> @llvm.trunc.v4f64(<4 x double> %p)
 
-define <8 x float> @trunc_v8f32(<8 x float> %p)
-{
-  ; CHECK: trunc_v8f32
-  ; CHECK: vroundps
+define <8 x float> @trunc_v8f32(<8 x float> %p) {
+; SSE41-LABEL: trunc_v8f32:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundps $11, %xmm0, %xmm0
+; SSE41-NEXT:    roundps $11, %xmm1, %xmm1
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: trunc_v8f32:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundps $11, %ymm0, %ymm0
+; AVX-NEXT:    retq
   %t = call <8 x float> @llvm.trunc.v8f32(<8 x float> %p)
   ret <8 x float> %t
 }
 declare <8 x float> @llvm.trunc.v8f32(<8 x float> %p)
 
-define <2 x double> @rint_v2f64(<2 x double> %p)
-{
-  ; CHECK: rint_v2f64
-  ; CHECK: vroundpd
+define <2 x double> @rint_v2f64(<2 x double> %p) {
+; SSE41-LABEL: rint_v2f64:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundpd $4, %xmm0, %xmm0
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: rint_v2f64:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundpd $4, %xmm0, %xmm0
+; AVX-NEXT:    retq
   %t = call <2 x double> @llvm.rint.v2f64(<2 x double> %p)
   ret <2 x double> %t
 }
 declare <2 x double> @llvm.rint.v2f64(<2 x double> %p)
 
-define <4 x float> @rint_v4f32(<4 x float> %p)
-{
-  ; CHECK: rint_v4f32
-  ; CHECK: vroundps
+define <4 x float> @rint_v4f32(<4 x float> %p) {
+; SSE41-LABEL: rint_v4f32:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundps $4, %xmm0, %xmm0
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: rint_v4f32:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundps $4, %xmm0, %xmm0
+; AVX-NEXT:    retq
   %t = call <4 x float> @llvm.rint.v4f32(<4 x float> %p)
   ret <4 x float> %t
 }
 declare <4 x float> @llvm.rint.v4f32(<4 x float> %p)
 
-define <4 x double> @rint_v4f64(<4 x double> %p)
-{
-  ; CHECK: rint_v4f64
-  ; CHECK: vroundpd
+define <4 x double> @rint_v4f64(<4 x double> %p) {
+; SSE41-LABEL: rint_v4f64:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundpd $4, %xmm0, %xmm0
+; SSE41-NEXT:    roundpd $4, %xmm1, %xmm1
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: rint_v4f64:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundpd $4, %ymm0, %ymm0
+; AVX-NEXT:    retq
   %t = call <4 x double> @llvm.rint.v4f64(<4 x double> %p)
   ret <4 x double> %t
 }
 declare <4 x double> @llvm.rint.v4f64(<4 x double> %p)
 
-define <8 x float> @rint_v8f32(<8 x float> %p)
-{
-  ; CHECK: rint_v8f32
-  ; CHECK: vroundps
+define <8 x float> @rint_v8f32(<8 x float> %p) {
+; SSE41-LABEL: rint_v8f32:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundps $4, %xmm0, %xmm0
+; SSE41-NEXT:    roundps $4, %xmm1, %xmm1
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: rint_v8f32:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundps $4, %ymm0, %ymm0
+; AVX-NEXT:    retq
   %t = call <8 x float> @llvm.rint.v8f32(<8 x float> %p)
   ret <8 x float> %t
 }
 declare <8 x float> @llvm.rint.v8f32(<8 x float> %p)
 
-define <2 x double> @nearbyint_v2f64(<2 x double> %p)
-{
-  ; CHECK: nearbyint_v2f64
-  ; CHECK: vroundpd
+define <2 x double> @nearbyint_v2f64(<2 x double> %p) {
+; SSE41-LABEL: nearbyint_v2f64:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundpd $12, %xmm0, %xmm0
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: nearbyint_v2f64:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundpd $12, %xmm0, %xmm0
+; AVX-NEXT:    retq
   %t = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)
   ret <2 x double> %t
 }
 declare <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)
 
-define <4 x float> @nearbyint_v4f32(<4 x float> %p)
-{
-  ; CHECK: nearbyint_v4f32
-  ; CHECK: vroundps
+define <4 x float> @nearbyint_v4f32(<4 x float> %p) {
+; SSE41-LABEL: nearbyint_v4f32:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundps $12, %xmm0, %xmm0
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: nearbyint_v4f32:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundps $12, %xmm0, %xmm0
+; AVX-NEXT:    retq
   %t = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)
   ret <4 x float> %t
 }
 declare <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)
 
-define <4 x double> @nearbyint_v4f64(<4 x double> %p)
-{
-  ; CHECK: nearbyint_v4f64
-  ; CHECK: vroundpd
+define <4 x double> @nearbyint_v4f64(<4 x double> %p) {
+; SSE41-LABEL: nearbyint_v4f64:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundpd $12, %xmm0, %xmm0
+; SSE41-NEXT:    roundpd $12, %xmm1, %xmm1
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: nearbyint_v4f64:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundpd $12, %ymm0, %ymm0
+; AVX-NEXT:    retq
   %t = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)
   ret <4 x double> %t
 }
 declare <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)
 
-define <8 x float> @nearbyint_v8f32(<8 x float> %p)
-{
-  ; CHECK: nearbyint_v8f32
-  ; CHECK: vroundps
+define <8 x float> @nearbyint_v8f32(<8 x float> %p) {
+; SSE41-LABEL: nearbyint_v8f32:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    roundps $12, %xmm0, %xmm0
+; SSE41-NEXT:    roundps $12, %xmm1, %xmm1
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: nearbyint_v8f32:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vroundps $12, %ymm0, %ymm0
+; AVX-NEXT:    retq
   %t = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)
   ret <8 x float> %t
 }
@@ -186,43 +317,85 @@ declare <8 x float> @llvm.nearbyint.v8f3
 ;
 
 define <2 x double> @const_floor_v2f64() {
-  ; CHECK: const_floor_v2f64
-  ; CHECK: movaps {{.*#+}} xmm0 = [-2.000000e+00,2.000000e+00]
+; SSE41-LABEL: const_floor_v2f64:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [-2.000000e+00,2.000000e+00]
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: const_floor_v2f64:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [-2.000000e+00,2.000000e+00]
+; AVX-NEXT:    retq
   %t = call <2 x double> @llvm.floor.v2f64(<2 x double> <double -1.5, double 2.5>)
   ret <2 x double> %t
 }
 
 define <4 x float> @const_floor_v4f32() {
-  ; CHECK: const_floor_v4f32
-  ; CHECK: movaps {{.*#+}} xmm0 = [-4.000000e+00,6.000000e+00,-9.000000e+00,2.000000e+00]
+; SSE41-LABEL: const_floor_v4f32:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [-4.000000e+00,6.000000e+00,-9.000000e+00,2.000000e+00]
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: const_floor_v4f32:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [-4.000000e+00,6.000000e+00,-9.000000e+00,2.000000e+00]
+; AVX-NEXT:    retq
   %t = call <4 x float> @llvm.floor.v4f32(<4 x float> <float -3.5, float 6.0, float -9.0, float 2.5>)
   ret <4 x float> %t
 }
 
 define <2 x double> @const_ceil_v2f64() {
-  ; CHECK: const_ceil_v2f64
-  ; CHECK: movaps {{.*#+}} xmm0 = [-1.000000e+00,3.000000e+00]
+; SSE41-LABEL: const_ceil_v2f64:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [-1.000000e+00,3.000000e+00]
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: const_ceil_v2f64:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [-1.000000e+00,3.000000e+00]
+; AVX-NEXT:    retq
   %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> <double -1.5, double 2.5>)
   ret <2 x double> %t
 }
 
 define <4 x float> @const_ceil_v4f32() {
-  ; CHECK: const_ceil_v4f32
-  ; CHECK: movaps {{.*#+}} xmm0 = [-3.000000e+00,6.000000e+00,-9.000000e+00,3.000000e+00]
+; SSE41-LABEL: const_ceil_v4f32:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [-3.000000e+00,6.000000e+00,-9.000000e+00,3.000000e+00]
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: const_ceil_v4f32:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [-3.000000e+00,6.000000e+00,-9.000000e+00,3.000000e+00]
+; AVX-NEXT:    retq
   %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> <float -3.5, float 6.0, float -9.0, float 2.5>)
   ret <4 x float> %t
 }
 
 define <2 x double> @const_trunc_v2f64() {
-  ; CHECK: const_trunc_v2f64
-  ; CHECK: movaps {{.*#+}} xmm0 = [-1.000000e+00,2.000000e+00]
+; SSE41-LABEL: const_trunc_v2f64:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [-1.000000e+00,2.000000e+00]
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: const_trunc_v2f64:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [-1.000000e+00,2.000000e+00]
+; AVX-NEXT:    retq
   %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> <double -1.5, double 2.5>)
   ret <2 x double> %t
 }
 
 define <4 x float> @const_trunc_v4f32() {
-  ; CHECK: const_trunc_v4f32
-  ; CHECK: movaps {{.*#+}} xmm0 = [-3.000000e+00,6.000000e+00,-9.000000e+00,2.000000e+00]
+; SSE41-LABEL: const_trunc_v4f32:
+; SSE41:       ## BB#0:
+; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [-3.000000e+00,6.000000e+00,-9.000000e+00,2.000000e+00]
+; SSE41-NEXT:    retq
+;
+; AVX-LABEL: const_trunc_v4f32:
+; AVX:       ## BB#0:
+; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [-3.000000e+00,6.000000e+00,-9.000000e+00,2.000000e+00]
+; AVX-NEXT:    retq
   %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> <float -3.5, float 6.0, float -9.0, float 2.5>)
   ret <4 x float> %t
 }

Modified: llvm/trunk/test/CodeGen/X86/vec_fneg.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_fneg.ll?rev=265186&r1=265185&r2=265186&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vec_fneg.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vec_fneg.ll Fri Apr  1 16:30:48 2016
@@ -1,25 +1,43 @@
-; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=sse | FileCheck %s
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse  | FileCheck %s --check-prefix=X32-SSE --check-prefix=X32-SSE1
+; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X32-SSE --check-prefix=X32-SSE2
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=-sse2 | FileCheck %s --check-prefix=X64-SSE --check-prefix=X64-SSE1
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X64-SSE --check-prefix=X64-SSE2
 
 ; FNEG is defined as subtraction from -0.0.
 
 ; This test verifies that we use an xor with a constant to flip the sign bits; no subtraction needed.
-define <4 x float> @t1(<4 x float> %Q) {
-; CHECK-LABEL: t1:
-; CHECK: xorps	{{.*}}LCPI0_0{{.*}}, %xmm0
-; CHECK-NEXT: retq
-        %tmp = fsub <4 x float> < float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00 >, %Q
-	ret <4 x float> %tmp
+define <4 x float> @t1(<4 x float> %Q) nounwind {
+; X32-SSE-LABEL: t1:
+; X32-SSE:       # BB#0:
+; X32-SSE-NEXT:    xorps .LCPI0_0, %xmm0
+; X32-SSE-NEXT:    retl
+;
+; X64-SSE-LABEL: t1:
+; X64-SSE:       # BB#0:
+; X64-SSE-NEXT:    xorps {{.*}}(%rip), %xmm0
+; X64-SSE-NEXT:    retq
+  %tmp = fsub <4 x float> < float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00 >, %Q
+  ret <4 x float> %tmp
 }
 
 ; This test verifies that we generate an FP subtraction because "0.0 - x" is not an fneg.
-define <4 x float> @t2(<4 x float> %Q) {
-; CHECK-LABEL: t2:
-; CHECK: xorps	%[[X:xmm[0-9]+]], %[[X]]
-; CHECK-NEXT: subps	%xmm0, %[[X]]
-; CHECK-NEXT: movaps	%[[X]], %xmm0
-; CHECK-NEXT: retq
-        %tmp = fsub <4 x float> zeroinitializer, %Q
-	ret <4 x float> %tmp
+define <4 x float> @t2(<4 x float> %Q) nounwind {
+; X32-SSE-LABEL: t2:
+; X32-SSE:       # BB#0:
+; X32-SSE-NEXT:    xorps %xmm1, %xmm1
+; X32-SSE-NEXT:    subps %xmm0, %xmm1
+; X32-SSE-NEXT:    movaps %xmm1, %xmm0
+; X32-SSE-NEXT:    retl
+;
+; X64-SSE-LABEL: t2:
+; X64-SSE:       # BB#0:
+; X64-SSE-NEXT:    xorps %xmm1, %xmm1
+; X64-SSE-NEXT:    subps %xmm0, %xmm1
+; X64-SSE-NEXT:    movaps %xmm1, %xmm0
+; X64-SSE-NEXT:    retq
+  %tmp = fsub <4 x float> zeroinitializer, %Q
+  ret <4 x float> %tmp
 }
 
 ; If we're bitcasting an integer to an FP vector, we should avoid the FPU/vector unit entirely.
@@ -31,14 +49,51 @@ define <4 x float> @t2(<4 x float> %Q) {
 ; We should generate:
 ;    movabsq     (put sign bit mask in integer register))
 ;    xorq        (flip sign bits)
-;    movd        (move to xmm return register) 
+;    movd        (move to xmm return register)
 
-define <2 x float> @fneg_bitcast(i64 %i) {
-; CHECK-LABEL: fneg_bitcast:
-; CHECK:	movabsq	$-9223372034707292160, %rax # imm = 0x8000000080000000
-; CHECK-NEXT:	xorq	%rdi, %rax
-; CHECK-NEXT:	movd	%rax, %xmm0
-; CHECK-NEXT:	retq
+define <2 x float> @fneg_bitcast(i64 %i) nounwind {
+; X32-SSE1-LABEL: fneg_bitcast:
+; X32-SSE1:       # BB#0:
+; X32-SSE1-NEXT:    pushl %ebp
+; X32-SSE1-NEXT:    movl %esp, %ebp
+; X32-SSE1-NEXT:    andl $-16, %esp
+; X32-SSE1-NEXT:    subl $32, %esp
+; X32-SSE1-NEXT:    movl $-2147483648, %eax # imm = 0xFFFFFFFF80000000
+; X32-SSE1-NEXT:    movl 12(%ebp), %ecx
+; X32-SSE1-NEXT:    xorl %eax, %ecx
+; X32-SSE1-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
+; X32-SSE1-NEXT:    xorl 8(%ebp), %eax
+; X32-SSE1-NEXT:    movl %eax, (%esp)
+; X32-SSE1-NEXT:    movaps (%esp), %xmm0
+; X32-SSE1-NEXT:    movl %ebp, %esp
+; X32-SSE1-NEXT:    popl %ebp
+; X32-SSE1-NEXT:    retl
+;
+; X32-SSE2-LABEL: fneg_bitcast:
+; X32-SSE2:       # BB#0:
+; X32-SSE2-NEXT:    movl $-2147483648, %eax # imm = 0xFFFFFFFF80000000
+; X32-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; X32-SSE2-NEXT:    xorl %eax, %ecx
+; X32-SSE2-NEXT:    xorl {{[0-9]+}}(%esp), %eax
+; X32-SSE2-NEXT:    movd %eax, %xmm1
+; X32-SSE2-NEXT:    movd %ecx, %xmm0
+; X32-SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
+; X32-SSE2-NEXT:    retl
+;
+; X64-SSE1-LABEL: fneg_bitcast:
+; X64-SSE1:       # BB#0:
+; X64-SSE1-NEXT:    movabsq $-9223372034707292160, %rax # imm = 0x8000000080000000
+; X64-SSE1-NEXT:    xorq %rdi, %rax
+; X64-SSE1-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
+; X64-SSE1-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm0
+; X64-SSE1-NEXT:    retq
+;
+; X64-SSE2-LABEL: fneg_bitcast:
+; X64-SSE2:       # BB#0:
+; X64-SSE2-NEXT:    movabsq $-9223372034707292160, %rax # imm = 0x8000000080000000
+; X64-SSE2-NEXT:    xorq %rdi, %rax
+; X64-SSE2-NEXT:    movd %rax, %xmm0
+; X64-SSE2-NEXT:    retq
   %bitcast = bitcast i64 %i to <2 x float>
   %fneg = fsub <2 x float> <float -0.0, float -0.0>, %bitcast
   ret <2 x float> %fneg

Modified: llvm/trunk/test/CodeGen/X86/vec_fpext.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vec_fpext.ll?rev=265186&r1=265185&r2=265186&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vec_fpext.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vec_fpext.ll Fri Apr  1 16:30:48 2016
@@ -1,24 +1,38 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc < %s -mtriple=i686-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE
-; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX
+; RUN: llc < %s -mtriple=i686-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=X32-SSE
+; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx | FileCheck %s --check-prefix=X32-AVX
+; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=X64-SSE
+; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx | FileCheck %s --check-prefix=X64-AVX
 
 ; PR11674
 define void @fpext_frommem(<2 x float>* %in, <2 x double>* %out) {
-; SSE-LABEL: fpext_frommem:
-; SSE:       # BB#0: # %entry
-; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; SSE-NEXT:    cvtps2pd (%ecx), %xmm0
-; SSE-NEXT:    movups %xmm0, (%eax)
-; SSE-NEXT:    retl
-;
-; AVX-LABEL: fpext_frommem:
-; AVX:       # BB#0: # %entry
-; AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; AVX-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; AVX-NEXT:    vcvtps2pd (%ecx), %xmm0
-; AVX-NEXT:    vmovups %xmm0, (%eax)
-; AVX-NEXT:    retl
+; X32-SSE-LABEL: fpext_frommem:
+; X32-SSE:       # BB#0: # %entry
+; X32-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X32-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; X32-SSE-NEXT:    cvtps2pd (%ecx), %xmm0
+; X32-SSE-NEXT:    movups %xmm0, (%eax)
+; X32-SSE-NEXT:    retl
+;
+; X32-AVX-LABEL: fpext_frommem:
+; X32-AVX:       # BB#0: # %entry
+; X32-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X32-AVX-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; X32-AVX-NEXT:    vcvtps2pd (%ecx), %xmm0
+; X32-AVX-NEXT:    vmovups %xmm0, (%eax)
+; X32-AVX-NEXT:    retl
+;
+; X64-SSE-LABEL: fpext_frommem:
+; X64-SSE:       # BB#0: # %entry
+; X64-SSE-NEXT:    cvtps2pd (%rdi), %xmm0
+; X64-SSE-NEXT:    movups %xmm0, (%rsi)
+; X64-SSE-NEXT:    retq
+;
+; X64-AVX-LABEL: fpext_frommem:
+; X64-AVX:       # BB#0: # %entry
+; X64-AVX-NEXT:    vcvtps2pd (%rdi), %xmm0
+; X64-AVX-NEXT:    vmovups %xmm0, (%rsi)
+; X64-AVX-NEXT:    retq
 entry:
   %0 = load <2 x float>, <2 x float>* %in, align 8
   %1 = fpext <2 x float> %0 to <2 x double>
@@ -27,24 +41,39 @@ entry:
 }
 
 define void @fpext_frommem4(<4 x float>* %in, <4 x double>* %out) {
-; SSE-LABEL: fpext_frommem4:
-; SSE:       # BB#0: # %entry
-; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; SSE-NEXT:    cvtps2pd (%ecx), %xmm0
-; SSE-NEXT:    cvtps2pd 8(%ecx), %xmm1
-; SSE-NEXT:    movups %xmm1, 16(%eax)
-; SSE-NEXT:    movups %xmm0, (%eax)
-; SSE-NEXT:    retl
-;
-; AVX-LABEL: fpext_frommem4:
-; AVX:       # BB#0: # %entry
-; AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; AVX-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; AVX-NEXT:    vcvtps2pd (%ecx), %ymm0
-; AVX-NEXT:    vmovups %ymm0, (%eax)
-; AVX-NEXT:    vzeroupper
-; AVX-NEXT:    retl
+; X32-SSE-LABEL: fpext_frommem4:
+; X32-SSE:       # BB#0: # %entry
+; X32-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X32-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; X32-SSE-NEXT:    cvtps2pd (%ecx), %xmm0
+; X32-SSE-NEXT:    cvtps2pd 8(%ecx), %xmm1
+; X32-SSE-NEXT:    movups %xmm1, 16(%eax)
+; X32-SSE-NEXT:    movups %xmm0, (%eax)
+; X32-SSE-NEXT:    retl
+;
+; X32-AVX-LABEL: fpext_frommem4:
+; X32-AVX:       # BB#0: # %entry
+; X32-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X32-AVX-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; X32-AVX-NEXT:    vcvtps2pd (%ecx), %ymm0
+; X32-AVX-NEXT:    vmovups %ymm0, (%eax)
+; X32-AVX-NEXT:    vzeroupper
+; X32-AVX-NEXT:    retl
+;
+; X64-SSE-LABEL: fpext_frommem4:
+; X64-SSE:       # BB#0: # %entry
+; X64-SSE-NEXT:    cvtps2pd (%rdi), %xmm0
+; X64-SSE-NEXT:    cvtps2pd 8(%rdi), %xmm1
+; X64-SSE-NEXT:    movups %xmm1, 16(%rsi)
+; X64-SSE-NEXT:    movups %xmm0, (%rsi)
+; X64-SSE-NEXT:    retq
+;
+; X64-AVX-LABEL: fpext_frommem4:
+; X64-AVX:       # BB#0: # %entry
+; X64-AVX-NEXT:    vcvtps2pd (%rdi), %ymm0
+; X64-AVX-NEXT:    vmovups %ymm0, (%rsi)
+; X64-AVX-NEXT:    vzeroupper
+; X64-AVX-NEXT:    retq
 entry:
   %0 = load <4 x float>, <4 x float>* %in
   %1 = fpext <4 x float> %0 to <4 x double>
@@ -53,30 +82,51 @@ entry:
 }
 
 define void @fpext_frommem8(<8 x float>* %in, <8 x double>* %out) {
-; SSE-LABEL: fpext_frommem8:
-; SSE:       # BB#0: # %entry
-; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; SSE-NEXT:    cvtps2pd (%ecx), %xmm0
-; SSE-NEXT:    cvtps2pd 8(%ecx), %xmm1
-; SSE-NEXT:    cvtps2pd 16(%ecx), %xmm2
-; SSE-NEXT:    cvtps2pd 24(%ecx), %xmm3
-; SSE-NEXT:    movups %xmm3, 48(%eax)
-; SSE-NEXT:    movups %xmm2, 32(%eax)
-; SSE-NEXT:    movups %xmm1, 16(%eax)
-; SSE-NEXT:    movups %xmm0, (%eax)
-; SSE-NEXT:    retl
-;
-; AVX-LABEL: fpext_frommem8:
-; AVX:       # BB#0: # %entry
-; AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; AVX-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; AVX-NEXT:    vcvtps2pd (%ecx), %ymm0
-; AVX-NEXT:    vcvtps2pd 16(%ecx), %ymm1
-; AVX-NEXT:    vmovups %ymm1, 32(%eax)
-; AVX-NEXT:    vmovups %ymm0, (%eax)
-; AVX-NEXT:    vzeroupper
-; AVX-NEXT:    retl
+; X32-SSE-LABEL: fpext_frommem8:
+; X32-SSE:       # BB#0: # %entry
+; X32-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X32-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; X32-SSE-NEXT:    cvtps2pd (%ecx), %xmm0
+; X32-SSE-NEXT:    cvtps2pd 8(%ecx), %xmm1
+; X32-SSE-NEXT:    cvtps2pd 16(%ecx), %xmm2
+; X32-SSE-NEXT:    cvtps2pd 24(%ecx), %xmm3
+; X32-SSE-NEXT:    movups %xmm3, 48(%eax)
+; X32-SSE-NEXT:    movups %xmm2, 32(%eax)
+; X32-SSE-NEXT:    movups %xmm1, 16(%eax)
+; X32-SSE-NEXT:    movups %xmm0, (%eax)
+; X32-SSE-NEXT:    retl
+;
+; X32-AVX-LABEL: fpext_frommem8:
+; X32-AVX:       # BB#0: # %entry
+; X32-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X32-AVX-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; X32-AVX-NEXT:    vcvtps2pd (%ecx), %ymm0
+; X32-AVX-NEXT:    vcvtps2pd 16(%ecx), %ymm1
+; X32-AVX-NEXT:    vmovups %ymm1, 32(%eax)
+; X32-AVX-NEXT:    vmovups %ymm0, (%eax)
+; X32-AVX-NEXT:    vzeroupper
+; X32-AVX-NEXT:    retl
+;
+; X64-SSE-LABEL: fpext_frommem8:
+; X64-SSE:       # BB#0: # %entry
+; X64-SSE-NEXT:    cvtps2pd (%rdi), %xmm0
+; X64-SSE-NEXT:    cvtps2pd 8(%rdi), %xmm1
+; X64-SSE-NEXT:    cvtps2pd 16(%rdi), %xmm2
+; X64-SSE-NEXT:    cvtps2pd 24(%rdi), %xmm3
+; X64-SSE-NEXT:    movups %xmm3, 48(%rsi)
+; X64-SSE-NEXT:    movups %xmm2, 32(%rsi)
+; X64-SSE-NEXT:    movups %xmm1, 16(%rsi)
+; X64-SSE-NEXT:    movups %xmm0, (%rsi)
+; X64-SSE-NEXT:    retq
+;
+; X64-AVX-LABEL: fpext_frommem8:
+; X64-AVX:       # BB#0: # %entry
+; X64-AVX-NEXT:    vcvtps2pd (%rdi), %ymm0
+; X64-AVX-NEXT:    vcvtps2pd 16(%rdi), %ymm1
+; X64-AVX-NEXT:    vmovups %ymm1, 32(%rsi)
+; X64-AVX-NEXT:    vmovups %ymm0, (%rsi)
+; X64-AVX-NEXT:    vzeroupper
+; X64-AVX-NEXT:    retq
 entry:
   %0 = load <8 x float>, <8 x float>* %in
   %1 = fpext <8 x float> %0 to <8 x double>
@@ -85,15 +135,25 @@ entry:
 }
 
 define <2 x double> @fpext_fromconst() {
-; SSE-LABEL: fpext_fromconst:
-; SSE:       # BB#0: # %entry
-; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1.000000e+00,-2.000000e+00]
-; SSE-NEXT:    retl
-;
-; AVX-LABEL: fpext_fromconst:
-; AVX:       # BB#0: # %entry
-; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [1.000000e+00,-2.000000e+00]
-; AVX-NEXT:    retl
+; X32-SSE-LABEL: fpext_fromconst:
+; X32-SSE:       # BB#0: # %entry
+; X32-SSE-NEXT:    movaps {{.*#+}} xmm0 = [1.000000e+00,-2.000000e+00]
+; X32-SSE-NEXT:    retl
+;
+; X32-AVX-LABEL: fpext_fromconst:
+; X32-AVX:       # BB#0: # %entry
+; X32-AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [1.000000e+00,-2.000000e+00]
+; X32-AVX-NEXT:    retl
+;
+; X64-SSE-LABEL: fpext_fromconst:
+; X64-SSE:       # BB#0: # %entry
+; X64-SSE-NEXT:    movaps {{.*#+}} xmm0 = [1.000000e+00,-2.000000e+00]
+; X64-SSE-NEXT:    retq
+;
+; X64-AVX-LABEL: fpext_fromconst:
+; X64-AVX:       # BB#0: # %entry
+; X64-AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [1.000000e+00,-2.000000e+00]
+; X64-AVX-NEXT:    retq
 entry:
   %0  = insertelement <2 x float> undef, float 1.0, i32 0
   %1  = insertelement <2 x float> %0, float -2.0, i32 1




More information about the llvm-commits mailing list