xref: /llvm-project/llvm/test/CodeGen/CSKY/fpu/ldst-f.ll (revision 423ac3d9ee82ff48da91b35ec80497089bc55b9e)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
3; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -float-abi=hard -mattr=+hard-float -mattr=+2e3 -mattr=+fpuv2_sf | FileCheck %s --check-prefix=CHECK-SF
4; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -float-abi=hard -mattr=+hard-float -mattr=+2e3 -mattr=+fpuv3_sf | FileCheck %s --check-prefix=CHECK-SF2
5
6define float @load_I_w(ptr nocapture readonly %a) local_unnamed_addr #0 {
7;
8; CHECK-SF-LABEL: load_I_w:
9; CHECK-SF:       # %bb.0: # %entry
10; CHECK-SF-NEXT:    flds vr0, (a0, 12)
11; CHECK-SF-NEXT:    rts16
12;
13; CHECK-SF2-LABEL: load_I_w:
14; CHECK-SF2:       # %bb.0: # %entry
15; CHECK-SF2-NEXT:    fld.32 vr0, (a0, 12)
16; CHECK-SF2-NEXT:    rts16
17entry:
18  %arrayidx = getelementptr inbounds float, ptr %a, i64 3
19  %0 = load float, ptr %arrayidx, align 4
20  ret float %0
21}
22
23define float @load_R_w(ptr nocapture readonly %a, i32 %b) local_unnamed_addr #0 {
24;
25; CHECK-SF-LABEL: load_R_w:
26; CHECK-SF:       # %bb.0: # %entry
27; CHECK-SF-NEXT:    fldrs vr0, (a0, a1 << 2)
28; CHECK-SF-NEXT:    rts16
29;
30; CHECK-SF2-LABEL: load_R_w:
31; CHECK-SF2:       # %bb.0: # %entry
32; CHECK-SF2-NEXT:    fldr.32 vr0, (a0, a1 << 2)
33; CHECK-SF2-NEXT:    rts16
34entry:
35  %idxprom = sext i32 %b to i64
36  %arrayidx = getelementptr inbounds float, ptr %a, i64 %idxprom
37  %0 = load float, ptr %arrayidx, align 4
38  ret float %0
39}
40
41
42define float @store_I_w(ptr  %a, float %b) local_unnamed_addr #0 {
43;
44; CHECK-SF-LABEL: store_I_w:
45; CHECK-SF:       # %bb.0: # %entry
46; CHECK-SF-NEXT:    fsts vr0, (a0, 12)
47; CHECK-SF-NEXT:    movi16 a0, 0
48; CHECK-SF-NEXT:    fmtvrl vr0, a0
49; CHECK-SF-NEXT:    rts16
50;
51; CHECK-SF2-LABEL: store_I_w:
52; CHECK-SF2:       # %bb.0: # %entry
53; CHECK-SF2-NEXT:    fst.32 vr0, (a0, 12)
54; CHECK-SF2-NEXT:    movi16 a0, 0
55; CHECK-SF2-NEXT:    fmtvr.32.1 vr0, a0
56; CHECK-SF2-NEXT:    rts16
57entry:
58  %arrayidx = getelementptr inbounds float, ptr %a, i64 3
59  store float %b, ptr %arrayidx, align 4
60  ret float 0.0
61}
62
63define float @store_R_w(ptr  %a, i32 %b, float %c) local_unnamed_addr #0 {
64;
65; CHECK-SF-LABEL: store_R_w:
66; CHECK-SF:       # %bb.0: # %entry
67; CHECK-SF-NEXT:    fstrs vr0, (a0, a1 << 2)
68; CHECK-SF-NEXT:    movi16 a0, 0
69; CHECK-SF-NEXT:    fmtvrl vr0, a0
70; CHECK-SF-NEXT:    rts16
71;
72; CHECK-SF2-LABEL: store_R_w:
73; CHECK-SF2:       # %bb.0: # %entry
74; CHECK-SF2-NEXT:    fstr.32 vr0, (a0, a1 << 2)
75; CHECK-SF2-NEXT:    movi16 a0, 0
76; CHECK-SF2-NEXT:    fmtvr.32.1 vr0, a0
77; CHECK-SF2-NEXT:    rts16
78entry:
79  %idxprom = sext i32 %b to i64
80  %arrayidx = getelementptr inbounds float, ptr %a, i64 %idxprom
81  store float %c, ptr %arrayidx, align 4
82  ret float 0.0
83}
84