Skip to content

Commit a537724

Browse files
[LLVM][DAGCombine] Remove combiner-vector-fcopysign-extend-round. (#129878)
This option was added to improve test coverage for SVE lowering code that is impossible to reach otherwise. Given it is not possible to trigger a bug without it and the generated code is universally worse with it, I figure the option has no value and should be removed.
1 parent 04d4314 commit a537724

File tree

5 files changed

+115
-270
lines changed

5 files changed

+115
-270
lines changed

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,6 @@ static cl::opt<bool> EnableShrinkLoadReplaceStoreWithStore(
149149
cl::desc("DAG combiner enable load/<replace bytes>/store with "
150150
"a narrower store"));
151151

152-
static cl::opt<bool> EnableVectorFCopySignExtendRound(
153-
"combiner-vector-fcopysign-extend-round", cl::Hidden, cl::init(false),
154-
cl::desc(
155-
"Enable merging extends and rounds into FCOPYSIGN on vector types"));
156152
namespace {
157153

158154
class DAGCombiner {
@@ -18011,7 +18007,8 @@ static inline bool CanCombineFCOPYSIGN_EXTEND_ROUND(EVT XTy, EVT YTy) {
1801118007
if (YTy == MVT::f128)
1801218008
return false;
1801318009

18014-
return !YTy.isVector() || EnableVectorFCopySignExtendRound;
18010+
// Avoid mismatched vector operand types, for better instruction selection.
18011+
return !YTy.isVector();
1801518012
}
1801618013

1801718014
static inline bool CanCombineFCOPYSIGN_EXTEND_ROUND(SDNode *N) {

llvm/test/CodeGen/AArch64/sve-fcopysign.ll

Lines changed: 47 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2-
; RUN: llc < %s -mtriple=aarch64 -mattr=+sve -o - | FileCheck --check-prefixes=CHECK,CHECK-NO-EXTEND-ROUND %s
3-
; RUN: llc < %s -mtriple=aarch64 -mattr=+sve --combiner-vector-fcopysign-extend-round -o - | FileCheck --check-prefixes=CHECK,CHECK-EXTEND-ROUND %s
2+
; RUN: llc < %s -mtriple=aarch64 -mattr=+sve -o - | FileCheck %s
43
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
54

65
;============ v2f32
@@ -47,32 +46,16 @@ define <vscale x 4 x float> @test_copysign_v4f32_v4f32(<vscale x 4 x float> %a,
4746

4847
; SplitVecOp #1
4948
define <vscale x 4 x float> @test_copysign_v4f32_v4f64(<vscale x 4 x float> %a, <vscale x 4 x double> %b) #0 {
50-
; CHECK-NO-EXTEND-ROUND-LABEL: test_copysign_v4f32_v4f64:
51-
; CHECK-NO-EXTEND-ROUND: // %bb.0:
52-
; CHECK-NO-EXTEND-ROUND-NEXT: ptrue p0.d
53-
; CHECK-NO-EXTEND-ROUND-NEXT: and z0.s, z0.s, #0x7fffffff
54-
; CHECK-NO-EXTEND-ROUND-NEXT: fcvt z2.s, p0/m, z2.d
55-
; CHECK-NO-EXTEND-ROUND-NEXT: fcvt z1.s, p0/m, z1.d
56-
; CHECK-NO-EXTEND-ROUND-NEXT: uzp1 z1.s, z1.s, z2.s
57-
; CHECK-NO-EXTEND-ROUND-NEXT: and z1.s, z1.s, #0x80000000
58-
; CHECK-NO-EXTEND-ROUND-NEXT: orr z0.d, z0.d, z1.d
59-
; CHECK-NO-EXTEND-ROUND-NEXT: ret
60-
;
61-
; CHECK-EXTEND-ROUND-LABEL: test_copysign_v4f32_v4f64:
62-
; CHECK-EXTEND-ROUND: // %bb.0:
63-
; CHECK-EXTEND-ROUND-NEXT: ptrue p0.d
64-
; CHECK-EXTEND-ROUND-NEXT: uunpkhi z3.d, z0.s
65-
; CHECK-EXTEND-ROUND-NEXT: uunpklo z0.d, z0.s
66-
; CHECK-EXTEND-ROUND-NEXT: fcvt z2.s, p0/m, z2.d
67-
; CHECK-EXTEND-ROUND-NEXT: fcvt z1.s, p0/m, z1.d
68-
; CHECK-EXTEND-ROUND-NEXT: and z3.s, z3.s, #0x7fffffff
69-
; CHECK-EXTEND-ROUND-NEXT: and z0.s, z0.s, #0x7fffffff
70-
; CHECK-EXTEND-ROUND-NEXT: and z2.s, z2.s, #0x80000000
71-
; CHECK-EXTEND-ROUND-NEXT: and z1.s, z1.s, #0x80000000
72-
; CHECK-EXTEND-ROUND-NEXT: orr z2.d, z3.d, z2.d
73-
; CHECK-EXTEND-ROUND-NEXT: orr z0.d, z0.d, z1.d
74-
; CHECK-EXTEND-ROUND-NEXT: uzp1 z0.s, z0.s, z2.s
75-
; CHECK-EXTEND-ROUND-NEXT: ret
49+
; CHECK-LABEL: test_copysign_v4f32_v4f64:
50+
; CHECK: // %bb.0:
51+
; CHECK-NEXT: ptrue p0.d
52+
; CHECK-NEXT: and z0.s, z0.s, #0x7fffffff
53+
; CHECK-NEXT: fcvt z2.s, p0/m, z2.d
54+
; CHECK-NEXT: fcvt z1.s, p0/m, z1.d
55+
; CHECK-NEXT: uzp1 z1.s, z1.s, z2.s
56+
; CHECK-NEXT: and z1.s, z1.s, #0x80000000
57+
; CHECK-NEXT: orr z0.d, z0.d, z1.d
58+
; CHECK-NEXT: ret
7659
%tmp0 = fptrunc <vscale x 4 x double> %b to <vscale x 4 x float>
7760
%r = call <vscale x 4 x float> @llvm.copysign.v4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %tmp0)
7861
ret <vscale x 4 x float> %r
@@ -177,32 +160,16 @@ define <vscale x 4 x half> @test_copysign_v4f16_v4f32(<vscale x 4 x half> %a, <v
177160
}
178161

179162
define <vscale x 4 x half> @test_copysign_v4f16_v4f64(<vscale x 4 x half> %a, <vscale x 4 x double> %b) #0 {
180-
; CHECK-NO-EXTEND-ROUND-LABEL: test_copysign_v4f16_v4f64:
181-
; CHECK-NO-EXTEND-ROUND: // %bb.0:
182-
; CHECK-NO-EXTEND-ROUND-NEXT: ptrue p0.d
183-
; CHECK-NO-EXTEND-ROUND-NEXT: and z0.h, z0.h, #0x7fff
184-
; CHECK-NO-EXTEND-ROUND-NEXT: fcvt z2.h, p0/m, z2.d
185-
; CHECK-NO-EXTEND-ROUND-NEXT: fcvt z1.h, p0/m, z1.d
186-
; CHECK-NO-EXTEND-ROUND-NEXT: uzp1 z1.s, z1.s, z2.s
187-
; CHECK-NO-EXTEND-ROUND-NEXT: and z1.h, z1.h, #0x8000
188-
; CHECK-NO-EXTEND-ROUND-NEXT: orr z0.d, z0.d, z1.d
189-
; CHECK-NO-EXTEND-ROUND-NEXT: ret
190-
;
191-
; CHECK-EXTEND-ROUND-LABEL: test_copysign_v4f16_v4f64:
192-
; CHECK-EXTEND-ROUND: // %bb.0:
193-
; CHECK-EXTEND-ROUND-NEXT: ptrue p0.d
194-
; CHECK-EXTEND-ROUND-NEXT: uunpkhi z3.d, z0.s
195-
; CHECK-EXTEND-ROUND-NEXT: uunpklo z0.d, z0.s
196-
; CHECK-EXTEND-ROUND-NEXT: fcvt z2.h, p0/m, z2.d
197-
; CHECK-EXTEND-ROUND-NEXT: fcvt z1.h, p0/m, z1.d
198-
; CHECK-EXTEND-ROUND-NEXT: and z3.h, z3.h, #0x7fff
199-
; CHECK-EXTEND-ROUND-NEXT: and z0.h, z0.h, #0x7fff
200-
; CHECK-EXTEND-ROUND-NEXT: and z2.h, z2.h, #0x8000
201-
; CHECK-EXTEND-ROUND-NEXT: and z1.h, z1.h, #0x8000
202-
; CHECK-EXTEND-ROUND-NEXT: orr z2.d, z3.d, z2.d
203-
; CHECK-EXTEND-ROUND-NEXT: orr z0.d, z0.d, z1.d
204-
; CHECK-EXTEND-ROUND-NEXT: uzp1 z0.s, z0.s, z2.s
205-
; CHECK-EXTEND-ROUND-NEXT: ret
163+
; CHECK-LABEL: test_copysign_v4f16_v4f64:
164+
; CHECK: // %bb.0:
165+
; CHECK-NEXT: ptrue p0.d
166+
; CHECK-NEXT: and z0.h, z0.h, #0x7fff
167+
; CHECK-NEXT: fcvt z2.h, p0/m, z2.d
168+
; CHECK-NEXT: fcvt z1.h, p0/m, z1.d
169+
; CHECK-NEXT: uzp1 z1.s, z1.s, z2.s
170+
; CHECK-NEXT: and z1.h, z1.h, #0x8000
171+
; CHECK-NEXT: orr z0.d, z0.d, z1.d
172+
; CHECK-NEXT: ret
206173
%tmp0 = fptrunc <vscale x 4 x double> %b to <vscale x 4 x half>
207174
%r = call <vscale x 4 x half> @llvm.copysign.v4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %tmp0)
208175
ret <vscale x 4 x half> %r
@@ -224,32 +191,16 @@ define <vscale x 8 x half> @test_copysign_v8f16_v8f16(<vscale x 8 x half> %a, <v
224191
}
225192

226193
define <vscale x 8 x half> @test_copysign_v8f16_v8f32(<vscale x 8 x half> %a, <vscale x 8 x float> %b) #0 {
227-
; CHECK-NO-EXTEND-ROUND-LABEL: test_copysign_v8f16_v8f32:
228-
; CHECK-NO-EXTEND-ROUND: // %bb.0:
229-
; CHECK-NO-EXTEND-ROUND-NEXT: ptrue p0.s
230-
; CHECK-NO-EXTEND-ROUND-NEXT: and z0.h, z0.h, #0x7fff
231-
; CHECK-NO-EXTEND-ROUND-NEXT: fcvt z2.h, p0/m, z2.s
232-
; CHECK-NO-EXTEND-ROUND-NEXT: fcvt z1.h, p0/m, z1.s
233-
; CHECK-NO-EXTEND-ROUND-NEXT: uzp1 z1.h, z1.h, z2.h
234-
; CHECK-NO-EXTEND-ROUND-NEXT: and z1.h, z1.h, #0x8000
235-
; CHECK-NO-EXTEND-ROUND-NEXT: orr z0.d, z0.d, z1.d
236-
; CHECK-NO-EXTEND-ROUND-NEXT: ret
237-
;
238-
; CHECK-EXTEND-ROUND-LABEL: test_copysign_v8f16_v8f32:
239-
; CHECK-EXTEND-ROUND: // %bb.0:
240-
; CHECK-EXTEND-ROUND-NEXT: ptrue p0.s
241-
; CHECK-EXTEND-ROUND-NEXT: uunpkhi z3.s, z0.h
242-
; CHECK-EXTEND-ROUND-NEXT: uunpklo z0.s, z0.h
243-
; CHECK-EXTEND-ROUND-NEXT: fcvt z2.h, p0/m, z2.s
244-
; CHECK-EXTEND-ROUND-NEXT: fcvt z1.h, p0/m, z1.s
245-
; CHECK-EXTEND-ROUND-NEXT: and z3.h, z3.h, #0x7fff
246-
; CHECK-EXTEND-ROUND-NEXT: and z0.h, z0.h, #0x7fff
247-
; CHECK-EXTEND-ROUND-NEXT: and z2.h, z2.h, #0x8000
248-
; CHECK-EXTEND-ROUND-NEXT: and z1.h, z1.h, #0x8000
249-
; CHECK-EXTEND-ROUND-NEXT: orr z2.d, z3.d, z2.d
250-
; CHECK-EXTEND-ROUND-NEXT: orr z0.d, z0.d, z1.d
251-
; CHECK-EXTEND-ROUND-NEXT: uzp1 z0.h, z0.h, z2.h
252-
; CHECK-EXTEND-ROUND-NEXT: ret
194+
; CHECK-LABEL: test_copysign_v8f16_v8f32:
195+
; CHECK: // %bb.0:
196+
; CHECK-NEXT: ptrue p0.s
197+
; CHECK-NEXT: and z0.h, z0.h, #0x7fff
198+
; CHECK-NEXT: fcvt z2.h, p0/m, z2.s
199+
; CHECK-NEXT: fcvt z1.h, p0/m, z1.s
200+
; CHECK-NEXT: uzp1 z1.h, z1.h, z2.h
201+
; CHECK-NEXT: and z1.h, z1.h, #0x8000
202+
; CHECK-NEXT: orr z0.d, z0.d, z1.d
203+
; CHECK-NEXT: ret
253204
%tmp0 = fptrunc <vscale x 8 x float> %b to <vscale x 8 x half>
254205
%r = call <vscale x 8 x half> @llvm.copysign.v8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %tmp0)
255206
ret <vscale x 8 x half> %r
@@ -259,48 +210,28 @@ define <vscale x 8 x half> @test_copysign_v8f16_v8f32(<vscale x 8 x half> %a, <v
259210
;========== FCOPYSIGN_EXTEND_ROUND
260211

261212
define <vscale x 4 x half> @test_copysign_nxv4f32_nxv4f16(<vscale x 4 x float> %a, <vscale x 4 x float> %b) #0 {
262-
; CHECK-NO-EXTEND-ROUND-LABEL: test_copysign_nxv4f32_nxv4f16:
263-
; CHECK-NO-EXTEND-ROUND: // %bb.0:
264-
; CHECK-NO-EXTEND-ROUND-NEXT: and z1.s, z1.s, #0x80000000
265-
; CHECK-NO-EXTEND-ROUND-NEXT: and z0.s, z0.s, #0x7fffffff
266-
; CHECK-NO-EXTEND-ROUND-NEXT: ptrue p0.s
267-
; CHECK-NO-EXTEND-ROUND-NEXT: orr z0.d, z0.d, z1.d
268-
; CHECK-NO-EXTEND-ROUND-NEXT: fcvt z0.h, p0/m, z0.s
269-
; CHECK-NO-EXTEND-ROUND-NEXT: ret
270-
;
271-
; CHECK-EXTEND-ROUND-LABEL: test_copysign_nxv4f32_nxv4f16:
272-
; CHECK-EXTEND-ROUND: // %bb.0:
273-
; CHECK-EXTEND-ROUND-NEXT: ptrue p0.s
274-
; CHECK-EXTEND-ROUND-NEXT: fcvt z0.h, p0/m, z0.s
275-
; CHECK-EXTEND-ROUND-NEXT: fcvt z1.h, p0/m, z1.s
276-
; CHECK-EXTEND-ROUND-NEXT: and z1.h, z1.h, #0x8000
277-
; CHECK-EXTEND-ROUND-NEXT: and z0.h, z0.h, #0x7fff
278-
; CHECK-EXTEND-ROUND-NEXT: orr z0.d, z0.d, z1.d
279-
; CHECK-EXTEND-ROUND-NEXT: ret
213+
; CHECK-LABEL: test_copysign_nxv4f32_nxv4f16:
214+
; CHECK: // %bb.0:
215+
; CHECK-NEXT: and z1.s, z1.s, #0x80000000
216+
; CHECK-NEXT: and z0.s, z0.s, #0x7fffffff
217+
; CHECK-NEXT: ptrue p0.s
218+
; CHECK-NEXT: orr z0.d, z0.d, z1.d
219+
; CHECK-NEXT: fcvt z0.h, p0/m, z0.s
220+
; CHECK-NEXT: ret
280221
%t1 = call <vscale x 4 x float> @llvm.copysign.v4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b)
281222
%t2 = fptrunc <vscale x 4 x float> %t1 to <vscale x 4 x half>
282223
ret <vscale x 4 x half> %t2
283224
}
284225

285226
define <vscale x 2 x float> @test_copysign_nxv2f64_nxv2f32(<vscale x 2 x double> %a, <vscale x 2 x double> %b) #0 {
286-
; CHECK-NO-EXTEND-ROUND-LABEL: test_copysign_nxv2f64_nxv2f32:
287-
; CHECK-NO-EXTEND-ROUND: // %bb.0:
288-
; CHECK-NO-EXTEND-ROUND-NEXT: and z1.d, z1.d, #0x8000000000000000
289-
; CHECK-NO-EXTEND-ROUND-NEXT: and z0.d, z0.d, #0x7fffffffffffffff
290-
; CHECK-NO-EXTEND-ROUND-NEXT: ptrue p0.d
291-
; CHECK-NO-EXTEND-ROUND-NEXT: orr z0.d, z0.d, z1.d
292-
; CHECK-NO-EXTEND-ROUND-NEXT: fcvt z0.s, p0/m, z0.d
293-
; CHECK-NO-EXTEND-ROUND-NEXT: ret
294-
;
295-
; CHECK-EXTEND-ROUND-LABEL: test_copysign_nxv2f64_nxv2f32:
296-
; CHECK-EXTEND-ROUND: // %bb.0:
297-
; CHECK-EXTEND-ROUND-NEXT: ptrue p0.d
298-
; CHECK-EXTEND-ROUND-NEXT: fcvt z0.s, p0/m, z0.d
299-
; CHECK-EXTEND-ROUND-NEXT: fcvt z1.s, p0/m, z1.d
300-
; CHECK-EXTEND-ROUND-NEXT: and z1.s, z1.s, #0x80000000
301-
; CHECK-EXTEND-ROUND-NEXT: and z0.s, z0.s, #0x7fffffff
302-
; CHECK-EXTEND-ROUND-NEXT: orr z0.d, z0.d, z1.d
303-
; CHECK-EXTEND-ROUND-NEXT: ret
227+
; CHECK-LABEL: test_copysign_nxv2f64_nxv2f32:
228+
; CHECK: // %bb.0:
229+
; CHECK-NEXT: and z1.d, z1.d, #0x8000000000000000
230+
; CHECK-NEXT: and z0.d, z0.d, #0x7fffffffffffffff
231+
; CHECK-NEXT: ptrue p0.d
232+
; CHECK-NEXT: orr z0.d, z0.d, z1.d
233+
; CHECK-NEXT: fcvt z0.s, p0/m, z0.d
234+
; CHECK-NEXT: ret
304235
%t1 = call <vscale x 2 x double> @llvm.copysign.v2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b)
305236
%t2 = fptrunc <vscale x 2 x double> %t1 to <vscale x 2 x float>
306237
ret <vscale x 2 x float> %t2

