blob: 094cbc7bdefc07ec4dfac3df6001278540deb409 [file] [log] [blame]
Evan Chengb1f49812009-12-22 17:47:23 +00001; RUN: llc < %s -march=x86-64 -mattr=+sse2 | FileCheck %s
Evan Cheng400073d2009-12-18 07:40:29 +00002
3define double @t1(float* nocapture %x) nounwind readonly ssp {
4entry:
Evan Chengb1f49812009-12-22 17:47:23 +00005; CHECK: t1:
6; CHECK: movss (%rdi), %xmm0
Benjamin Kramera2938e72010-06-26 20:05:06 +00007; CHECK: cvtss2sd %xmm0, %xmm0
Evan Cheng400073d2009-12-18 07:40:29 +00008
Evan Cheng400073d2009-12-18 07:40:29 +00009 %0 = load float* %x, align 4
10 %1 = fpext float %0 to double
11 ret double %1
12}
13
Evan Chengb1f49812009-12-22 17:47:23 +000014define float @t2(double* nocapture %x) nounwind readonly ssp optsize {
Evan Cheng400073d2009-12-18 07:40:29 +000015entry:
Evan Chengb1f49812009-12-22 17:47:23 +000016; CHECK: t2:
Benjamin Kramera2938e72010-06-26 20:05:06 +000017; CHECK: cvtsd2ss (%rdi), %xmm0
Evan Cheng400073d2009-12-18 07:40:29 +000018 %0 = load double* %x, align 8
19 %1 = fptrunc double %0 to float
20 ret float %1
21}
Dan Gohmancfbf0ed2010-07-12 20:46:04 +000022
23define float @squirtf(float* %x) nounwind {
24entry:
25; CHECK: squirtf:
26; CHECK: movss (%rdi), %xmm0
27; CHECK: sqrtss %xmm0, %xmm0
28 %z = load float* %x
29 %t = call float @llvm.sqrt.f32(float %z)
30 ret float %t
31}
32
33define double @squirt(double* %x) nounwind {
34entry:
35; CHECK: squirt:
36; CHECK: movsd (%rdi), %xmm0
37; CHECK: sqrtsd %xmm0, %xmm0
38 %z = load double* %x
39 %t = call double @llvm.sqrt.f64(double %z)
40 ret double %t
41}
42
43define float @squirtf_size(float* %x) nounwind optsize {
44entry:
45; CHECK: squirtf_size:
46; CHECK: sqrtss (%rdi), %xmm0
47 %z = load float* %x
48 %t = call float @llvm.sqrt.f32(float %z)
49 ret float %t
50}
51
52define double @squirt_size(double* %x) nounwind optsize {
53entry:
54; CHECK: squirt_size:
55; CHECK: sqrtsd (%rdi), %xmm0
56 %z = load double* %x
57 %t = call double @llvm.sqrt.f64(double %z)
58 ret double %t
59}
60
61declare float @llvm.sqrt.f32(float)
62declare double @llvm.sqrt.f64(double)