@@ -720,10 +720,12 @@ ABIArgInfo DefaultABIInfo::classifyReturnType(QualType RetTy) const {
720
720
// This is a very simple ABI that relies a lot on DefaultABIInfo.
721
721
// ===----------------------------------------------------------------------===//
722
722
723
- class WebAssemblyABIInfo final : public DefaultABIInfo {
723
+ class WebAssemblyABIInfo final : public SwiftABIInfo {
724
+ DefaultABIInfo defaultInfo;
725
+
724
726
public:
725
727
explicit WebAssemblyABIInfo (CodeGen::CodeGenTypes &CGT)
726
- : DefaultABIInfo (CGT) {}
728
+ : SwiftABIInfo(CGT), defaultInfo (CGT) {}
727
729
728
730
private:
729
731
ABIArgInfo classifyReturnType (QualType RetTy) const ;
@@ -741,6 +743,15 @@ class WebAssemblyABIInfo final : public DefaultABIInfo {
741
743
742
744
Address EmitVAArg (CodeGenFunction &CGF, Address VAListAddr,
743
745
QualType Ty) const override ;
746
+
747
+ bool shouldPassIndirectlyForSwift (ArrayRef<llvm::Type*> scalars,
748
+ bool asReturnValue) const override {
749
+ return occupiesMoreThan (CGT, scalars, /* total*/ 4 );
750
+ }
751
+
752
+ bool isSwiftErrorInRegister () const override {
753
+ return false ;
754
+ }
744
755
};
745
756
746
757
class WebAssemblyTargetCodeGenInfo final : public TargetCodeGenInfo {
@@ -778,7 +789,7 @@ ABIArgInfo WebAssemblyABIInfo::classifyArgumentType(QualType Ty) const {
778
789
}
779
790
780
791
// Otherwise just do the default thing.
781
- return DefaultABIInfo:: classifyArgumentType (Ty);
792
+ return defaultInfo. classifyArgumentType (Ty);
782
793
}
783
794
784
795
ABIArgInfo WebAssemblyABIInfo::classifyReturnType (QualType RetTy) const {
@@ -798,7 +809,7 @@ ABIArgInfo WebAssemblyABIInfo::classifyReturnType(QualType RetTy) const {
798
809
}
799
810
800
811
// Otherwise just do the default thing.
801
- return DefaultABIInfo:: classifyReturnType (RetTy);
812
+ return defaultInfo. classifyReturnType (RetTy);
802
813
}
803
814
804
815
Address WebAssemblyABIInfo::EmitVAArg (CodeGenFunction &CGF, Address VAListAddr,
0 commit comments