llvm/test/CodeGen/AArch64/sve-fixed-length-fcopysign.ll

Lines changed: 14 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2-
; RUN: llc -aarch64-sve-vector-bits-min=256 < %s | FileCheck %s -check-prefixes=CHECK,VBITS_GE_256,CHECK_NO_EXTEND_ROUND
3-
; RUN: llc -aarch64-sve-vector-bits-min=512 < %s | FileCheck %s -check-prefixes=CHECK,VBITS_GE_512,CHECK_NO_EXTEND_ROUND
4-
; RUN: llc -aarch64-sve-vector-bits-min=2048 < %s | FileCheck %s -check-prefixes=CHECK,VBITS_GE_512,CHECK_NO_EXTEND_ROUND
5-
; RUN: llc -aarch64-sve-vector-bits-min=256 --combiner-vector-fcopysign-extend-round < %s | FileCheck %s -check-prefixes=CHECK,VBITS_GE_256,CHECK_EXTEND_ROUND
6-
; RUN: llc -aarch64-sve-vector-bits-min=512 --combiner-vector-fcopysign-extend-round < %s | FileCheck %s -check-prefixes=CHECK,VBITS_GE_512,CHECK_EXTEND_ROUND
7-
; RUN: llc -aarch64-sve-vector-bits-min=2048 --combiner-vector-fcopysign-extend-round < %s | FileCheck %s -check-prefixes=CHECK,VBITS_GE_512,CHECK_EXTEND_ROUND
2+
; RUN: llc -aarch64-sve-vector-bits-min=256 < %s | FileCheck %s -check-prefixes=CHECK,VBITS_GE_256
3+
; RUN: llc -aarch64-sve-vector-bits-min=512 < %s | FileCheck %s -check-prefixes=CHECK,VBITS_GE_512
4+
; RUN: llc -aarch64-sve-vector-bits-min=2048 < %s | FileCheck %s -check-prefixes=CHECK,VBITS_GE_512
85

