2012-08-27 03:38:15 +00:00
|
|
|
; RUN: llc < %s -mtriple=x86_64-pc-win32 -mcpu=core-avx2 | FileCheck %s
|
|
|
|
; RUN: llc < %s -mtriple=x86_64-pc-win32 -mattr=+fma,+fma4 | FileCheck %s
|
2012-08-27 06:59:01 +00:00
|
|
|
; RUN: llc < %s -mcpu=bdver2 -mtriple=x86_64-pc-win32 -mattr=-fma4 | FileCheck %s
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
define <4 x float> @test_x86_fmadd_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
|
2014-01-31 21:29:19 +00:00
|
|
|
; CHECK: fmadd213ss (%r8), %xmm
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <4 x float> @llvm.x86.fma.vfmadd.ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <4 x float> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <4 x float> @llvm.x86.fma.vfmadd.ss(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
define <4 x float> @test_x86_fmadd_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
|
2012-08-01 12:06:00 +00:00
|
|
|
; CHECK: fmadd213ps
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <4 x float> @llvm.x86.fma.vfmadd.ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <4 x float> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <4 x float> @llvm.x86.fma.vfmadd.ps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
define <8 x float> @test_x86_fmadd_ps_y(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) {
|
2012-08-01 12:06:00 +00:00
|
|
|
; CHECK: fmadd213ps {{.*\(%r.*}}, %ymm
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <8 x float> @llvm.x86.fma.vfmadd.ps.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <8 x float> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <8 x float> @llvm.x86.fma.vfmadd.ps.256(<8 x float>, <8 x float>, <8 x float>) nounwind readnone
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
define <4 x float> @test_x86_fnmadd_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
|
2014-01-31 21:29:19 +00:00
|
|
|
; CHECK: fnmadd213ss (%r8), %xmm
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <4 x float> @llvm.x86.fma.vfnmadd.ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <4 x float> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <4 x float> @llvm.x86.fma.vfnmadd.ss(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
define <4 x float> @test_x86_fnmadd_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
|
2012-08-01 12:06:00 +00:00
|
|
|
; CHECK: fnmadd213ps
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <4 x float> @llvm.x86.fma.vfnmadd.ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <4 x float> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <4 x float> @llvm.x86.fma.vfnmadd.ps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
define <8 x float> @test_x86_fnmadd_ps_y(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) {
|
2012-08-01 12:06:00 +00:00
|
|
|
; CHECK: fnmadd213ps {{.*\(%r.*}}, %ymm
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <8 x float> @llvm.x86.fma.vfnmadd.ps.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <8 x float> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <8 x float> @llvm.x86.fma.vfnmadd.ps.256(<8 x float>, <8 x float>, <8 x float>) nounwind readnone
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
|
|
|
|
define <4 x float> @test_x86_fmsub_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
|
2012-08-01 12:06:00 +00:00
|
|
|
; CHECK: fmsub213ss
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <4 x float> @llvm.x86.fma.vfmsub.ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <4 x float> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <4 x float> @llvm.x86.fma.vfmsub.ss(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
define <4 x float> @test_x86_fmsub_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
|
2012-08-01 12:06:00 +00:00
|
|
|
; CHECK: fmsub213ps
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <4 x float> @llvm.x86.fma.vfmsub.ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <4 x float> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <4 x float> @llvm.x86.fma.vfmsub.ps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
define <4 x float> @test_x86_fnmsub_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
|
2012-08-01 12:06:00 +00:00
|
|
|
; CHECK: fnmsub213ss
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <4 x float> @llvm.x86.fma.vfnmsub.ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <4 x float> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <4 x float> @llvm.x86.fma.vfnmsub.ss(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
define <4 x float> @test_x86_fnmsub_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
|
2012-08-01 12:06:00 +00:00
|
|
|
; CHECK: fnmsub213ps
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <4 x float> @llvm.x86.fma.vfnmsub.ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <4 x float> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <4 x float> @llvm.x86.fma.vfnmsub.ps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
;;;;
|
|
|
|
|
|
|
|
define <2 x double> @test_x86_fmadd_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) {
|
2012-08-01 12:06:00 +00:00
|
|
|
; CHECK: fmadd213sd
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <2 x double> @llvm.x86.fma.vfmadd.sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <2 x double> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <2 x double> @llvm.x86.fma.vfmadd.sd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
define <2 x double> @test_x86_fmadd_pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) {
|
2012-08-01 12:06:00 +00:00
|
|
|
; CHECK: fmadd213pd
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <2 x double> @llvm.x86.fma.vfmadd.pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <2 x double> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <2 x double> @llvm.x86.fma.vfmadd.pd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
define <2 x double> @test_x86_fnmadd_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) {
|
2012-08-01 12:06:00 +00:00
|
|
|
; CHECK: fnmadd213sd
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <2 x double> @llvm.x86.fma.vfnmadd.sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <2 x double> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <2 x double> @llvm.x86.fma.vfnmadd.sd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
define <2 x double> @test_x86_fnmadd_pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) {
|
2012-08-01 12:06:00 +00:00
|
|
|
; CHECK: fnmadd213pd
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <2 x double> @llvm.x86.fma.vfnmadd.pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <2 x double> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <2 x double> @llvm.x86.fma.vfnmadd.pd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
define <2 x double> @test_x86_fmsub_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) {
|
2012-08-01 12:06:00 +00:00
|
|
|
; CHECK: fmsub213sd
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <2 x double> @llvm.x86.fma.vfmsub.sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <2 x double> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <2 x double> @llvm.x86.fma.vfmsub.sd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
define <2 x double> @test_x86_fmsub_pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) {
|
2012-08-01 12:06:00 +00:00
|
|
|
; CHECK: fmsub213pd
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <2 x double> @llvm.x86.fma.vfmsub.pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <2 x double> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <2 x double> @llvm.x86.fma.vfmsub.pd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
define <2 x double> @test_x86_fnmsub_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) {
|
2012-08-01 12:06:00 +00:00
|
|
|
; CHECK: fnmsub213sd
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <2 x double> @llvm.x86.fma.vfnmsub.sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <2 x double> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <2 x double> @llvm.x86.fma.vfnmsub.sd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
|
2012-05-31 09:20:20 +00:00
|
|
|
|
|
|
|
define <2 x double> @test_x86_fnmsub_pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) {
|
2012-08-01 12:06:00 +00:00
|
|
|
; CHECK: fnmsub213pd
|
2012-06-03 07:26:46 +00:00
|
|
|
%res = call <2 x double> @llvm.x86.fma.vfnmsub.pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) nounwind
|
2012-05-31 09:20:20 +00:00
|
|
|
ret <2 x double> %res
|
|
|
|
}
|
2012-06-03 07:26:46 +00:00
|
|
|
declare <2 x double> @llvm.x86.fma.vfnmsub.pd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
|