[WebAssembly] Rename floating-point operators to match their spec names.
[oota-llvm.git] / test / CodeGen / WebAssembly / f32.ll
1 ; RUN: llc < %s -asm-verbose=false | FileCheck %s
2
3 ; Test that basic 32-bit floating-point operations assemble as expected.
4
5 target datalayout = "e-p:32:32-i64:64-n32:64-S128"
6 target triple = "wasm32-unknown-unknown"
7
8 declare float @llvm.fabs.f32(float)
9 declare float @llvm.copysign.f32(float, float)
10 declare float @llvm.sqrt.f32(float)
11 declare float @llvm.ceil.f32(float)
12 declare float @llvm.floor.f32(float)
13 declare float @llvm.trunc.f32(float)
14 declare float @llvm.nearbyint.f32(float)
15 declare float @llvm.rint.f32(float)
16
17 ; CHECK-LABEL: fadd32:
18 ; CHECK-NEXT: .param f32{{$}}
19 ; CHECK-NEXT: .param f32{{$}}
20 ; CHECK-NEXT: .result f32{{$}}
21 ; CHECK-NEXT: @1{{$}}
22 ; CHECK-NEXT: set_local @2, pop{{$}}
23 ; CHECK-NEXT: @0{{$}}
24 ; CHECK-NEXT: set_local @3, pop{{$}}
25 ; CHECK-NEXT: add @3, @2{{$}}
26 ; CHECK-NEXT: set_local @4, pop{{$}}
27 ; CHECK-NEXT: return @4{{$}}
28 define float @fadd32(float %x, float %y) {
29   %a = fadd float %x, %y
30   ret float %a
31 }
32
33 ; CHECK-LABEL: fsub32:
34 ; CHECK: sub @3, @2{{$}}
35 ; CHECK-NEXT: set_local @4, pop{{$}}
36 define float @fsub32(float %x, float %y) {
37   %a = fsub float %x, %y
38   ret float %a
39 }
40
41 ; CHECK-LABEL: fmul32:
42 ; CHECK: mul @3, @2{{$}}
43 ; CHECK-NEXT: set_local @4, pop{{$}}
44 define float @fmul32(float %x, float %y) {
45   %a = fmul float %x, %y
46   ret float %a
47 }
48
49 ; CHECK-LABEL: fdiv32:
50 ; CHECK: div @3, @2{{$}}
51 ; CHECK-NEXT: set_local @4, pop{{$}}
52 define float @fdiv32(float %x, float %y) {
53   %a = fdiv float %x, %y
54   ret float %a
55 }
56
57 ; CHECK-LABEL: fabs32:
58 ; CHECK: abs @1{{$}}
59 ; CHECK-NEXT: set_local @2, pop{{$}}
60 define float @fabs32(float %x) {
61   %a = call float @llvm.fabs.f32(float %x)
62   ret float %a
63 }
64
65 ; CHECK-LABEL: fneg32:
66 ; CHECK: neg @1{{$}}
67 ; CHECK-NEXT: set_local @2, pop{{$}}
68 define float @fneg32(float %x) {
69   %a = fsub float -0., %x
70   ret float %a
71 }
72
73 ; CHECK-LABEL: copysign32:
74 ; CHECK: copysign @3, @2{{$}}
75 ; CHECK-NEXT: set_local @4, pop{{$}}
76 define float @copysign32(float %x, float %y) {
77   %a = call float @llvm.copysign.f32(float %x, float %y)
78   ret float %a
79 }
80
81 ; CHECK-LABEL: sqrt32:
82 ; CHECK: sqrt @1{{$}}
83 ; CHECK-NEXT: set_local @2, pop{{$}}
84 define float @sqrt32(float %x) {
85   %a = call float @llvm.sqrt.f32(float %x)
86   ret float %a
87 }
88
89 ; CHECK-LABEL: ceil32:
90 ; CHECK: ceil @1{{$}}
91 ; CHECK-NEXT: set_local @2, pop{{$}}
92 define float @ceil32(float %x) {
93   %a = call float @llvm.ceil.f32(float %x)
94   ret float %a
95 }
96
97 ; CHECK-LABEL: floor32:
98 ; CHECK: floor @1{{$}}
99 ; CHECK-NEXT: set_local @2, pop{{$}}
100 define float @floor32(float %x) {
101   %a = call float @llvm.floor.f32(float %x)
102   ret float %a
103 }
104
105 ; CHECK-LABEL: trunc32:
106 ; CHECK: trunc @1{{$}}
107 ; CHECK-NEXT: set_local @2, pop{{$}}
108 define float @trunc32(float %x) {
109   %a = call float @llvm.trunc.f32(float %x)
110   ret float %a
111 }
112
113 ; CHECK-LABEL: nearest32:
114 ; CHECK: nearest @1{{$}}
115 ; CHECK-NEXT: set_local @2, pop{{$}}
116 define float @nearest32(float %x) {
117   %a = call float @llvm.nearbyint.f32(float %x)
118   ret float %a
119 }
120
121 ; CHECK-LABEL: nearest32_via_rint:
122 ; CHECK: nearest @1{{$}}
123 ; CHECK-NEXT: set_local @2, pop{{$}}
124 define float @nearest32_via_rint(float %x) {
125   %a = call float @llvm.rint.f32(float %x)
126   ret float %a
127 }