1; RUN: llc < %s -asm-verbose=false | FileCheck %s
2
3; Test that extending loads are assembled properly.
4
5target datalayout = "e-p:32:32-i64:64-n32:64-S128"
6target triple = "wasm32-unknown-unknown"
7
8; CHECK-LABEL: (func $sext_i8_i32
9; CHECK: (set_local @1 (load_s_i8_i32 @0))
10define 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: (set_local @1 (load_u_i8_i32 @0))
18define 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: (set_local @1 (load_s_i16_i32 @0))
26define 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: (set_local @1 (load_u_i16_i32 @0))
34define 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: (set_local @1 (load_s_i8_i64 @0))
42define 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: (set_local @1 (load_u_i8_i64 @0))
50define 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: (set_local @1 (load_s_i16_i64 @0))
58define 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: (set_local @1 (load_u_i16_i64 @0))
66define 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: (set_local @1 (load_s_i32_i64 @0))
74define 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: (set_local @1 (load_u_i32_i64 @0))
82define i64 @zext_i32_i64(i32 *%p) {
83  %v = load i32, i32* %p
84  %e = zext i32 %v to i64
85  ret i64 %e
86}
87