[X86] combineTargetShuffle - commute VPERMV3 shuffles so any load is on the RHS
[llvm-project.git] / llvm / test / CodeGen / SystemZ / fp-conv-17.mir
blobf495e827ed9bc92797ce19438478fa90f597100f
1 # RUN: llc -mtriple=s390x-linux-gnu -mcpu=z10 -start-before=greedy %s -o - \
2 # RUN:   | FileCheck %s
3 --- |
4   define void @f0(ptr %ptr1, ptr %ptr2) {
5     %val0 = load volatile float, ptr %ptr2
6     %val1 = load volatile float, ptr %ptr2
7     %val2 = load volatile float, ptr %ptr2
8     %val3 = load volatile float, ptr %ptr2
9     %val4 = load volatile float, ptr %ptr2
10     %val5 = load volatile float, ptr %ptr2
11     %val6 = load volatile float, ptr %ptr2
12     %val7 = load volatile float, ptr %ptr2
13     %val8 = load volatile float, ptr %ptr2
14     %val9 = load volatile float, ptr %ptr2
15     %val10 = load volatile float, ptr %ptr2
16     %val11 = load volatile float, ptr %ptr2
17     %val12 = load volatile float, ptr %ptr2
18     %val13 = load volatile float, ptr %ptr2
19     %val14 = load volatile float, ptr %ptr2
20     %val15 = load volatile float, ptr %ptr2
21     %val16 = load volatile float, ptr %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, ptr %ptr2
40     store volatile float %val1, ptr %ptr2
41     store volatile float %val2, ptr %ptr2
42     store volatile float %val3, ptr %ptr2
43     store volatile float %val4, ptr %ptr2
44     store volatile float %val5, ptr %ptr2
45     store volatile float %val6, ptr %ptr2
46     store volatile float %val7, ptr %ptr2
47     store volatile float %val8, ptr %ptr2
48     store volatile float %val9, ptr %ptr2
49     store volatile float %val10, ptr %ptr2
50     store volatile float %val11, ptr %ptr2
51     store volatile float %val12, ptr %ptr2
52     store volatile float %val13, ptr %ptr2
53     store volatile float %val14, ptr %ptr2
54     store volatile float %val15, ptr %ptr2
55     store volatile float %val16, ptr %ptr2
56     store volatile double %ext0, ptr %ptr1
57     store volatile double %ext1, ptr %ptr1
58     store volatile double %ext2, ptr %ptr1
59     store volatile double %ext3, ptr %ptr1
60     store volatile double %ext4, ptr %ptr1
61     store volatile double %ext5, ptr %ptr1
62     store volatile double %ext6, ptr %ptr1
63     store volatile double %ext7, ptr %ptr1
64     store volatile double %ext8, ptr %ptr1
65     store volatile double %ext9, ptr %ptr1
66     store volatile double %ext10, ptr %ptr1
67     store volatile double %ext11, ptr %ptr1
68     store volatile double %ext12, ptr %ptr1
69     store volatile double %ext13, ptr %ptr1
70     store volatile double %ext14, ptr %ptr1
71     store volatile double %ext15, ptr %ptr1
72     store volatile double %ext16, ptr %ptr1
73     ret void
74   }
75   
76 ...
78 # CHECK-LABEL: f0:
79 # CHECK: ldeb {{%f[0-9]+}}, 16{{[04]}}(%r15)
80 # CHECK: br %r14
82 ---
83 name:            f0
84 alignment:       4
85 tracksRegLiveness: true
86 registers:       
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 }
123 liveins:         
124   - { reg: '$r2d', virtual-reg: '%0' }
125   - { reg: '$r3d', virtual-reg: '%1' }
126 body:             |
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 (s32) from %ir.ptr2)
133     %3 = LE %1, 0, $noreg :: (volatile load (s32) from %ir.ptr2)
134     %4 = LE %1, 0, $noreg :: (volatile load (s32) from %ir.ptr2)
135     %5 = LE %1, 0, $noreg :: (volatile load (s32) from %ir.ptr2)
136     %6 = LE %1, 0, $noreg :: (volatile load (s32) from %ir.ptr2)
137     %7 = LE %1, 0, $noreg :: (volatile load (s32) from %ir.ptr2)
138     %8 = LE %1, 0, $noreg :: (volatile load (s32) from %ir.ptr2)
139     %9 = LE %1, 0, $noreg :: (volatile load (s32) from %ir.ptr2)
140     %10 = LE %1, 0, $noreg :: (volatile load (s32) from %ir.ptr2)
141     %11 = LE %1, 0, $noreg :: (volatile load (s32) from %ir.ptr2)
142     %12 = LE %1, 0, $noreg :: (volatile load (s32) from %ir.ptr2)
143     %13 = LE %1, 0, $noreg :: (volatile load (s32) from %ir.ptr2)
144     %14 = LE %1, 0, $noreg :: (volatile load (s32) from %ir.ptr2)
145     %15 = LE %1, 0, $noreg :: (volatile load (s32) from %ir.ptr2)
146     %16 = LE %1, 0, $noreg :: (volatile load (s32) from %ir.ptr2)
147     %17 = LE %1, 0, $noreg :: (volatile load (s32) from %ir.ptr2)
148     %18 = LE %1, 0, $noreg :: (volatile load (s32) from %ir.ptr2)
149     STE %2, %1, 0, $noreg :: (volatile store (s32) into %ir.ptr2)
150     STE %3, %1, 0, $noreg :: (volatile store (s32) into %ir.ptr2)
151     STE %4, %1, 0, $noreg :: (volatile store (s32) into %ir.ptr2)
152     STE %5, %1, 0, $noreg :: (volatile store (s32) into %ir.ptr2)
153     STE %6, %1, 0, $noreg :: (volatile store (s32) into %ir.ptr2)
154     STE %7, %1, 0, $noreg :: (volatile store (s32) into %ir.ptr2)
155     STE %8, %1, 0, $noreg :: (volatile store (s32) into %ir.ptr2)
156     STE %9, %1, 0, $noreg :: (volatile store (s32) into %ir.ptr2)
157     STE %10, %1, 0, $noreg :: (volatile store (s32) into %ir.ptr2)
158     STE %11, %1, 0, $noreg :: (volatile store (s32) into %ir.ptr2)
159     STE %12, %1, 0, $noreg :: (volatile store (s32) into %ir.ptr2)
160     STE %13, %1, 0, $noreg :: (volatile store (s32) into %ir.ptr2)
161     STE %14, %1, 0, $noreg :: (volatile store (s32) into %ir.ptr2)
162     STE %15, %1, 0, $noreg :: (volatile store (s32) into %ir.ptr2)
163     STE %16, %1, 0, $noreg :: (volatile store (s32) into %ir.ptr2)
164     STE %17, %1, 0, $noreg :: (volatile store (s32) into %ir.ptr2)
165     STE %18, %1, 0, $noreg :: (volatile store (s32) into %ir.ptr2)
166     %19 = LDEBR %2, implicit $fpc
167     STD %19, %0, 0, $noreg :: (volatile store (s64) into %ir.ptr1)
168     %20 = LDEBR %3, implicit $fpc
169     STD %20, %0, 0, $noreg :: (volatile store (s64) into %ir.ptr1)
170     %21 = LDEBR %4, implicit $fpc
171     STD %21, %0, 0, $noreg :: (volatile store (s64) into %ir.ptr1)
172     %22 = LDEBR %5, implicit $fpc
173     STD %22, %0, 0, $noreg :: (volatile store (s64) into %ir.ptr1)
174     %23 = LDEBR %6, implicit $fpc
175     STD %23, %0, 0, $noreg :: (volatile store (s64) into %ir.ptr1)
176     %24 = LDEBR %7, implicit $fpc
177     STD %24, %0, 0, $noreg :: (volatile store (s64) into %ir.ptr1)
178     %25 = LDEBR %8, implicit $fpc
179     STD %25, %0, 0, $noreg :: (volatile store (s64) into %ir.ptr1)
180     %26 = LDEBR %9, implicit $fpc
181     STD %26, %0, 0, $noreg :: (volatile store (s64) into %ir.ptr1)
182     %27 = LDEBR %10, implicit $fpc
183     STD %27, %0, 0, $noreg :: (volatile store (s64) into %ir.ptr1)
184     %28 = LDEBR %11, implicit $fpc
185     STD %28, %0, 0, $noreg :: (volatile store (s64) into %ir.ptr1)
186     %29 = LDEBR %12, implicit $fpc
187     STD %29, %0, 0, $noreg :: (volatile store (s64) into %ir.ptr1)
188     %30 = LDEBR %13, implicit $fpc
189     STD %30, %0, 0, $noreg :: (volatile store (s64) into %ir.ptr1)
190     %31 = LDEBR %14, implicit $fpc
191     STD %31, %0, 0, $noreg :: (volatile store (s64) into %ir.ptr1)
192     %32 = LDEBR %15, implicit $fpc
193     STD %32, %0, 0, $noreg :: (volatile store (s64) into %ir.ptr1)
194     %33 = LDEBR %16, implicit $fpc
195     STD %33, %0, 0, $noreg :: (volatile store (s64) into %ir.ptr1)
196     %34 = LDEBR %17, implicit $fpc
197     STD %34, %0, 0, $noreg :: (volatile store (s64) into %ir.ptr1)
198     %35 = LDEBR %18, implicit $fpc
199     STD %35, %0, 0, $noreg :: (volatile store (s64) into %ir.ptr1)
200     Return