95 lines · plain
1; RUN: llc < %s --mtriple=wasm32-unknown-unknown -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers | FileCheck %s2; RUN: llc < %s --mtriple=wasm64-unknown-unknown -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers | FileCheck %s3 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(ptr %p) {10 %v = load i8, ptr %p11 %e = sext i8 %v to i3212 ret i32 %e13}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(ptr %p) {19 %v = load i8, ptr %p20 %e = zext i8 %v to i3221 ret i32 %e22}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(ptr %p) {28 %v = load i16, ptr %p29 %e = sext i16 %v to i3230 ret i32 %e31}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(ptr %p) {37 %v = load i16, ptr %p38 %e = zext i16 %v to i3239 ret i32 %e40}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(ptr %p) {46 %v = load i8, ptr %p47 %e = sext i8 %v to i6448 ret i64 %e49}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(ptr %p) {55 %v = load i8, ptr %p56 %e = zext i8 %v to i6457 ret i64 %e58}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(ptr %p) {64 %v = load i16, ptr %p65 %e = sext i16 %v to i6466 ret i64 %e67}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(ptr %p) {73 %v = load i16, ptr %p74 %e = zext i16 %v to i6475 ret i64 %e76}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(ptr %p) {82 %v = load i32, ptr %p83 %e = sext i32 %v to i6484 ret i64 %e85}86 87; CHECK-LABEL: zext_i32_i64:88; CHECK: i64.load32_u $push0=, 0($0){{$}}89; CHECK: return $pop0{{$}}90define i64 @zext_i32_i64(ptr %p) {91 %v = load i32, ptr %p92 %e = zext i32 %v to i6493 ret i64 %e94}95