4b801b791d62db8e5a4f3c8d09a26715d10825fa
[oota-llvm.git] / test / CodeGen / PowerPC / copysignl.ll
1 ; RUN: llc -mcpu=pwr7 -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s
2 target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64"
3 target triple = "powerpc64-unknown-linux-gnu"
4
5 define double @foo_d_ll(ppc_fp128 %a, ppc_fp128 %b) #0 {
6 entry:
7   %call = tail call ppc_fp128 @copysignl(ppc_fp128 %a, ppc_fp128 %b) #0
8   %conv = fptrunc ppc_fp128 %call to double
9   ret double %conv
10
11 ; CHECK-LABEL: @foo_d_ll
12 ; CHECK: fcpsgn 1, 3, 1
13 ; CHECK: blr
14 }
15
16 declare ppc_fp128 @copysignl(ppc_fp128, ppc_fp128) #0
17
18 define double @foo_dl(double %a, ppc_fp128 %b) #0 {
19 entry:
20   %conv = fptrunc ppc_fp128 %b to double
21   %call = tail call double @copysign(double %a, double %conv) #0
22   ret double %call
23
24 ; CHECK-LABEL: @foo_dl
25 ; CHECK: fcpsgn 1, 2, 1
26 ; CHECK: blr
27 }
28
29 declare double @copysign(double, double) #0
30
31 define ppc_fp128 @foo_ll(double %a, ppc_fp128 %b) #0 {
32 entry:
33   %conv = fpext double %a to ppc_fp128
34   %call = tail call ppc_fp128 @copysignl(ppc_fp128 %conv, ppc_fp128 %b) #0
35   ret ppc_fp128 %call
36
37 ; CHECK-LABEL: @foo_ll
38 ; CHECK: bl copysignl
39 ; CHECK: blr
40 }
41
42 define ppc_fp128 @foo_ld(double %a, double %b) #0 {
43 entry:
44   %conv = fpext double %a to ppc_fp128
45   %conv1 = fpext double %b to ppc_fp128
46   %call = tail call ppc_fp128 @copysignl(ppc_fp128 %conv, ppc_fp128 %conv1) #0
47   ret ppc_fp128 %call
48
49 ; CHECK-LABEL: @foo_ld
50 ; CHECK: bl copysignl
51 ; CHECK: blr
52 }
53
54 define ppc_fp128 @foo_lf(double %a, float %b) #0 {
55 entry:
56   %conv = fpext double %a to ppc_fp128
57   %conv1 = fpext float %b to ppc_fp128
58   %call = tail call ppc_fp128 @copysignl(ppc_fp128 %conv, ppc_fp128 %conv1) #0
59   ret ppc_fp128 %call
60
61 ; CHECK-LABEL: @foo_lf
62 ; CHECK: bl copysignl
63 ; CHECK: blr
64 }
65
66 attributes #0 = { nounwind readnone }
67