xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/vle_vid-vfcvt.ll (revision 58d8805ff9f0a9947ac122b463c00d6c0656eae6)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=riscv64 -mattr=+v -verify-machineinstrs | FileCheck %s
3
4define void @foo_1(ptr nocapture noundef writeonly %t) {
5; CHECK-LABEL: foo_1:
6; CHECK:       # %bb.0: # %entry
7; CHECK-NEXT:    lui a1, %hi(.LCPI0_0)
8; CHECK-NEXT:    addi a1, a1, %lo(.LCPI0_0)
9; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
10; CHECK-NEXT:    vle32.v v8, (a1)
11; CHECK-NEXT:    vse32.v v8, (a0)
12; CHECK-NEXT:    ret
13entry:
14  store <4 x float> <float -2147483648.0, float -2147483520.0, float -2147483392.0, float -2147483264.0>, ptr %t, align 16
15  ret void
16}
17
18define void @foo_2(ptr nocapture noundef writeonly %t) {
19; CHECK-LABEL: foo_2:
20; CHECK:       # %bb.0: # %entry
21; CHECK-NEXT:    lui a1, %hi(.LCPI1_0)
22; CHECK-NEXT:    addi a1, a1, %lo(.LCPI1_0)
23; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
24; CHECK-NEXT:    vle32.v v8, (a1)
25; CHECK-NEXT:    vse32.v v8, (a0)
26; CHECK-NEXT:    ret
27entry:
28  store <4 x float> <float 2147483136.0, float 2147483264.0, float 2147483392.0, float 2147483520.0>, ptr %t, align 16
29  ret void
30}
31
32define void @foo_3(ptr nocapture noundef writeonly %t) {
33; CHECK-LABEL: foo_3:
34; CHECK:       # %bb.0: # %entry
35; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
36; CHECK-NEXT:    vid.v v8
37; CHECK-NEXT:    vadd.vi v8, v8, -1
38; CHECK-NEXT:    vfcvt.f.x.v v8, v8
39; CHECK-NEXT:    vse32.v v8, (a0)
40; CHECK-NEXT:    ret
41entry:
42  store <4 x float> <float -1.0, float 0.0, float 1.0, float 2.0>, ptr %t, align 16
43  ret void
44}
45
46define void @foo_4(ptr nocapture noundef writeonly %t) {
47; CHECK-LABEL: foo_4:
48; CHECK:       # %bb.0: # %entry
49; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
50; CHECK-NEXT:    vid.v v8
51; CHECK-NEXT:    vsll.vi v8, v8, 10
52; CHECK-NEXT:    vadd.vi v8, v8, -16
53; CHECK-NEXT:    vfcvt.f.x.v v8, v8
54; CHECK-NEXT:    vse32.v v8, (a0)
55; CHECK-NEXT:    ret
56entry:
57  store <4 x float> <float -16.0, float 1008.0, float 2032.0, float 3056.0>, ptr %t, align 16
58  ret void
59}
60
61define void @foo_5(ptr nocapture noundef writeonly %t) {
62; CHECK-LABEL: foo_5:
63; CHECK:       # %bb.0: # %entry
64; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
65; CHECK-NEXT:    vid.v v8
66; CHECK-NEXT:    vfcvt.f.x.v v8, v8
67; CHECK-NEXT:    vse32.v v8, (a0)
68; CHECK-NEXT:    ret
69entry:
70  store <4 x float> <float 0.0, float 1.0, float 2.0, float 3.0>, ptr %t, align 16
71  ret void
72}
73
74define void @foo_6(ptr nocapture noundef writeonly %t) {
75; CHECK-LABEL: foo_6:
76; CHECK:       # %bb.0: # %entry
77; CHECK-NEXT:    lui a1, %hi(.LCPI5_0)
78; CHECK-NEXT:    addi a1, a1, %lo(.LCPI5_0)
79; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
80; CHECK-NEXT:    vle32.v v8, (a1)
81; CHECK-NEXT:    vse32.v v8, (a0)
82; CHECK-NEXT:    ret
83entry:
84  store <4 x float> <float -0.0, float 1.0, float 2.0, float 3.0>, ptr %t, align 16
85  ret void
86}
87
88define void @foo_7(ptr nocapture noundef writeonly %t) {
89; CHECK-LABEL: foo_7:
90; CHECK:       # %bb.0: # %entry
91; CHECK-NEXT:    lui a1, %hi(.LCPI6_0)
92; CHECK-NEXT:    addi a1, a1, %lo(.LCPI6_0)
93; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
94; CHECK-NEXT:    vle32.v v8, (a1)
95; CHECK-NEXT:    vse32.v v8, (a0)
96; CHECK-NEXT:    ret
97entry:
98  store <4 x float> <float -3.0, float -2.0, float -1.0, float -0.0>, ptr %t, align 16
99  ret void
100}
101
102define void @foo_8(ptr nocapture noundef writeonly %t) {
103; CHECK-LABEL: foo_8:
104; CHECK:       # %bb.0: # %entry
105; CHECK-NEXT:    lui a1, %hi(.LCPI7_0)
106; CHECK-NEXT:    addi a1, a1, %lo(.LCPI7_0)
107; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
108; CHECK-NEXT:    vle32.v v8, (a1)
109; CHECK-NEXT:    vse32.v v8, (a0)
110; CHECK-NEXT:    ret
111entry:
112  store <4 x float> <float 1.5, float 2.5, float 3.5, float 4.5>, ptr %t, align 16
113  ret void
114}
115
116; Make sure we don't try to use vid+vsll+vfcvt. We previously flipped the sign
117; of 2147483648.0.
118define void @foo_9(ptr nocapture noundef writeonly %t) {
119; CHECK-LABEL: foo_9:
120; CHECK:       # %bb.0: # %entry
121; CHECK-NEXT:    lui a1, %hi(.LCPI8_0)
122; CHECK-NEXT:    addi a1, a1, %lo(.LCPI8_0)
123; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
124; CHECK-NEXT:    vle32.v v8, (a1)
125; CHECK-NEXT:    vse32.v v8, (a0)
126; CHECK-NEXT:    ret
127entry:
128  store <4 x float> <float 0.0, float -2147483648.0, float 0.0, float 2147483648.0>, ptr %t, align 16
129  ret void
130}
131