1; RUN: llc < %s --mtriple=wasm32-unknown-unknown -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers | FileCheck %s 2; RUN: llc < %s --mtriple=wasm64-unknown-unknown -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers | FileCheck %s 3 4; Test that extending loads are assembled properly. 5 6; CHECK-LABEL: sext_i8_i32: 7; CHECK: i32.load8_s $push0=, 0($0){{$}} 8; CHECK-NEXT: return $pop0{{$}} 9define i32 @sext_i8_i32(i8 *%p) { 10 %v = load i8, i8* %p 11 %e = sext i8 %v to i32 12 ret i32 %e 13} 14 15; CHECK-LABEL: zext_i8_i32: 16; CHECK: i32.load8_u $push0=, 0($0){{$}} 17; CHECK-NEXT: return $pop0{{$}} 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: sext_i16_i32: 25; CHECK: i32.load16_s $push0=, 0($0){{$}} 26; CHECK-NEXT: return $pop0{{$}} 27define i32 @sext_i16_i32(i16 *%p) { 28 %v = load i16, i16* %p 29 %e = sext i16 %v to i32 30 ret i32 %e 31} 32 33; CHECK-LABEL: zext_i16_i32: 34; CHECK: i32.load16_u $push0=, 0($0){{$}} 35; CHECK-NEXT: return $pop0{{$}} 36define i32 @zext_i16_i32(i16 *%p) { 37 %v = load i16, i16* %p 38 %e = zext i16 %v to i32 39 ret i32 %e 40} 41 42; CHECK-LABEL: sext_i8_i64: 43; CHECK: i64.load8_s $push0=, 0($0){{$}} 44; CHECK-NEXT: return $pop0{{$}} 45define i64 @sext_i8_i64(i8 *%p) { 46 %v = load i8, i8* %p 47 %e = sext i8 %v to i64 48 ret i64 %e 49} 50 51; CHECK-LABEL: zext_i8_i64: 52; CHECK: i64.load8_u $push0=, 0($0){{$}} 53; CHECK-NEXT: return $pop0{{$}} 54define i64 @zext_i8_i64(i8 *%p) { 55 %v = load i8, i8* %p 56 %e = zext i8 %v to i64 57 ret i64 %e 58} 59 60; CHECK-LABEL: sext_i16_i64: 61; CHECK: i64.load16_s $push0=, 0($0){{$}} 62; CHECK-NEXT: return $pop0{{$}} 63define i64 @sext_i16_i64(i16 *%p) { 64 %v = load i16, i16* %p 65 %e = sext i16 %v to i64 66 ret i64 %e 67} 68 69; CHECK-LABEL: zext_i16_i64: 70; CHECK: i64.load16_u $push0=, 0($0){{$}} 71; CHECK-NEXT: return $pop0{{$}} 72define i64 @zext_i16_i64(i16 *%p) { 73 %v = load i16, i16* %p 74 %e = zext i16 %v to i64 75 ret i64 %e 76} 77 78; CHECK-LABEL: sext_i32_i64: 79; CHECK: i64.load32_s $push0=, 0($0){{$}} 80; CHECK-NEXT: return $pop0{{$}} 81define i64 @sext_i32_i64(i32 *%p) { 82 %v = load i32, i32* %p 83 %e = sext i32 %v to i64 84 ret i64 %e 85} 86 87; CHECK-LABEL: zext_i32_i64: 88; CHECK: i64.load32_u $push0=, 0($0){{$}} 89; CHECK: return $pop0{{$}} 90define i64 @zext_i32_i64(i32 *%p) { 91 %v = load i32, i32* %p 92 %e = zext i32 %v to i64 93 ret i64 %e 94} 95