From 180d5cb8e1b2fb4d9fdba85669c972de4cf6b734 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Sun, 6 Dec 2015 18:05:12 +0000 Subject: [PATCH] [x86] add missing maxnum/minnum tests for 256-bit vectors Also, switch to x86-64 because once we can lower these to something more reasonable, there will be less noise in the checks. And add AVX runs because those will be different than SSE. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254879 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/X86/fmaxnum.ll | 58 +++++++++++++++++++++++++++------------------ test/CodeGen/X86/fminnum.ll | 50 +++++++++++++++++++++++--------------- 2 files changed, 66 insertions(+), 42 deletions(-) diff --git a/test/CodeGen/X86/fmaxnum.ll b/test/CodeGen/X86/fmaxnum.ll index 17bd3b9b45b..7aa087f92bd 100644 --- a/test/CodeGen/X86/fmaxnum.ll +++ b/test/CodeGen/X86/fmaxnum.ll @@ -1,4 +1,5 @@ -; RUN: llc -march=x86 -mtriple=i386-linux-gnu < %s | FileCheck %s +; RUN: llc -mtriple=x86_64-unknown-unknown -mattr=sse2 < %s | FileCheck %s +; RUN: llc -mtriple=x86_64-unknown-unknown -mattr=avx < %s | FileCheck %s declare float @fmaxf(float, float) declare double @fmax(double, double) @@ -10,86 +11,97 @@ declare x86_fp80 @llvm.maxnum.f80(x86_fp80, x86_fp80) declare <2 x float> @llvm.maxnum.v2f32(<2 x float>, <2 x float>) declare <4 x float> @llvm.maxnum.v4f32(<4 x float>, <4 x float>) declare <2 x double> @llvm.maxnum.v2f64(<2 x double>, <2 x double>) +declare <4 x double> @llvm.maxnum.v4f64(<4 x double>, <4 x double>) declare <8 x double> @llvm.maxnum.v8f64(<8 x double>, <8 x double>) ; CHECK-LABEL: @test_fmaxf -; CHECK: calll fmaxf +; CHECK: jmp fmaxf define float @test_fmaxf(float %x, float %y) { %z = call float @fmaxf(float %x, float %y) readnone ret float %z } ; CHECK-LABEL: @test_fmax -; CHECK: calll fmax +; CHECK: jmp fmax define double @test_fmax(double %x, double %y) { %z = call double @fmax(double %x, double %y) readnone ret double %z } ; CHECK-LABEL: @test_fmaxl -; CHECK: calll fmaxl +; CHECK: callq fmaxl define x86_fp80 @test_fmaxl(x86_fp80 %x, x86_fp80 %y) { %z = call x86_fp80 @fmaxl(x86_fp80 %x, x86_fp80 %y) readnone ret x86_fp80 %z } ; CHECK-LABEL: @test_intrinsic_fmaxf -; CHECK: calll fmaxf +; CHECK: jmp fmaxf define float @test_intrinsic_fmaxf(float %x, float %y) { %z = call float @llvm.maxnum.f32(float %x, float %y) readnone ret float %z } ; CHECK-LABEL: @test_intrinsic_fmax -; CHECK: calll fmax +; CHECK: jmp fmax define double @test_intrinsic_fmax(double %x, double %y) { %z = call double @llvm.maxnum.f64(double %x, double %y) readnone ret double %z } ; CHECK-LABEL: @test_intrinsic_fmaxl -; CHECK: calll fmaxl +; CHECK: callq fmaxl define x86_fp80 @test_intrinsic_fmaxl(x86_fp80 %x, x86_fp80 %y) { %z = call x86_fp80 @llvm.maxnum.f80(x86_fp80 %x, x86_fp80 %y) readnone ret x86_fp80 %z } ; CHECK-LABEL: @test_intrinsic_fmax_v2f32 -; CHECK: calll fmaxf -; CHECK: calll fmaxf +; CHECK: callq fmaxf +; CHECK: callq fmaxf define <2 x float> @test_intrinsic_fmax_v2f32(<2 x float> %x, <2 x float> %y) { %z = call <2 x float> @llvm.maxnum.v2f32(<2 x float> %x, <2 x float> %y) readnone ret <2 x float> %z } ; CHECK-LABEL: @test_intrinsic_fmax_v4f32 -; CHECK: calll fmaxf -; CHECK: calll fmaxf -; CHECK: calll fmaxf -; CHECK: calll fmaxf +; CHECK: callq fmaxf +; CHECK: callq fmaxf +; CHECK: callq fmaxf +; CHECK: callq fmaxf define <4 x float> @test_intrinsic_fmax_v4f32(<4 x float> %x, <4 x float> %y) { %z = call <4 x float> @llvm.maxnum.v4f32(<4 x float> %x, <4 x float> %y) readnone ret <4 x float> %z } ; CHECK-LABEL: @test_intrinsic_fmax_v2f64 -; CHECK: calll fmax -; CHECK: calll fmax +; CHECK: callq fmax +; CHECK: callq fmax define <2 x double> @test_intrinsic_fmax_v2f64(<2 x double> %x, <2 x double> %y) { %z = call <2 x double> @llvm.maxnum.v2f64(<2 x double> %x, <2 x double> %y) readnone ret <2 x double> %z } +; CHECK-LABEL: @test_intrinsic_fmax_v4f64 +; CHECK: callq fmax +; CHECK: callq fmax +; CHECK: callq fmax +; CHECK: callq fmax +define <4 x double> @test_intrinsic_fmax_v4f64(<4 x double> %x, <4 x double> %y) { + %z = call <4 x double> @llvm.maxnum.v4f64(<4 x double> %x, <4 x double> %y) readnone + ret <4 x double> %z +} + ; CHECK-LABEL: @test_intrinsic_fmax_v8f64 -; CHECK: calll fmax -; CHECK: calll fmax -; CHECK: calll fmax -; CHECK: calll fmax -; CHECK: calll fmax -; CHECK: calll fmax -; CHECK: calll fmax -; CHECK: calll fmax +; CHECK: callq fmax +; CHECK: callq fmax +; CHECK: callq fmax +; CHECK: callq fmax +; CHECK: callq fmax +; CHECK: callq fmax +; CHECK: callq fmax +; CHECK: callq fmax define <8 x double> @test_intrinsic_fmax_v8f64(<8 x double> %x, <8 x double> %y) { %z = call <8 x double> @llvm.maxnum.v8f64(<8 x double> %x, <8 x double> %y) readnone ret <8 x double> %z diff --git a/test/CodeGen/X86/fminnum.ll b/test/CodeGen/X86/fminnum.ll index 1e33cf4696a..e89ed32ad61 100644 --- a/test/CodeGen/X86/fminnum.ll +++ b/test/CodeGen/X86/fminnum.ll @@ -1,4 +1,5 @@ -; RUN: llc -march=x86 -mtriple=i386-linux-gnu -mattr=+sse,+sse2 < %s | FileCheck %s +; RUN: llc -mtriple=x86_64-unknown-unknown -mattr=sse2 < %s | FileCheck %s +; RUN: llc -mtriple=x86_64-unknown-unknown -mattr=avx < %s | FileCheck %s declare float @fminf(float, float) declare double @fmin(double, double) @@ -10,6 +11,7 @@ declare x86_fp80 @llvm.minnum.f80(x86_fp80, x86_fp80) declare <2 x float> @llvm.minnum.v2f32(<2 x float>, <2 x float>) declare <4 x float> @llvm.minnum.v4f32(<4 x float>, <4 x float>) declare <2 x double> @llvm.minnum.v2f64(<2 x double>, <2 x double>) +declare <4 x double> @llvm.minnum.v4f64(<4 x double>, <4 x double>) declare <8 x double> @llvm.minnum.v8f64(<8 x double>, <8 x double>) ; CHECK-LABEL: @test_fminf @@ -27,7 +29,7 @@ define double @test_fmin(double %x, double %y) { } ; CHECK-LABEL: @test_fminl -; CHECK: calll fminl +; CHECK: callq fminl define x86_fp80 @test_fminl(x86_fp80 %x, x86_fp80 %y) { %z = call x86_fp80 @fminl(x86_fp80 %x, x86_fp80 %y) readnone ret x86_fp80 %z @@ -48,47 +50,57 @@ define double @test_intrinsic_fmin(double %x, double %y) { } ; CHECK-LABEL: @test_intrinsic_fminl -; CHECK: calll fminl +; CHECK: callq fminl define x86_fp80 @test_intrinsic_fminl(x86_fp80 %x, x86_fp80 %y) { %z = call x86_fp80 @llvm.minnum.f80(x86_fp80 %x, x86_fp80 %y) readnone ret x86_fp80 %z } ; CHECK-LABEL: @test_intrinsic_fmin_v2f32 -; CHECK: calll fminf -; CHECK: calll fminf +; CHECK: callq fminf +; CHECK: callq fminf define <2 x float> @test_intrinsic_fmin_v2f32(<2 x float> %x, <2 x float> %y) { %z = call <2 x float> @llvm.minnum.v2f32(<2 x float> %x, <2 x float> %y) readnone ret <2 x float> %z } ; CHECK-LABEL: @test_intrinsic_fmin_v4f32 -; CHECK: calll fminf -; CHECK: calll fminf -; CHECK: calll fminf -; CHECK: calll fminf +; CHECK: callq fminf +; CHECK: callq fminf +; CHECK: callq fminf +; CHECK: callq fminf define <4 x float> @test_intrinsic_fmin_v4f32(<4 x float> %x, <4 x float> %y) { %z = call <4 x float> @llvm.minnum.v4f32(<4 x float> %x, <4 x float> %y) readnone ret <4 x float> %z } ; CHECK-LABEL: @test_intrinsic_fmin_v2f64 -; CHECK: calll fmin -; CHECK: calll fmin +; CHECK: callq fmin +; CHECK: callq fmin define <2 x double> @test_intrinsic_fmin_v2f64(<2 x double> %x, <2 x double> %y) { %z = call <2 x double> @llvm.minnum.v2f64(<2 x double> %x, <2 x double> %y) readnone ret <2 x double> %z } +; CHECK-LABEL: @test_intrinsic_fmin_v4f64 +; CHECK: callq fmin +; CHECK: callq fmin +; CHECK: callq fmin +; CHECK: callq fmin +define <4 x double> @test_intrinsic_fmin_v4f64(<4 x double> %x, <4 x double> %y) { + %z = call <4 x double> @llvm.minnum.v4f64(<4 x double> %x, <4 x double> %y) readnone + ret <4 x double> %z +} + ; CHECK-LABEL: @test_intrinsic_fmin_v8f64 -; CHECK: calll fmin -; CHECK: calll fmin -; CHECK: calll fmin -; CHECK: calll fmin -; CHECK: calll fmin -; CHECK: calll fmin -; CHECK: calll fmin -; CHECK: calll fmin +; CHECK: callq fmin +; CHECK: callq fmin +; CHECK: callq fmin +; CHECK: callq fmin +; CHECK: callq fmin +; CHECK: callq fmin +; CHECK: callq fmin +; CHECK: callq fmin define <8 x double> @test_intrinsic_fmin_v8f64(<8 x double> %x, <8 x double> %y) { %z = call <8 x double> @llvm.minnum.v8f64(<8 x double> %x, <8 x double> %y) readnone ret <8 x double> %z -- 2.11.0