xref: /llvm-project/llvm/test/CodeGen/WebAssembly/load.ll (revision 73856247eef35f5336e485dc009842a5b991c421)
1; RUN: llc < %s --mtriple=wasm32-unknown-unknown -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-keep-registers | FileCheck --check-prefixes CHECK,CHK32 %s
2; RUN: llc < %s --mtriple=wasm32-unknown-unknown -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-keep-registers -fast-isel -fast-isel-abort=1 | FileCheck --check-prefixes CHECK,CHK32 %s
3; RUN: llc < %s --mtriple=wasm64-unknown-unknown -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-keep-registers | FileCheck --check-prefixes CHECK,CHK64 %s
4; RUN: llc < %s --mtriple=wasm64-unknown-unknown -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-keep-registers -fast-isel -fast-isel-abort=1 | FileCheck --check-prefixes CHECK,CHK64 %s
5
6; Test that basic loads are assembled properly.
7
8; CHECK-LABEL: ldi32:
9; CHK32-NEXT: .functype ldi32 (i32) -> (i32){{$}}
10; CHK64-NEXT: .functype ldi32 (i64) -> (i32){{$}}
11; CHECK-NEXT: local.get $push[[L0:[0-9]+]]=, 0{{$}}
12; CHECK-NEXT: i32.load $push[[NUM:[0-9]+]]=, 0($pop[[L0]]){{$}}
13; CHECK-NEXT: return $pop[[NUM]]{{$}}
14define i32 @ldi32(ptr %p) {
15  %v = load i32, ptr %p
16  ret i32 %v
17}
18
19; CHECK-LABEL: ldi64:
20; CHK32-NEXT: .functype ldi64 (i32) -> (i64){{$}}
21; CHK64-NEXT: .functype ldi64 (i64) -> (i64){{$}}
22; CHECK-NEXT: local.get $push[[L0:[0-9]+]]=, 0{{$}}
23; CHECK-NEXT: i64.load $push[[NUM:[0-9]+]]=, 0($pop[[L0]]){{$}}
24; CHECK-NEXT: return $pop[[NUM]]{{$}}
25define i64 @ldi64(ptr %p) {
26  %v = load i64, ptr %p
27  ret i64 %v
28}
29
30; CHECK-LABEL: ldf32:
31; CHK32-NEXT: .functype ldf32 (i32) -> (f32){{$}}
32; CHK64-NEXT: .functype ldf32 (i64) -> (f32){{$}}
33; CHECK-NEXT: local.get $push[[L0:[0-9]+]]=, 0{{$}}
34; CHECK-NEXT: f32.load $push[[NUM:[0-9]+]]=, 0($pop[[L0]]){{$}}
35; CHECK-NEXT: return $pop[[NUM]]{{$}}
36define float @ldf32(ptr %p) {
37  %v = load float, ptr %p
38  ret float %v
39}
40
41; CHECK-LABEL: ldf64:
42; CHK32-NEXT: .functype ldf64 (i32) -> (f64){{$}}
43; CHK64-NEXT: .functype ldf64 (i64) -> (f64){{$}}
44; CHECK-NEXT: local.get $push[[L0:[0-9]+]]=, 0{{$}}
45; CHECK-NEXT: f64.load $push[[NUM:[0-9]+]]=, 0($pop[[L0]]){{$}}
46; CHECK-NEXT: return $pop[[NUM]]{{$}}
47define double @ldf64(ptr %p) {
48  %v = load double, ptr %p
49  ret double %v
50}
51