Skip to content

Commit 1723f80

Browse files
authored
[ARM] Allow s constraints on half (#157860)
Fix a regression from #147559.
1 parent e790c97 commit 1723f80

File tree

2 files changed

+82
-3
lines changed

2 files changed

+82
-3
lines changed

llvm/lib/Target/ARM/ARMISelLowering.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20304,9 +20304,11 @@ ARMTargetLowering::getSingleConstraintMatchWeight(
2030420304
static bool isIncompatibleReg(const MCPhysReg &PR, MVT VT) {
2030520305
if (PR == 0 || VT == MVT::Other)
2030620306
return false;
20307-
return (ARM::SPRRegClass.contains(PR) && VT != MVT::f32 && VT != MVT::i32) ||
20308-
(ARM::DPRRegClass.contains(PR) && VT != MVT::f64 &&
20309-
!VT.is64BitVector());
20307+
if (ARM::SPRRegClass.contains(PR))
20308+
return VT != MVT::f32 && VT != MVT::f16 && VT != MVT::i32;
20309+
if (ARM::DPRRegClass.contains(PR))
20310+
return VT != MVT::f64 && !VT.is64BitVector();
20311+
return false;
2031020312
}
2031120313

2031220314
using RCPair = std::pair<unsigned, const TargetRegisterClass *>;

llvm/test/CodeGen/ARM/inlineasm-fp-half.ll

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,3 +495,80 @@ entry:
495495
%0 = tail call bfloat asm "vmov $0, $1", "=x,x"(bfloat %x)
496496
ret bfloat %0
497497
}
498+
499+
define half @half_s(half %x) nounwind {
500+
; NO-FP16-SOFTFP-LABEL: half_s:
501+
; NO-FP16-SOFTFP: @ %bb.0: @ %entry
502+
; NO-FP16-SOFTFP-NEXT: vmov s2, r0
503+
; NO-FP16-SOFTFP-NEXT: @APP
504+
; NO-FP16-SOFTFP-NEXT: vmov.f32 s1, s2
505+
; NO-FP16-SOFTFP-NEXT: @NO_APP
506+
; NO-FP16-SOFTFP-NEXT: vmov r0, s1
507+
; NO-FP16-SOFTFP-NEXT: bx lr
508+
;
509+
; NO-FP16-HARD-LABEL: half_s:
510+
; NO-FP16-HARD: @ %bb.0: @ %entry
511+
; NO-FP16-HARD-NEXT: vmov.f32 s2, s0
512+
; NO-FP16-HARD-NEXT: @APP
513+
; NO-FP16-HARD-NEXT: vmov.f32 s1, s2
514+
; NO-FP16-HARD-NEXT: @NO_APP
515+
; NO-FP16-HARD-NEXT: vmov.f32 s0, s1
516+
; NO-FP16-HARD-NEXT: bx lr
517+
;
518+
; FP16-SOFTFP-LABEL: half_s:
519+
; FP16-SOFTFP: @ %bb.0: @ %entry
520+
; FP16-SOFTFP-NEXT: vmov.f16 s2, r0
521+
; FP16-SOFTFP-NEXT: @APP
522+
; FP16-SOFTFP-NEXT: vmov.f32 s1, s2
523+
; FP16-SOFTFP-NEXT: @NO_APP
524+
; FP16-SOFTFP-NEXT: vmov r0, s1
525+
; FP16-SOFTFP-NEXT: bx lr
526+
;
527+
; FP16-HARD-LABEL: half_s:
528+
; FP16-HARD: @ %bb.0: @ %entry
529+
; FP16-HARD-NEXT: vmov.f32 s2, s0
530+
; FP16-HARD-NEXT: @APP
531+
; FP16-HARD-NEXT: vmov.f32 s1, s2
532+
; FP16-HARD-NEXT: @NO_APP
533+
; FP16-HARD-NEXT: vmov.f32 s0, s1
534+
; FP16-HARD-NEXT: bx lr
535+
;
536+
; BF16-SOFTFP-LABEL: half_s:
537+
; BF16-SOFTFP: @ %bb.0: @ %entry
538+
; BF16-SOFTFP-NEXT: vmov.f16 s2, r0
539+
; BF16-SOFTFP-NEXT: @APP
540+
; BF16-SOFTFP-NEXT: vmov.f32 s1, s2
541+
; BF16-SOFTFP-NEXT: @NO_APP
542+
; BF16-SOFTFP-NEXT: vmov r0, s1
543+
; BF16-SOFTFP-NEXT: bx lr
544+
;
545+
; SIMD-BF16-SOFTFP-LABEL: half_s:
546+
; SIMD-BF16-SOFTFP: @ %bb.0: @ %entry
547+
; SIMD-BF16-SOFTFP-NEXT: vmov.f16 s2, r0
548+
; SIMD-BF16-SOFTFP-NEXT: @APP
549+
; SIMD-BF16-SOFTFP-NEXT: vmov.f32 s1, s2
550+
; SIMD-BF16-SOFTFP-NEXT: @NO_APP
551+
; SIMD-BF16-SOFTFP-NEXT: vmov r0, s1
552+
; SIMD-BF16-SOFTFP-NEXT: bx lr
553+
;
554+
; BF16-HARD-LABEL: half_s:
555+
; BF16-HARD: @ %bb.0: @ %entry
556+
; BF16-HARD-NEXT: vmov.f32 s2, s0
557+
; BF16-HARD-NEXT: @APP
558+
; BF16-HARD-NEXT: vmov.f32 s1, s2
559+
; BF16-HARD-NEXT: @NO_APP
560+
; BF16-HARD-NEXT: vmov.f32 s0, s1
561+
; BF16-HARD-NEXT: bx lr
562+
;
563+
; SIMD-BF16-HARD-LABEL: half_s:
564+
; SIMD-BF16-HARD: @ %bb.0: @ %entry
565+
; SIMD-BF16-HARD-NEXT: vmov.f32 s2, s0
566+
; SIMD-BF16-HARD-NEXT: @APP
567+
; SIMD-BF16-HARD-NEXT: vmov.f32 s1, s2
568+
; SIMD-BF16-HARD-NEXT: @NO_APP
569+
; SIMD-BF16-HARD-NEXT: vmov.f32 s0, s1
570+
; SIMD-BF16-HARD-NEXT: bx lr
571+
entry:
572+
%0 = tail call half asm "vmov $0, $1", "={s1},{s2}"(half %x)
573+
ret half %0
574+
}

0 commit comments

Comments
 (0)