[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / PowerPC / fp128-bitcast-after-operation.ll
blobe3df5479f7fc34820e1b9b1a656ffa70dd80274a
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s -check-prefixes=PPC64-P8,PPC64-P8-LE
3 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr7 < %s | FileCheck %s -check-prefixes=PPC64,PPC64-LE
4 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s -check-prefixes=PPC64-P8,PPC64-P8-BE
5 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 < %s | FileCheck %s -check-prefixes=PPC64,PPC64-BE
6 ; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-linux-gnu < %s | FileCheck %s -check-prefix=PPC32
8 define i128 @test_abs(ppc_fp128 %x) nounwind  {
9 ; PPC64-P8-LABEL: test_abs:
10 ; PPC64-P8:       # %bb.0: # %entry
11 ; PPC64-P8-NEXT:    mffprd 3, 1
12 ; PPC64-P8-NEXT:    mffprd 4, 2
13 ; PPC64-P8-NEXT:    rldicr 5, 3, 0, 0
14 ; PPC64-P8-NEXT:    xor 3, 3, 5
15 ; PPC64-P8-NEXT:    xor 4, 4, 5
16 ; PPC64-P8-NEXT:    blr
18 ; PPC64-LABEL: test_abs:
19 ; PPC64:       # %bb.0: # %entry
20 ; PPC64-NEXT:    stfd 1, -16(1)
21 ; PPC64-NEXT:    stfd 2, -8(1)
22 ; PPC64-NEXT:    ld 3, -16(1)
23 ; PPC64-NEXT:    ld 4, -8(1)
24 ; PPC64-NEXT:    rldicr 5, 3, 0, 0
25 ; PPC64-NEXT:    xor 3, 3, 5
26 ; PPC64-NEXT:    xor 4, 4, 5
27 ; PPC64-NEXT:    blr
29 ; PPC32-LABEL: test_abs:
30 ; PPC32:       # %bb.0: # %entry
31 ; PPC32-NEXT:    stwu 1, -32(1)
32 ; PPC32-NEXT:    stfd 1, 24(1)
33 ; PPC32-NEXT:    stfd 2, 16(1)
34 ; PPC32-NEXT:    lwz 3, 24(1)
35 ; PPC32-NEXT:    lwz 5, 16(1)
36 ; PPC32-NEXT:    rlwinm 7, 3, 0, 0, 0
37 ; PPC32-NEXT:    lwz 4, 28(1)
38 ; PPC32-NEXT:    xor 3, 3, 7
39 ; PPC32-NEXT:    lwz 6, 20(1)
40 ; PPC32-NEXT:    xor 5, 5, 7
41 ; PPC32-NEXT:    addi 1, 1, 32
42 ; PPC32-NEXT:    blr
43 entry:
44         %0 = tail call ppc_fp128 @llvm.fabs.ppcf128(ppc_fp128 %x)
45         %1 = bitcast ppc_fp128 %0 to i128
46         ret i128 %1
49 define i128 @test_neg(ppc_fp128 %x) nounwind  {
50 ; PPC64-P8-LABEL: test_neg:
51 ; PPC64-P8:       # %bb.0: # %entry
52 ; PPC64-P8-NEXT:    mffprd 4, 2
53 ; PPC64-P8-NEXT:    mffprd 3, 1
54 ; PPC64-P8-NEXT:    li 5, 1
55 ; PPC64-P8-NEXT:    rldic 5, 5, 63, 0
56 ; PPC64-P8-NEXT:    xor 3, 3, 5
57 ; PPC64-P8-NEXT:    xor 4, 4, 5
58 ; PPC64-P8-NEXT:    blr
60 ; PPC64-LABEL: test_neg:
61 ; PPC64:       # %bb.0: # %entry
62 ; PPC64-NEXT:    stfd 2, -8(1)
63 ; PPC64-NEXT:    stfd 1, -16(1)
64 ; PPC64-NEXT:    li 3, 1
65 ; PPC64-NEXT:    ld 4, -8(1)
66 ; PPC64-NEXT:    ld 5, -16(1)
67 ; PPC64-NEXT:    rldic 6, 3, 63, 0
68 ; PPC64-NEXT:    xor 3, 5, 6
69 ; PPC64-NEXT:    xor 4, 4, 6
70 ; PPC64-NEXT:    blr
72 ; PPC32-LABEL: test_neg:
73 ; PPC32:       # %bb.0: # %entry
74 ; PPC32-NEXT:    stwu 1, -32(1)
75 ; PPC32-NEXT:    stfd 1, 24(1)
76 ; PPC32-NEXT:    stfd 2, 16(1)
77 ; PPC32-NEXT:    lwz 5, 16(1)
78 ; PPC32-NEXT:    lwz 3, 24(1)
79 ; PPC32-NEXT:    lwz 4, 28(1)
80 ; PPC32-NEXT:    xoris 5, 5, 32768
81 ; PPC32-NEXT:    lwz 6, 20(1)
82 ; PPC32-NEXT:    xoris 3, 3, 32768
83 ; PPC32-NEXT:    addi 1, 1, 32
84 ; PPC32-NEXT:    blr
85 entry:
86         %0 = fsub ppc_fp128 0xM80000000000000000000000000000000, %x
87         %1 = bitcast ppc_fp128 %0 to i128
88         ret i128 %1
91 define i128 @test_copysign(ppc_fp128 %x, ppc_fp128 %y) nounwind  {
92 ; PPC64-P8-LE-LABEL: test_copysign:
93 ; PPC64-P8-LE:       # %bb.0: # %entry
94 ; PPC64-P8-LE-NEXT:    mflr 0
95 ; PPC64-P8-LE-NEXT:    stdu 1, -32(1)
96 ; PPC64-P8-LE-NEXT:    std 0, 48(1)
97 ; PPC64-P8-LE-NEXT:    bl copysignl
98 ; PPC64-P8-LE-NEXT:    nop
99 ; PPC64-P8-LE-NEXT:    mffprd 3, 1
100 ; PPC64-P8-LE-NEXT:    mffprd 4, 2
101 ; PPC64-P8-LE-NEXT:    addi 1, 1, 32
102 ; PPC64-P8-LE-NEXT:    ld 0, 16(1)
103 ; PPC64-P8-LE-NEXT:    mtlr 0
104 ; PPC64-P8-LE-NEXT:    blr
106 ; PPC64-LE-LABEL: test_copysign:
107 ; PPC64-LE:       # %bb.0: # %entry
108 ; PPC64-LE-NEXT:    mflr 0
109 ; PPC64-LE-NEXT:    stdu 1, -48(1)
110 ; PPC64-LE-NEXT:    std 0, 64(1)
111 ; PPC64-LE-NEXT:    bl copysignl
112 ; PPC64-LE-NEXT:    nop
113 ; PPC64-LE-NEXT:    stfd 1, 32(1)
114 ; PPC64-LE-NEXT:    stfd 2, 40(1)
115 ; PPC64-LE-NEXT:    ld 3, 32(1)
116 ; PPC64-LE-NEXT:    ld 4, 40(1)
117 ; PPC64-LE-NEXT:    addi 1, 1, 48
118 ; PPC64-LE-NEXT:    ld 0, 16(1)
119 ; PPC64-LE-NEXT:    mtlr 0
120 ; PPC64-LE-NEXT:    blr
122 ; PPC64-P8-BE-LABEL: test_copysign:
123 ; PPC64-P8-BE:       # %bb.0: # %entry
124 ; PPC64-P8-BE-NEXT:    mflr 0
125 ; PPC64-P8-BE-NEXT:    stdu 1, -112(1)
126 ; PPC64-P8-BE-NEXT:    std 0, 128(1)
127 ; PPC64-P8-BE-NEXT:    bl copysignl
128 ; PPC64-P8-BE-NEXT:    nop
129 ; PPC64-P8-BE-NEXT:    mffprd 3, 1
130 ; PPC64-P8-BE-NEXT:    mffprd 4, 2
131 ; PPC64-P8-BE-NEXT:    addi 1, 1, 112
132 ; PPC64-P8-BE-NEXT:    ld 0, 16(1)
133 ; PPC64-P8-BE-NEXT:    mtlr 0
134 ; PPC64-P8-BE-NEXT:    blr
136 ; PPC64-BE-LABEL: test_copysign:
137 ; PPC64-BE:       # %bb.0: # %entry
138 ; PPC64-BE-NEXT:    mflr 0
139 ; PPC64-BE-NEXT:    stdu 1, -128(1)
140 ; PPC64-BE-NEXT:    std 0, 144(1)
141 ; PPC64-BE-NEXT:    bl copysignl
142 ; PPC64-BE-NEXT:    nop
143 ; PPC64-BE-NEXT:    stfd 1, 112(1)
144 ; PPC64-BE-NEXT:    stfd 2, 120(1)
145 ; PPC64-BE-NEXT:    ld 3, 112(1)
146 ; PPC64-BE-NEXT:    ld 4, 120(1)
147 ; PPC64-BE-NEXT:    addi 1, 1, 128
148 ; PPC64-BE-NEXT:    ld 0, 16(1)
149 ; PPC64-BE-NEXT:    mtlr 0
150 ; PPC64-BE-NEXT:    blr
152 ; PPC32-LABEL: test_copysign:
153 ; PPC32:       # %bb.0: # %entry
154 ; PPC32-NEXT:    mflr 0
155 ; PPC32-NEXT:    stwu 1, -96(1)
156 ; PPC32-NEXT:    stw 0, 100(1)
157 ; PPC32-NEXT:    stfd 1, 40(1)
158 ; PPC32-NEXT:    lwz 3, 44(1)
159 ; PPC32-NEXT:    stfd 2, 32(1)
160 ; PPC32-NEXT:    stw 3, 60(1)
161 ; PPC32-NEXT:    lwz 3, 40(1)
162 ; PPC32-NEXT:    stfd 3, 72(1)
163 ; PPC32-NEXT:    stw 3, 56(1)
164 ; PPC32-NEXT:    lwz 3, 36(1)
165 ; PPC32-NEXT:    stfd 4, 64(1)
166 ; PPC32-NEXT:    stw 3, 52(1)
167 ; PPC32-NEXT:    lwz 3, 32(1)
168 ; PPC32-NEXT:    lfd 1, 56(1)
169 ; PPC32-NEXT:    stw 3, 48(1)
170 ; PPC32-NEXT:    lwz 3, 76(1)
171 ; PPC32-NEXT:    lfd 2, 48(1)
172 ; PPC32-NEXT:    stw 3, 92(1)
173 ; PPC32-NEXT:    lwz 3, 72(1)
174 ; PPC32-NEXT:    stw 3, 88(1)
175 ; PPC32-NEXT:    lwz 3, 68(1)
176 ; PPC32-NEXT:    lfd 3, 88(1)
177 ; PPC32-NEXT:    stw 3, 84(1)
178 ; PPC32-NEXT:    lwz 3, 64(1)
179 ; PPC32-NEXT:    stw 3, 80(1)
180 ; PPC32-NEXT:    lfd 4, 80(1)
181 ; PPC32-NEXT:    bl copysignl
182 ; PPC32-NEXT:    stfd 1, 16(1)
183 ; PPC32-NEXT:    stfd 2, 24(1)
184 ; PPC32-NEXT:    lwz 3, 16(1)
185 ; PPC32-NEXT:    lwz 4, 20(1)
186 ; PPC32-NEXT:    lwz 5, 24(1)
187 ; PPC32-NEXT:    lwz 6, 28(1)
188 ; PPC32-NEXT:    lwz 0, 100(1)
189 ; PPC32-NEXT:    addi 1, 1, 96
190 ; PPC32-NEXT:    mtlr 0
191 ; PPC32-NEXT:    blr
192 entry:
193         %0 = tail call ppc_fp128 @llvm.copysign.ppcf128(ppc_fp128 %x, ppc_fp128 %y)
194         %1 = bitcast ppc_fp128 %0 to i128
195         ret i128 %1
198 define i128 @test_copysign_const(ppc_fp128 %x) nounwind  {
199 ; PPC64-P8-LABEL: test_copysign_const:
200 ; PPC64-P8:       # %bb.0: # %entry
201 ; PPC64-P8-NEXT:    mffprd 3, 1
202 ; PPC64-P8-NEXT:    li 5, 3019
203 ; PPC64-P8-NEXT:    rldic 5, 5, 52, 0
204 ; PPC64-P8-NEXT:    rldicr 4, 3, 0, 0
205 ; PPC64-P8-NEXT:    li 3, 16399
206 ; PPC64-P8-NEXT:    rldic 3, 3, 48, 1
207 ; PPC64-P8-NEXT:    or 3, 4, 3
208 ; PPC64-P8-NEXT:    xor 4, 4, 5
209 ; PPC64-P8-NEXT:    blr
211 ; PPC64-LABEL: test_copysign_const:
212 ; PPC64:       # %bb.0: # %entry
213 ; PPC64-NEXT:    stfd 1, -8(1)
214 ; PPC64-NEXT:    li 4, 16399
215 ; PPC64-NEXT:    li 5, 3019
216 ; PPC64-NEXT:    ld 3, -8(1)
217 ; PPC64-NEXT:    rldicr 6, 3, 0, 0
218 ; PPC64-NEXT:    rldic 3, 4, 48, 1
219 ; PPC64-NEXT:    rldic 4, 5, 52, 0
220 ; PPC64-NEXT:    or 3, 6, 3
221 ; PPC64-NEXT:    xor 4, 6, 4
222 ; PPC64-NEXT:    blr
224 ; PPC32-LABEL: test_copysign_const:
225 ; PPC32:       # %bb.0: # %entry
226 ; PPC32-NEXT:    stwu 1, -32(1)
227 ; PPC32-NEXT:    stfd 1, 24(1)
228 ; PPC32-NEXT:    li 6, 0
229 ; PPC32-NEXT:    lwz 3, 24(1)
230 ; PPC32-NEXT:    rlwinm 4, 3, 0, 0, 0
231 ; PPC32-NEXT:    oris 3, 4, 16399
232 ; PPC32-NEXT:    xoris 5, 4, 48304
233 ; PPC32-NEXT:    li 4, 0
234 ; PPC32-NEXT:    addi 1, 1, 32
235 ; PPC32-NEXT:    blr
236 entry:
237         %0 = tail call ppc_fp128 @llvm.copysign.ppcf128(ppc_fp128 0xM400F000000000000BCB0000000000000, ppc_fp128 %x)
238         %1 = bitcast ppc_fp128 %0 to i128
239         ret i128 %1
242 declare ppc_fp128 @llvm.fabs.ppcf128(ppc_fp128)
243 declare ppc_fp128 @llvm.copysign.ppcf128(ppc_fp128, ppc_fp128)