Skip to content

Commit 7ade8dc

Browse files
authored
[WebAssembly] Support fp reg class in r constraint (#83)
Patch by snek Reviewed By: aheejin Differential Revision: https://reviews.llvm.org/D90978
1 parent ee16174 commit 7ade8dc

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,16 @@ WebAssemblyTargetLowering::getRegForInlineAsmConstraint(
542542
if (VT.getSizeInBits() <= 64)
543543
return std::make_pair(0U, &WebAssembly::I64RegClass);
544544
}
545+
if (VT.isFloatingPoint() && !VT.isVector()) {
546+
switch (VT.getSizeInBits()) {
547+
case 32:
548+
return std::make_pair(0U, &WebAssembly::F32RegClass);
549+
case 64:
550+
return std::make_pair(0U, &WebAssembly::F64RegClass);
551+
default:
552+
break;
553+
}
554+
}
545555
break;
546556
default:
547557
break;

llvm/test/CodeGen/WebAssembly/inline-asm.ll

+26
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,32 @@ entry:
4646
ret i64 %0
4747
}
4848

49+
; CHECK-LABEL: foo_float:
50+
; CHECK-NEXT: .functype foo_float (f32) -> (f32){{$}}
51+
; CHECK-NEXT: #APP{{$}}
52+
; CHECK-NEXT: # 0 = aaa(0){{$}}
53+
; CHECK-NEXT: #NO_APP{{$}}
54+
; CHECK-NEXT: local.get $push0=, 0{{$}}
55+
; CHECK-NEXT: return $pop0{{$}}
56+
define float @foo_float(float %r) {
57+
entry:
58+
%0 = tail call float asm sideeffect "# $0 = aaa($1)", "=r,r"(float %r) #0, !srcloc !0
59+
ret float %0
60+
}
61+
62+
; CHECK-LABEL: foo_double:
63+
; CHECK-NEXT: .functype foo_double (f64) -> (f64){{$}}
64+
; CHECK-NEXT: #APP{{$}}
65+
; CHECK-NEXT: # 0 = aaa(0){{$}}
66+
; CHECK-NEXT: #NO_APP{{$}}
67+
; CHECK-NEXT: local.get $push0=, 0{{$}}
68+
; CHECK-NEXT: return $pop0{{$}}
69+
define double @foo_double(double %r) {
70+
entry:
71+
%0 = tail call double asm sideeffect "# $0 = aaa($1)", "=r,r"(double %r) #0, !srcloc !0
72+
ret double %0
73+
}
74+
4975
; CHECK-LABEL: X_i16:
5076
; CHECK: foo 1{{$}}
5177
; CHECK: local.get $push[[S0:[0-9]+]]=, 0{{$}}

0 commit comments

Comments
 (0)