blob: 5ff40a5778888bd029b3e6e5a21e02eca1f2b040 [file] [log] [blame]
Wouter van Oortmerssen8a9cb242018-08-27 15:45:51 +00001; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers | FileCheck %s
JF Bastien73ff6af2015-08-31 22:24:11 +00002
3; Test that extending loads are assembled properly.
4
Dan Gohman0c6f5ac2016-01-07 03:19:23 +00005target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
Sam Clegga5908002018-05-10 17:49:11 +00006target triple = "wasm32-unknown-unknown"
JF Bastien73ff6af2015-08-31 22:24:11 +00007
Dan Gohmane51c0582015-10-06 00:27:55 +00008; CHECK-LABEL: sext_i8_i32:
Derek Schuff9d779522015-12-05 00:26:39 +00009; CHECK: i32.load8_s $push0=, 0($0){{$}}
Dan Gohman81719f82015-11-25 16:55:01 +000010; 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:
Derek Schuff9d779522015-12-05 00:26:39 +000018; CHECK: i32.load8_u $push0=, 0($0){{$}}
Dan Gohman81719f82015-11-25 16:55:01 +000019; 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:
Derek Schuff9d779522015-12-05 00:26:39 +000027; CHECK: i32.load16_s $push0=, 0($0){{$}}
Dan Gohman81719f82015-11-25 16:55:01 +000028; 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:
Derek Schuff9d779522015-12-05 00:26:39 +000036; CHECK: i32.load16_u $push0=, 0($0){{$}}
Dan Gohman81719f82015-11-25 16:55:01 +000037; 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:
Derek Schuff9d779522015-12-05 00:26:39 +000045; CHECK: i64.load8_s $push0=, 0($0){{$}}
Dan Gohman81719f82015-11-25 16:55:01 +000046; 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:
Derek Schuff9d779522015-12-05 00:26:39 +000054; CHECK: i64.load8_u $push0=, 0($0){{$}}
Dan Gohman81719f82015-11-25 16:55:01 +000055; 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:
Derek Schuff9d779522015-12-05 00:26:39 +000063; CHECK: i64.load16_s $push0=, 0($0){{$}}
Dan Gohman81719f82015-11-25 16:55:01 +000064; 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:
Derek Schuff9d779522015-12-05 00:26:39 +000072; CHECK: i64.load16_u $push0=, 0($0){{$}}
Dan Gohman81719f82015-11-25 16:55:01 +000073; 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:
Derek Schuff9d779522015-12-05 00:26:39 +000081; CHECK: i64.load32_s $push0=, 0($0){{$}}
Dan Gohman81719f82015-11-25 16:55:01 +000082; 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:
Derek Schuff9d779522015-12-05 00:26:39 +000090; CHECK: i64.load32_u $push0=, 0($0){{$}}
Dan Gohman81719f82015-11-25 16:55:01 +000091; 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}