blob: bdccfff1d161af0b5e988f6b979d9e3938b4bf4d [file] [log] [blame]
JF Bastien73ff6af2015-08-31 22:24:11 +00001; RUN: llc < %s -asm-verbose=false | FileCheck %s
2
3; Test that extending loads are assembled properly.
4
Dan Gohman5e066842015-09-09 20:54:31 +00005target datalayout = "e-p:32:32-i64:64-n32:64-S128"
JF Bastien73ff6af2015-08-31 22:24:11 +00006target triple = "wasm32-unknown-unknown"
7
Dan Gohmane51c0582015-10-06 00:27:55 +00008; CHECK-LABEL: sext_i8_i32:
Dan Gohman81719f82015-11-25 16:55:01 +00009; CHECK: i32.load8_s $push0=, $0{{$}}
10; CHECK-NEXT: return $pop0{{$}}
JF Bastien73ff6af2015-08-31 22:24:11 +000011define i32 @sext_i8_i32(i8 *%p) {
12 %v = load i8, i8* %p
13 %e = sext i8 %v to i32
14 ret i32 %e
15}
16
Dan Gohmane51c0582015-10-06 00:27:55 +000017; CHECK-LABEL: zext_i8_i32:
Dan Gohman81719f82015-11-25 16:55:01 +000018; CHECK: i32.load8_u $push0=, $0{{$}}
19; CHECK-NEXT: return $pop0{{$}}
JF Bastien73ff6af2015-08-31 22:24:11 +000020define i32 @zext_i8_i32(i8 *%p) {
21 %v = load i8, i8* %p
22 %e = zext i8 %v to i32
23 ret i32 %e
24}
25
Dan Gohmane51c0582015-10-06 00:27:55 +000026; CHECK-LABEL: sext_i16_i32:
Dan Gohman81719f82015-11-25 16:55:01 +000027; CHECK: i32.load16_s $push0=, $0{{$}}
28; CHECK-NEXT: return $pop0{{$}}
JF Bastien73ff6af2015-08-31 22:24:11 +000029define i32 @sext_i16_i32(i16 *%p) {
30 %v = load i16, i16* %p
31 %e = sext i16 %v to i32
32 ret i32 %e
33}
34
Dan Gohmane51c0582015-10-06 00:27:55 +000035; CHECK-LABEL: zext_i16_i32:
Dan Gohman81719f82015-11-25 16:55:01 +000036; CHECK: i32.load16_u $push0=, $0{{$}}
37; CHECK-NEXT: return $pop0{{$}}
JF Bastien73ff6af2015-08-31 22:24:11 +000038define i32 @zext_i16_i32(i16 *%p) {
39 %v = load i16, i16* %p
40 %e = zext i16 %v to i32
41 ret i32 %e
42}
43
Dan Gohmane51c0582015-10-06 00:27:55 +000044; CHECK-LABEL: sext_i8_i64:
Dan Gohman81719f82015-11-25 16:55:01 +000045; CHECK: i64.load8_s $push0=, $0{{$}}
46; CHECK-NEXT: return $pop0{{$}}
JF Bastien73ff6af2015-08-31 22:24:11 +000047define i64 @sext_i8_i64(i8 *%p) {
48 %v = load i8, i8* %p
49 %e = sext i8 %v to i64
50 ret i64 %e
51}
52
Dan Gohmane51c0582015-10-06 00:27:55 +000053; CHECK-LABEL: zext_i8_i64:
Dan Gohman81719f82015-11-25 16:55:01 +000054; CHECK: i64.load8_u $push0=, $0{{$}}
55; CHECK-NEXT: return $pop0{{$}}
JF Bastien73ff6af2015-08-31 22:24:11 +000056define i64 @zext_i8_i64(i8 *%p) {
57 %v = load i8, i8* %p
58 %e = zext i8 %v to i64
59 ret i64 %e
60}
61
Dan Gohmane51c0582015-10-06 00:27:55 +000062; CHECK-LABEL: sext_i16_i64:
Dan Gohman81719f82015-11-25 16:55:01 +000063; CHECK: i64.load16_s $push0=, $0{{$}}
64; CHECK-NEXT: return $pop0{{$}}
JF Bastien73ff6af2015-08-31 22:24:11 +000065define i64 @sext_i16_i64(i16 *%p) {
66 %v = load i16, i16* %p
67 %e = sext i16 %v to i64
68 ret i64 %e
69}
70
Dan Gohmane51c0582015-10-06 00:27:55 +000071; CHECK-LABEL: zext_i16_i64:
Dan Gohman81719f82015-11-25 16:55:01 +000072; CHECK: i64.load16_u $push0=, $0{{$}}
73; CHECK-NEXT: return $pop0{{$}}
JF Bastien73ff6af2015-08-31 22:24:11 +000074define i64 @zext_i16_i64(i16 *%p) {
75 %v = load i16, i16* %p
76 %e = zext i16 %v to i64
77 ret i64 %e
78}
79
Dan Gohmane51c0582015-10-06 00:27:55 +000080; CHECK-LABEL: sext_i32_i64:
Dan Gohman81719f82015-11-25 16:55:01 +000081; CHECK: i64.load32_s $push0=, $0{{$}}
82; CHECK-NEXT: return $pop0{{$}}
JF Bastien73ff6af2015-08-31 22:24:11 +000083define i64 @sext_i32_i64(i32 *%p) {
84 %v = load i32, i32* %p
85 %e = sext i32 %v to i64
86 ret i64 %e
87}
88
Dan Gohmane51c0582015-10-06 00:27:55 +000089; CHECK-LABEL: zext_i32_i64:
Dan Gohman81719f82015-11-25 16:55:01 +000090; CHECK: i64.load32_u $push0=, $0{{$}}
91; CHECK: return $pop0{{$}}
JF Bastien73ff6af2015-08-31 22:24:11 +000092define i64 @zext_i32_i64(i32 *%p) {
93 %v = load i32, i32* %p
94 %e = zext i32 %v to i64
95 ret i64 %e
96}