xref: /minix3/external/bsd/llvm/dist/llvm/test/CodeGen/PowerPC/copysignl.ll (revision 433d6423c39e34ec4b79c950597bb2d236f886be)
1; RUN: llc -mcpu=pwr7 -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s
2target 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"
3target triple = "powerpc64-unknown-linux-gnu"
4
5define double @foo_d_ll(ppc_fp128 %a, ppc_fp128 %b) #0 {
6entry:
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
16declare ppc_fp128 @copysignl(ppc_fp128, ppc_fp128) #0
17
18define double @foo_dl(double %a, ppc_fp128 %b) #0 {
19entry:
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
29declare double @copysign(double, double) #0
30
31define ppc_fp128 @foo_ll(double %a, ppc_fp128 %b) #0 {
32entry:
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
42define ppc_fp128 @foo_ld(double %a, double %b) #0 {
43entry:
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
54define ppc_fp128 @foo_lf(double %a, float %b) #0 {
55entry:
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
66attributes #0 = { nounwind readnone }
67
68