1# RUN: llc -mtriple=s390x-linux-gnu -mcpu=z10 -start-before=greedy %s -o - \
2# RUN:   | FileCheck %s
3--- |
4  define void @f0(double* %ptr1, float* %ptr2) {
5    %val0 = load volatile float, float* %ptr2
6    %val1 = load volatile float, float* %ptr2
7    %val2 = load volatile float, float* %ptr2
8    %val3 = load volatile float, float* %ptr2
9    %val4 = load volatile float, float* %ptr2
10    %val5 = load volatile float, float* %ptr2
11    %val6 = load volatile float, float* %ptr2
12    %val7 = load volatile float, float* %ptr2
13    %val8 = load volatile float, float* %ptr2
14    %val9 = load volatile float, float* %ptr2
15    %val10 = load volatile float, float* %ptr2
16    %val11 = load volatile float, float* %ptr2
17    %val12 = load volatile float, float* %ptr2
18    %val13 = load volatile float, float* %ptr2
19    %val14 = load volatile float, float* %ptr2
20    %val15 = load volatile float, float* %ptr2
21    %val16 = load volatile float, float* %ptr2
22    %ext0 = fpext float %val0 to double
23    %ext1 = fpext float %val1 to double
24    %ext2 = fpext float %val2 to double
25    %ext3 = fpext float %val3 to double
26    %ext4 = fpext float %val4 to double
27    %ext5 = fpext float %val5 to double
28    %ext6 = fpext float %val6 to double
29    %ext7 = fpext float %val7 to double
30    %ext8 = fpext float %val8 to double
31    %ext9 = fpext float %val9 to double
32    %ext10 = fpext float %val10 to double
33    %ext11 = fpext float %val11 to double
34    %ext12 = fpext float %val12 to double
35    %ext13 = fpext float %val13 to double
36    %ext14 = fpext float %val14 to double
37    %ext15 = fpext float %val15 to double
38    %ext16 = fpext float %val16 to double
39    store volatile float %val0, float* %ptr2
40    store volatile float %val1, float* %ptr2
41    store volatile float %val2, float* %ptr2
42    store volatile float %val3, float* %ptr2
43    store volatile float %val4, float* %ptr2
44    store volatile float %val5, float* %ptr2
45    store volatile float %val6, float* %ptr2
46    store volatile float %val7, float* %ptr2
47    store volatile float %val8, float* %ptr2
48    store volatile float %val9, float* %ptr2
49    store volatile float %val10, float* %ptr2
50    store volatile float %val11, float* %ptr2
51    store volatile float %val12, float* %ptr2
52    store volatile float %val13, float* %ptr2
53    store volatile float %val14, float* %ptr2
54    store volatile float %val15, float* %ptr2
55    store volatile float %val16, float* %ptr2
56    store volatile double %ext0, double* %ptr1
57    store volatile double %ext1, double* %ptr1
58    store volatile double %ext2, double* %ptr1
59    store volatile double %ext3, double* %ptr1
60    store volatile double %ext4, double* %ptr1
61    store volatile double %ext5, double* %ptr1
62    store volatile double %ext6, double* %ptr1
63    store volatile double %ext7, double* %ptr1
64    store volatile double %ext8, double* %ptr1
65    store volatile double %ext9, double* %ptr1
66    store volatile double %ext10, double* %ptr1
67    store volatile double %ext11, double* %ptr1
68    store volatile double %ext12, double* %ptr1
69    store volatile double %ext13, double* %ptr1
70    store volatile double %ext14, double* %ptr1
71    store volatile double %ext15, double* %ptr1
72    store volatile double %ext16, double* %ptr1
73    ret void
74  }
75
76...
77
78# CHECK-LABEL: f0:
79# CHECK: ldeb {{%f[0-9]+}}, 16{{[04]}}(%r15)
80# CHECK: br %r14
81
82---
83name:            f0
84alignment:       4
85tracksRegLiveness: true
86registers:
87  - { id: 0, class: addr64bit }
88  - { id: 1, class: addr64bit }
89  - { id: 2, class: fp32bit }
90  - { id: 3, class: fp32bit }
91  - { id: 4, class: fp32bit }
92  - { id: 5, class: fp32bit }
93  - { id: 6, class: fp32bit }
94  - { id: 7, class: fp32bit }
95  - { id: 8, class: fp32bit }
96  - { id: 9, class: fp32bit }
97  - { id: 10, class: fp32bit }
98  - { id: 11, class: fp32bit }
99  - { id: 12, class: fp32bit }
100  - { id: 13, class: fp32bit }
101  - { id: 14, class: fp32bit }
102  - { id: 15, class: fp32bit }
103  - { id: 16, class: fp32bit }
104  - { id: 17, class: fp32bit }
105  - { id: 18, class: fp32bit }
106  - { id: 19, class: fp64bit }
107  - { id: 20, class: fp64bit }
108  - { id: 21, class: fp64bit }
109  - { id: 22, class: fp64bit }
110  - { id: 23, class: fp64bit }
111  - { id: 24, class: fp64bit }
112  - { id: 25, class: fp64bit }
113  - { id: 26, class: fp64bit }
114  - { id: 27, class: fp64bit }
115  - { id: 28, class: fp64bit }
116  - { id: 29, class: fp64bit }
117  - { id: 30, class: fp64bit }
118  - { id: 31, class: fp64bit }
119  - { id: 32, class: fp64bit }
120  - { id: 33, class: fp64bit }
121  - { id: 34, class: fp64bit }
122  - { id: 35, class: fp64bit }
123liveins:
124  - { reg: '$r2d', virtual-reg: '%0' }
125  - { reg: '$r3d', virtual-reg: '%1' }
126body:             |
127  bb.0 (%ir-block.0):
128    liveins: $r2d, $r3d
129
130    %1 = COPY $r3d
131    %0 = COPY $r2d
132    %2 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
133    %3 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
134    %4 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
135    %5 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
136    %6 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
137    %7 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
138    %8 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
139    %9 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
140    %10 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
141    %11 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
142    %12 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
143    %13 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
144    %14 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
145    %15 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
146    %16 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
147    %17 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
148    %18 = LE %1, 0, $noreg :: (volatile load 4 from %ir.ptr2)
149    STE %2, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
150    STE %3, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
151    STE %4, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
152    STE %5, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
153    STE %6, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
154    STE %7, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
155    STE %8, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
156    STE %9, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
157    STE %10, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
158    STE %11, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
159    STE %12, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
160    STE %13, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
161    STE %14, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
162    STE %15, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
163    STE %16, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
164    STE %17, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
165    STE %18, %1, 0, $noreg :: (volatile store 4 into %ir.ptr2)
166    %19 = LDEBR %2, implicit $fpc
167    STD %19, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
168    %20 = LDEBR %3, implicit $fpc
169    STD %20, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
170    %21 = LDEBR %4, implicit $fpc
171    STD %21, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
172    %22 = LDEBR %5, implicit $fpc
173    STD %22, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
174    %23 = LDEBR %6, implicit $fpc
175    STD %23, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
176    %24 = LDEBR %7, implicit $fpc
177    STD %24, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
178    %25 = LDEBR %8, implicit $fpc
179    STD %25, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
180    %26 = LDEBR %9, implicit $fpc
181    STD %26, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
182    %27 = LDEBR %10, implicit $fpc
183    STD %27, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
184    %28 = LDEBR %11, implicit $fpc
185    STD %28, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
186    %29 = LDEBR %12, implicit $fpc
187    STD %29, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
188    %30 = LDEBR %13, implicit $fpc
189    STD %30, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
190    %31 = LDEBR %14, implicit $fpc
191    STD %31, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
192    %32 = LDEBR %15, implicit $fpc
193    STD %32, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
194    %33 = LDEBR %16, implicit $fpc
195    STD %33, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
196    %34 = LDEBR %17, implicit $fpc
197    STD %34, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
198    %35 = LDEBR %18, implicit $fpc
199    STD %35, %0, 0, $noreg :: (volatile store 8 into %ir.ptr1)
200    Return
201
202...
203