Dan Gohman d39c38d2bc [WebAssembly] Reapply r252858, with svn add for the new file.
Switch to MC for instruction printing.

This encompasses several changes which are all interconnected:
 - Use the MC framework for printing almost all instructions.
 - AsmStrings are now live.
 - This introduces an indirection between LLVM vregs and WebAssembly registers,
   and a new pass, WebAssemblyRegNumbering, for computing a basic the mapping.
   This addresses some basic issues with argument registers and unused registers.
 - The way ARGUMENT instructions are handled no longer generates redundant
   get_local+set_local for every argument.

This also changes the assembly syntax somewhat; most notably, MC's printing
does not use sigils on label names, so those are no longer present, and
push/pop now have a sigil to keep them unambiguous.

The usage of set_local/get_local/$push/$pop will continue to evolve
significantly. This patch is just one step of a larger change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@252910 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-12 17:04:33 +00:00

33 lines
1.1 KiB
LLVM

; RUN: llc < %s -asm-verbose=false | FileCheck %s
target datalayout = "e-p:32:32-i64:64-n32:64-S128"
target triple = "wasm32-unknown-unknown"
; CHECK-LABEL: .text
; CHECK-LABEL: f:
define void @f(i32 %a, float %b, i128 %c, i1 %d) {
tail call i32 @printi(i32 %a)
tail call float @printf(float %b)
tail call void @printv()
tail call void @split_arg(i128 %c)
tail call void @expanded_arg(i1 %d)
tail call i1 @lowered_result()
ret void
}
; 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 add2 "" add2 (param i32 i32) (result i32){{$}}
; CHECK-NEXT: .import split_arg "" split_arg (param i64 i64){{$}}
; CHECK-NEXT: .import expanded_arg "" expanded_arg (param i32){{$}}
; CHECK-NEXT: .import lowered_result "" lowered_result (result i32){{$}}
declare i32 @printi(i32)
declare float @printf(float)
declare void @printv()
declare i32 @add2(i32, i32)
declare void @split_arg(i128)
declare void @expanded_arg(i1)
declare i1 @lowered_result()