WebAssembly: generate load/store
[oota-llvm.git] / test / CodeGen / WebAssembly / load-ext.ll
1 ; RUN: llc < %s -asm-verbose=false | FileCheck %s
2
3 ; Test that extending loads are assembled properly.
4
5 target datalayout = "e-p:32:32-i64:64-v128:8:128-n32:64-S128"
6 target triple = "wasm32-unknown-unknown"
7
8 ; CHECK-LABEL: (func $sext_i8_i32
9 ; CHECK: (setlocal @1 (load_sx_i8_i32 @0))
10 define i32 @sext_i8_i32(i8 *%p) {
11   %v = load i8, i8* %p
12   %e = sext i8 %v to i32
13   ret i32 %e
14 }
15
16 ; CHECK-LABEL: (func $zext_i8_i32
17 ; CHECK: (setlocal @1 (load_zx_i8_i32 @0))
18 define i32 @zext_i8_i32(i8 *%p) {
19   %v = load i8, i8* %p
20   %e = zext i8 %v to i32
21   ret i32 %e
22 }
23
24 ; CHECK-LABEL: (func $sext_i16_i32
25 ; CHECK: (setlocal @1 (load_sx_i16_i32 @0))
26 define i32 @sext_i16_i32(i16 *%p) {
27   %v = load i16, i16* %p
28   %e = sext i16 %v to i32
29   ret i32 %e
30 }
31
32 ; CHECK-LABEL: (func $zext_i16_i32
33 ; CHECK: (setlocal @1 (load_zx_i16_i32 @0))
34 define i32 @zext_i16_i32(i16 *%p) {
35   %v = load i16, i16* %p
36   %e = zext i16 %v to i32
37   ret i32 %e
38 }
39
40 ; CHECK-LABEL: (func $sext_i8_i64
41 ; CHECK: (setlocal @1 (load_sx_i8_i64 @0))
42 define i64 @sext_i8_i64(i8 *%p) {
43   %v = load i8, i8* %p
44   %e = sext i8 %v to i64
45   ret i64 %e
46 }
47
48 ; CHECK-LABEL: (func $zext_i8_i64
49 ; CHECK: (setlocal @1 (load_zx_i8_i64 @0))
50 define i64 @zext_i8_i64(i8 *%p) {
51   %v = load i8, i8* %p
52   %e = zext i8 %v to i64
53   ret i64 %e
54 }
55
56 ; CHECK-LABEL: (func $sext_i16_i64
57 ; CHECK: (setlocal @1 (load_sx_i16_i64 @0))
58 define i64 @sext_i16_i64(i16 *%p) {
59   %v = load i16, i16* %p
60   %e = sext i16 %v to i64
61   ret i64 %e
62 }
63
64 ; CHECK-LABEL: (func $zext_i16_i64
65 ; CHECK: (setlocal @1 (load_zx_i16_i64 @0))
66 define i64 @zext_i16_i64(i16 *%p) {
67   %v = load i16, i16* %p
68   %e = zext i16 %v to i64
69   ret i64 %e
70 }
71
72 ; CHECK-LABEL: (func $sext_i32_i64
73 ; CHECK: (setlocal @1 (load_sx_i32_i64 @0))
74 define i64 @sext_i32_i64(i32 *%p) {
75   %v = load i32, i32* %p
76   %e = sext i32 %v to i64
77   ret i64 %e
78 }
79
80 ; CHECK-LABEL: (func $zext_i32_i64
81 ; CHECK: (setlocal @1 (load_zx_i32_i64 @0))
82 define i64 @zext_i32_i64(i32 *%p) {
83   %v = load i32, i32* %p
84   %e = zext i32 %v to i64
85   ret i64 %e
86 }