xref: /aosp_15_r20/external/llvm/test/CodeGen/PowerPC/i64-to-float.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=a2 | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 -mattr=+vsx | FileCheck -check-prefix=CHECK-VSX %s
3*9880d681SAndroid Build Coastguard Workertarget 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"
4*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64-unknown-linux-gnu"
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workerdefine float @foo(i64 %a) nounwind {
7*9880d681SAndroid Build Coastguard Workerentry:
8*9880d681SAndroid Build Coastguard Worker  %x = sitofp i64 %a to float
9*9880d681SAndroid Build Coastguard Worker  ret float %x
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Worker; CHECK: @foo
12*9880d681SAndroid Build Coastguard Worker; CHECK: std 3,
13*9880d681SAndroid Build Coastguard Worker; CHECK: lfd [[REG:[0-9]+]],
14*9880d681SAndroid Build Coastguard Worker; CHECK: fcfids 1, [[REG]]
15*9880d681SAndroid Build Coastguard Worker; CHECK: blr
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: @foo
18*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: std 3,
19*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: lxsdx [[REG:[0-9]+]],
20*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: fcfids 1, [[REG]]
21*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: blr
22*9880d681SAndroid Build Coastguard Worker}
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerdefine double @goo(i64 %a) nounwind {
25*9880d681SAndroid Build Coastguard Workerentry:
26*9880d681SAndroid Build Coastguard Worker  %x = sitofp i64 %a to double
27*9880d681SAndroid Build Coastguard Worker  ret double %x
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker; CHECK: @goo
30*9880d681SAndroid Build Coastguard Worker; CHECK: std 3,
31*9880d681SAndroid Build Coastguard Worker; CHECK: lfd [[REG:[0-9]+]],
32*9880d681SAndroid Build Coastguard Worker; CHECK: fcfid 1, [[REG]]
33*9880d681SAndroid Build Coastguard Worker; CHECK: blr
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: @goo
36*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: std 3,
37*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: lxsdx [[REG:[0-9]+]],
38*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: xscvsxddp 1, [[REG]]
39*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: blr
40*9880d681SAndroid Build Coastguard Worker}
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Workerdefine float @foou(i64 %a) nounwind {
43*9880d681SAndroid Build Coastguard Workerentry:
44*9880d681SAndroid Build Coastguard Worker  %x = uitofp i64 %a to float
45*9880d681SAndroid Build Coastguard Worker  ret float %x
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker; CHECK: @foou
48*9880d681SAndroid Build Coastguard Worker; CHECK: std 3,
49*9880d681SAndroid Build Coastguard Worker; CHECK: lfd [[REG:[0-9]+]],
50*9880d681SAndroid Build Coastguard Worker; CHECK: fcfidus 1, [[REG]]
51*9880d681SAndroid Build Coastguard Worker; CHECK: blr
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: @foou
54*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: std 3,
55*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: lxsdx [[REG:[0-9]+]],
56*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: fcfidus 1, [[REG]]
57*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: blr
58*9880d681SAndroid Build Coastguard Worker}
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Workerdefine double @goou(i64 %a) nounwind {
61*9880d681SAndroid Build Coastguard Workerentry:
62*9880d681SAndroid Build Coastguard Worker  %x = uitofp i64 %a to double
63*9880d681SAndroid Build Coastguard Worker  ret double %x
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Worker; CHECK: @goou
66*9880d681SAndroid Build Coastguard Worker; CHECK: std 3,
67*9880d681SAndroid Build Coastguard Worker; CHECK: lfd [[REG:[0-9]+]],
68*9880d681SAndroid Build Coastguard Worker; CHECK: fcfidu 1, [[REG]]
69*9880d681SAndroid Build Coastguard Worker; CHECK: blr
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: @goou
72*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: std 3,
73*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: lxsdx [[REG:[0-9]+]],
74*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: xscvuxddp 1, [[REG]]
75*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: blr
76*9880d681SAndroid Build Coastguard Worker}
77*9880d681SAndroid Build Coastguard Worker
78