[WebAssembly] Fix import statement

Summary:
Imports should be generated like (param i32 f32...) not (param i32) (param f32) ...

Author: binji
Reviewers: jfb
Subscribers: jfb, dschuff
llvm-svn: 251714
This commit is contained in:
JF Bastien 2015-10-30 16:41:21 +00:00
parent b2978da715
commit 5789a69435
2 changed files with 13 additions and 10 deletions

View File

@ -339,24 +339,25 @@ void WebAssemblyAsmPrinter::EmitInstruction(const MachineInstr *MI) {
}
void WebAssemblyAsmPrinter::EmitEndOfAsmFile(Module &M) {
SmallString<128> Str;
raw_svector_ostream OS(Str);
SmallString<128> Str;
raw_svector_ostream OS(Str);
for (const Function &F : M)
if (F.isDeclarationForLinker()) {
assert(F.hasName() && "imported functions must have a name");
if (F.getName().startswith("llvm."))
continue;
continue;
if (Str.empty())
OS << "\t.imports\n";
OS << "\t.imports\n";
Type *Rt = F.getReturnType();
OS << "\t.import " << toSymbol(F.getName()) << " \"\" \"" << F.getName()
<< "\"";
OS << "\t.import " << toSymbol(F.getName()) << " \"\" \"" << F.getName()
<< "\" (param";
for (const Argument &A : F.args())
OS << " (param " << toString(A.getType()) << ')';
OS << ' ' << toString(A.getType());
OS << ')';
if (!Rt->isVoidTy())
OS << " (result " << toString(Rt) << ')';
OS << " (result " << toString(Rt) << ')';
OS << '\n';
}
}
OutStreamer->EmitRawText(OS.str());
}

View File

@ -15,7 +15,9 @@ define void @f(i32 %a, float %b) {
; CHECK-LABEL: .imports
; CHECK-NEXT: .import $printi "" "printi" (param i32) (result i32)
; CHECK-NEXT: .import $printf "" "printf" (param f32) (result f32)
; CHECK-NEXT: .import $printv "" "printv"
; CHECK-NEXT: .import $printv "" "printv" (param)
; CHECK-NEXT: .import $add2 "" "add2" (param i32 i32) (result i32)
declare i32 @printi(i32)
declare float @printf(float)
declare void @printv()
declare i32 @add2(i32, i32)