1 ; RUN: llc < %s -asm-verbose=false | FileCheck %s
3 ; Test that basic 32-bit floating-point operations assemble as expected.
5 target datalayout = "e-p:32:32-i64:64-n32:64-S128"
6 target triple = "wasm32-unknown-unknown"
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)
17 ; CHECK-LABEL: fadd32:
18 ; CHECK-NEXT: .param f32{{$}}
19 ; CHECK-NEXT: .param f32{{$}}
20 ; CHECK-NEXT: .result f32{{$}}
22 ; CHECK-NEXT: set_local @2, pop{{$}}
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
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
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
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
57 ; CHECK-LABEL: fabs32:
59 ; CHECK-NEXT: set_local @2, pop{{$}}
60 define float @fabs32(float %x) {
61 %a = call float @llvm.fabs.f32(float %x)
65 ; CHECK-LABEL: fneg32:
67 ; CHECK-NEXT: set_local @2, pop{{$}}
68 define float @fneg32(float %x) {
69 %a = fsub float -0., %x
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)
81 ; CHECK-LABEL: sqrt32:
83 ; CHECK-NEXT: set_local @2, pop{{$}}
84 define float @sqrt32(float %x) {
85 %a = call float @llvm.sqrt.f32(float %x)
89 ; CHECK-LABEL: ceil32:
91 ; CHECK-NEXT: set_local @2, pop{{$}}
92 define float @ceil32(float %x) {
93 %a = call float @llvm.ceil.f32(float %x)
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)
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)
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)
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)