96
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
107

@@ -436,30 +433,17 @@ define void @test_copysign_v2f64_v2f32(ptr %ap, ptr %bp) vscale_range(2,0) #0 {
436433

437434
; SplitVecRes mismatched
438435
define void @test_copysign_v4f64_v4f32(ptr %ap, ptr %bp) vscale_range(2,0) #0 {
439-
; CHECK_NO_EXTEND_ROUND-LABEL: test_copysign_v4f64_v4f32:
440-
; CHECK_NO_EXTEND_ROUND: // %bb.0:
441-
; CHECK_NO_EXTEND_ROUND-NEXT: ptrue p0.d, vl4
442-
; CHECK_NO_EXTEND_ROUND-NEXT: ld1w { z0.d }, p0/z, [x1]
443-
; CHECK_NO_EXTEND_ROUND-NEXT: ld1d { z1.d }, p0/z, [x0]
444-
; CHECK_NO_EXTEND_ROUND-NEXT: fcvt z0.d, p0/m, z0.s
445-
; CHECK_NO_EXTEND_ROUND-NEXT: and z1.d, z1.d, #0x7fffffffffffffff
446-
; CHECK_NO_EXTEND_ROUND-NEXT: and z0.d, z0.d, #0x8000000000000000
447-
; CHECK_NO_EXTEND_ROUND-NEXT: orr z0.d, z1.d, z0.d
448-
; CHECK_NO_EXTEND_ROUND-NEXT: st1d { z0.d }, p0, [x0]
449-
; CHECK_NO_EXTEND_ROUND-NEXT: ret
450-
;
451-
; CHECK_EXTEND_ROUND-LABEL: test_copysign_v4f64_v4f32:
452-
; CHECK_EXTEND_ROUND: // %bb.0:
453-
; CHECK_EXTEND_ROUND-NEXT: ldr q0, [x1]
454-
; CHECK_EXTEND_ROUND-NEXT: ptrue p0.d, vl4
455-
; CHECK_EXTEND_ROUND-NEXT: uunpklo z0.d, z0.s
456-
; CHECK_EXTEND_ROUND-NEXT: ld1d { z1.d }, p0/z, [x0]
457-
; CHECK_EXTEND_ROUND-NEXT: and z1.d, z1.d, #0x7fffffffffffffff
458-
; CHECK_EXTEND_ROUND-NEXT: fcvt z0.d, p0/m, z0.s
459-
; CHECK_EXTEND_ROUND-NEXT: and z0.d, z0.d, #0x8000000000000000
460-
; CHECK_EXTEND_ROUND-NEXT: orr z0.d, z1.d, z0.d
461-
; CHECK_EXTEND_ROUND-NEXT: st1d { z0.d }, p0, [x0]
462-
; CHECK_EXTEND_ROUND-NEXT: ret
436+
; CHECK-LABEL: test_copysign_v4f64_v4f32:
437+
; CHECK: // %bb.0:
438+
; CHECK-NEXT: ptrue p0.d, vl4
439+
; CHECK-NEXT: ld1w { z0.d }, p0/z, [x1]
440+
; CHECK-NEXT: ld1d { z1.d }, p0/z, [x0]
441+
; CHECK-NEXT: fcvt z0.d, p0/m, z0.s
442+
; CHECK-NEXT: and z1.d, z1.d, #0x7fffffffffffffff
443+
; CHECK-NEXT: and z0.d, z0.d, #0x8000000000000000
444+
; CHECK-NEXT: orr z0.d, z1.d, z0.d
445+
; CHECK-NEXT: st1d { z0.d }, p0, [x0]
446+
; CHECK-NEXT: ret
463447
%a = load <4 x double>, ptr %ap
464448
%b = load <4 x float>, ptr %bp
465449
%tmp0 = fpext <4 x float> %b to <4 x double>

0 commit comments

Comments
 (0)