Reverts llvm/llvm-project#188306 Relands llvm/llvm-project#187934 It was reverted by mistake.
790 lines
29 KiB
LLVM
790 lines
29 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
|
|
; RUN: llc < %s --mtriple=wasm32-unknown-unknown -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers | FileCheck %s --check-prefixes=WASM32-DAG
|
|
; RUN: llc < %s --mtriple=wasm32-unknown-unknown -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mcpu=mvp | FileCheck %s --check-prefixes=WASM32-DAG-MVP
|
|
; RUN: llc < %s --mtriple=wasm32-unknown-unknown -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefixes=WASM32-FAST
|
|
; RUN: llc < %s --mtriple=wasm32-unknown-unknown -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -fast-isel -fast-isel-abort=1 -mcpu=mvp | FileCheck %s --check-prefixes=WASM32-FAST-MVP
|
|
; RUN: llc < %s --mtriple=wasm64-unknown-unknown -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers | FileCheck %s --check-prefixes=WASM64-DAG
|
|
; RUN: llc < %s --mtriple=wasm64-unknown-unknown -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mcpu=mvp | FileCheck %s --check-prefixes=WASM64-DAG-MVP
|
|
; RUN: llc < %s --mtriple=wasm64-unknown-unknown -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefixes=WASM64-FAST
|
|
; RUN: llc < %s --mtriple=wasm64-unknown-unknown -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -fast-isel -fast-isel-abort=1 -mcpu=mvp | FileCheck %s --check-prefixes=WASM64-FAST-MVP
|
|
|
|
; Test that extending loads are assembled properly.
|
|
|
|
@gv8 = global i8 0
|
|
@gv16 = global i16 0
|
|
|
|
define i32 @global_sext_i8_i32() {
|
|
; WASM32-DAG-LABEL: global_sext_i8_i32:
|
|
; WASM32-DAG: .functype global_sext_i8_i32 () -> (i32)
|
|
; WASM32-DAG-NEXT: # %bb.0:
|
|
; WASM32-DAG-NEXT: i32.const $push0=, 0
|
|
; WASM32-DAG-NEXT: i32.load8_s $push1=, gv8($pop0)
|
|
; WASM32-DAG-NEXT: return $pop1
|
|
;
|
|
; WASM32-DAG-MVP-LABEL: global_sext_i8_i32:
|
|
; WASM32-DAG-MVP: .functype global_sext_i8_i32 () -> (i32)
|
|
; WASM32-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM32-DAG-MVP-NEXT: i32.const $push0=, 0
|
|
; WASM32-DAG-MVP-NEXT: i32.load8_s $push1=, gv8($pop0)
|
|
; WASM32-DAG-MVP-NEXT: return $pop1
|
|
;
|
|
; WASM32-FAST-LABEL: global_sext_i8_i32:
|
|
; WASM32-FAST: .functype global_sext_i8_i32 () -> (i32)
|
|
; WASM32-FAST-NEXT: # %bb.0:
|
|
; WASM32-FAST-NEXT: i32.const $push1=, 0
|
|
; WASM32-FAST-NEXT: i32.load8_s $push0=, gv8($pop1)
|
|
; WASM32-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-MVP-LABEL: global_sext_i8_i32:
|
|
; WASM32-FAST-MVP: .functype global_sext_i8_i32 () -> (i32)
|
|
; WASM32-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM32-FAST-MVP-NEXT: i32.const $push1=, 0
|
|
; WASM32-FAST-MVP-NEXT: i32.load8_s $push0=, gv8($pop1)
|
|
; WASM32-FAST-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-LABEL: global_sext_i8_i32:
|
|
; WASM64-DAG: .functype global_sext_i8_i32 () -> (i32)
|
|
; WASM64-DAG-NEXT: # %bb.0:
|
|
; WASM64-DAG-NEXT: i64.const $push0=, 0
|
|
; WASM64-DAG-NEXT: i32.load8_s $push1=, gv8($pop0)
|
|
; WASM64-DAG-NEXT: return $pop1
|
|
;
|
|
; WASM64-DAG-MVP-LABEL: global_sext_i8_i32:
|
|
; WASM64-DAG-MVP: .functype global_sext_i8_i32 () -> (i32)
|
|
; WASM64-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM64-DAG-MVP-NEXT: i64.const $push0=, 0
|
|
; WASM64-DAG-MVP-NEXT: i32.load8_s $push1=, gv8($pop0)
|
|
; WASM64-DAG-MVP-NEXT: return $pop1
|
|
;
|
|
; WASM64-FAST-LABEL: global_sext_i8_i32:
|
|
; WASM64-FAST: .functype global_sext_i8_i32 () -> (i32)
|
|
; WASM64-FAST-NEXT: # %bb.0:
|
|
; WASM64-FAST-NEXT: i64.const $push1=, 0
|
|
; WASM64-FAST-NEXT: i32.load8_s $push0=, gv8($pop1)
|
|
; WASM64-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-MVP-LABEL: global_sext_i8_i32:
|
|
; WASM64-FAST-MVP: .functype global_sext_i8_i32 () -> (i32)
|
|
; WASM64-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM64-FAST-MVP-NEXT: i64.const $push1=, 0
|
|
; WASM64-FAST-MVP-NEXT: i32.load8_s $push0=, gv8($pop1)
|
|
; WASM64-FAST-MVP-NEXT: return $pop0
|
|
%ld = load i8, ptr @gv8
|
|
%conv = sext i8 %ld to i32
|
|
ret i32 %conv
|
|
}
|
|
|
|
define i32 @global_sext_i16_i32() {
|
|
; WASM32-DAG-LABEL: global_sext_i16_i32:
|
|
; WASM32-DAG: .functype global_sext_i16_i32 () -> (i32)
|
|
; WASM32-DAG-NEXT: # %bb.0:
|
|
; WASM32-DAG-NEXT: i32.const $push0=, 0
|
|
; WASM32-DAG-NEXT: i32.load16_s $push1=, gv16($pop0)
|
|
; WASM32-DAG-NEXT: return $pop1
|
|
;
|
|
; WASM32-DAG-MVP-LABEL: global_sext_i16_i32:
|
|
; WASM32-DAG-MVP: .functype global_sext_i16_i32 () -> (i32)
|
|
; WASM32-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM32-DAG-MVP-NEXT: i32.const $push0=, 0
|
|
; WASM32-DAG-MVP-NEXT: i32.load16_s $push1=, gv16($pop0)
|
|
; WASM32-DAG-MVP-NEXT: return $pop1
|
|
;
|
|
; WASM32-FAST-LABEL: global_sext_i16_i32:
|
|
; WASM32-FAST: .functype global_sext_i16_i32 () -> (i32)
|
|
; WASM32-FAST-NEXT: # %bb.0:
|
|
; WASM32-FAST-NEXT: i32.const $push1=, 0
|
|
; WASM32-FAST-NEXT: i32.load16_s $push0=, gv16($pop1)
|
|
; WASM32-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-MVP-LABEL: global_sext_i16_i32:
|
|
; WASM32-FAST-MVP: .functype global_sext_i16_i32 () -> (i32)
|
|
; WASM32-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM32-FAST-MVP-NEXT: i32.const $push1=, 0
|
|
; WASM32-FAST-MVP-NEXT: i32.load16_s $push0=, gv16($pop1)
|
|
; WASM32-FAST-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-LABEL: global_sext_i16_i32:
|
|
; WASM64-DAG: .functype global_sext_i16_i32 () -> (i32)
|
|
; WASM64-DAG-NEXT: # %bb.0:
|
|
; WASM64-DAG-NEXT: i64.const $push0=, 0
|
|
; WASM64-DAG-NEXT: i32.load16_s $push1=, gv16($pop0)
|
|
; WASM64-DAG-NEXT: return $pop1
|
|
;
|
|
; WASM64-DAG-MVP-LABEL: global_sext_i16_i32:
|
|
; WASM64-DAG-MVP: .functype global_sext_i16_i32 () -> (i32)
|
|
; WASM64-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM64-DAG-MVP-NEXT: i64.const $push0=, 0
|
|
; WASM64-DAG-MVP-NEXT: i32.load16_s $push1=, gv16($pop0)
|
|
; WASM64-DAG-MVP-NEXT: return $pop1
|
|
;
|
|
; WASM64-FAST-LABEL: global_sext_i16_i32:
|
|
; WASM64-FAST: .functype global_sext_i16_i32 () -> (i32)
|
|
; WASM64-FAST-NEXT: # %bb.0:
|
|
; WASM64-FAST-NEXT: i64.const $push1=, 0
|
|
; WASM64-FAST-NEXT: i32.load16_s $push0=, gv16($pop1)
|
|
; WASM64-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-MVP-LABEL: global_sext_i16_i32:
|
|
; WASM64-FAST-MVP: .functype global_sext_i16_i32 () -> (i32)
|
|
; WASM64-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM64-FAST-MVP-NEXT: i64.const $push1=, 0
|
|
; WASM64-FAST-MVP-NEXT: i32.load16_s $push0=, gv16($pop1)
|
|
; WASM64-FAST-MVP-NEXT: return $pop0
|
|
%ld = load i16, ptr @gv16
|
|
%conv = sext i16 %ld to i32
|
|
ret i32 %conv
|
|
}
|
|
|
|
define i64 @global_sext_i8_i64() {
|
|
; WASM32-DAG-LABEL: global_sext_i8_i64:
|
|
; WASM32-DAG: .functype global_sext_i8_i64 () -> (i64)
|
|
; WASM32-DAG-NEXT: # %bb.0:
|
|
; WASM32-DAG-NEXT: i32.const $push0=, 0
|
|
; WASM32-DAG-NEXT: i64.load8_s $push1=, gv8($pop0)
|
|
; WASM32-DAG-NEXT: return $pop1
|
|
;
|
|
; WASM32-DAG-MVP-LABEL: global_sext_i8_i64:
|
|
; WASM32-DAG-MVP: .functype global_sext_i8_i64 () -> (i64)
|
|
; WASM32-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM32-DAG-MVP-NEXT: i32.const $push0=, 0
|
|
; WASM32-DAG-MVP-NEXT: i64.load8_s $push1=, gv8($pop0)
|
|
; WASM32-DAG-MVP-NEXT: return $pop1
|
|
;
|
|
; WASM32-FAST-LABEL: global_sext_i8_i64:
|
|
; WASM32-FAST: .functype global_sext_i8_i64 () -> (i64)
|
|
; WASM32-FAST-NEXT: # %bb.0:
|
|
; WASM32-FAST-NEXT: i32.const $push1=, 0
|
|
; WASM32-FAST-NEXT: i64.load8_s $push0=, gv8($pop1)
|
|
; WASM32-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-MVP-LABEL: global_sext_i8_i64:
|
|
; WASM32-FAST-MVP: .functype global_sext_i8_i64 () -> (i64)
|
|
; WASM32-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM32-FAST-MVP-NEXT: i32.const $push1=, 0
|
|
; WASM32-FAST-MVP-NEXT: i64.load8_s $push0=, gv8($pop1)
|
|
; WASM32-FAST-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-LABEL: global_sext_i8_i64:
|
|
; WASM64-DAG: .functype global_sext_i8_i64 () -> (i64)
|
|
; WASM64-DAG-NEXT: # %bb.0:
|
|
; WASM64-DAG-NEXT: i64.const $push0=, 0
|
|
; WASM64-DAG-NEXT: i64.load8_s $push1=, gv8($pop0)
|
|
; WASM64-DAG-NEXT: return $pop1
|
|
;
|
|
; WASM64-DAG-MVP-LABEL: global_sext_i8_i64:
|
|
; WASM64-DAG-MVP: .functype global_sext_i8_i64 () -> (i64)
|
|
; WASM64-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM64-DAG-MVP-NEXT: i64.const $push0=, 0
|
|
; WASM64-DAG-MVP-NEXT: i64.load8_s $push1=, gv8($pop0)
|
|
; WASM64-DAG-MVP-NEXT: return $pop1
|
|
;
|
|
; WASM64-FAST-LABEL: global_sext_i8_i64:
|
|
; WASM64-FAST: .functype global_sext_i8_i64 () -> (i64)
|
|
; WASM64-FAST-NEXT: # %bb.0:
|
|
; WASM64-FAST-NEXT: i64.const $push1=, 0
|
|
; WASM64-FAST-NEXT: i64.load8_s $push0=, gv8($pop1)
|
|
; WASM64-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-MVP-LABEL: global_sext_i8_i64:
|
|
; WASM64-FAST-MVP: .functype global_sext_i8_i64 () -> (i64)
|
|
; WASM64-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM64-FAST-MVP-NEXT: i64.const $push1=, 0
|
|
; WASM64-FAST-MVP-NEXT: i64.load8_s $push0=, gv8($pop1)
|
|
; WASM64-FAST-MVP-NEXT: return $pop0
|
|
%ld = load i8, ptr @gv8
|
|
%conv = sext i8 %ld to i64
|
|
ret i64 %conv
|
|
}
|
|
|
|
define i64 @global_sext_i16_i64() {
|
|
; WASM32-DAG-LABEL: global_sext_i16_i64:
|
|
; WASM32-DAG: .functype global_sext_i16_i64 () -> (i64)
|
|
; WASM32-DAG-NEXT: # %bb.0:
|
|
; WASM32-DAG-NEXT: i32.const $push0=, 0
|
|
; WASM32-DAG-NEXT: i64.load16_s $push1=, gv16($pop0)
|
|
; WASM32-DAG-NEXT: return $pop1
|
|
;
|
|
; WASM32-DAG-MVP-LABEL: global_sext_i16_i64:
|
|
; WASM32-DAG-MVP: .functype global_sext_i16_i64 () -> (i64)
|
|
; WASM32-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM32-DAG-MVP-NEXT: i32.const $push0=, 0
|
|
; WASM32-DAG-MVP-NEXT: i64.load16_s $push1=, gv16($pop0)
|
|
; WASM32-DAG-MVP-NEXT: return $pop1
|
|
;
|
|
; WASM32-FAST-LABEL: global_sext_i16_i64:
|
|
; WASM32-FAST: .functype global_sext_i16_i64 () -> (i64)
|
|
; WASM32-FAST-NEXT: # %bb.0:
|
|
; WASM32-FAST-NEXT: i32.const $push1=, 0
|
|
; WASM32-FAST-NEXT: i64.load16_s $push0=, gv16($pop1)
|
|
; WASM32-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-MVP-LABEL: global_sext_i16_i64:
|
|
; WASM32-FAST-MVP: .functype global_sext_i16_i64 () -> (i64)
|
|
; WASM32-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM32-FAST-MVP-NEXT: i32.const $push1=, 0
|
|
; WASM32-FAST-MVP-NEXT: i64.load16_s $push0=, gv16($pop1)
|
|
; WASM32-FAST-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-LABEL: global_sext_i16_i64:
|
|
; WASM64-DAG: .functype global_sext_i16_i64 () -> (i64)
|
|
; WASM64-DAG-NEXT: # %bb.0:
|
|
; WASM64-DAG-NEXT: i64.const $push0=, 0
|
|
; WASM64-DAG-NEXT: i64.load16_s $push1=, gv16($pop0)
|
|
; WASM64-DAG-NEXT: return $pop1
|
|
;
|
|
; WASM64-DAG-MVP-LABEL: global_sext_i16_i64:
|
|
; WASM64-DAG-MVP: .functype global_sext_i16_i64 () -> (i64)
|
|
; WASM64-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM64-DAG-MVP-NEXT: i64.const $push0=, 0
|
|
; WASM64-DAG-MVP-NEXT: i64.load16_s $push1=, gv16($pop0)
|
|
; WASM64-DAG-MVP-NEXT: return $pop1
|
|
;
|
|
; WASM64-FAST-LABEL: global_sext_i16_i64:
|
|
; WASM64-FAST: .functype global_sext_i16_i64 () -> (i64)
|
|
; WASM64-FAST-NEXT: # %bb.0:
|
|
; WASM64-FAST-NEXT: i64.const $push1=, 0
|
|
; WASM64-FAST-NEXT: i64.load16_s $push0=, gv16($pop1)
|
|
; WASM64-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-MVP-LABEL: global_sext_i16_i64:
|
|
; WASM64-FAST-MVP: .functype global_sext_i16_i64 () -> (i64)
|
|
; WASM64-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM64-FAST-MVP-NEXT: i64.const $push1=, 0
|
|
; WASM64-FAST-MVP-NEXT: i64.load16_s $push0=, gv16($pop1)
|
|
; WASM64-FAST-MVP-NEXT: return $pop0
|
|
%ld= load i16, ptr @gv16
|
|
%conv = sext i16 %ld to i64
|
|
ret i64 %conv
|
|
}
|
|
|
|
define i32 @sext_i8_i32(ptr %p) {
|
|
; WASM32-DAG-LABEL: sext_i8_i32:
|
|
; WASM32-DAG: .functype sext_i8_i32 (i32) -> (i32)
|
|
; WASM32-DAG-NEXT: # %bb.0:
|
|
; WASM32-DAG-NEXT: i32.load8_s $push0=, 0($0)
|
|
; WASM32-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM32-DAG-MVP-LABEL: sext_i8_i32:
|
|
; WASM32-DAG-MVP: .functype sext_i8_i32 (i32) -> (i32)
|
|
; WASM32-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM32-DAG-MVP-NEXT: i32.load8_s $push0=, 0($0)
|
|
; WASM32-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-LABEL: sext_i8_i32:
|
|
; WASM32-FAST: .functype sext_i8_i32 (i32) -> (i32)
|
|
; WASM32-FAST-NEXT: # %bb.0:
|
|
; WASM32-FAST-NEXT: i32.load8_s $push0=, 0($0)
|
|
; WASM32-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-MVP-LABEL: sext_i8_i32:
|
|
; WASM32-FAST-MVP: .functype sext_i8_i32 (i32) -> (i32)
|
|
; WASM32-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM32-FAST-MVP-NEXT: i32.load8_s $push0=, 0($0)
|
|
; WASM32-FAST-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-LABEL: sext_i8_i32:
|
|
; WASM64-DAG: .functype sext_i8_i32 (i64) -> (i32)
|
|
; WASM64-DAG-NEXT: # %bb.0:
|
|
; WASM64-DAG-NEXT: i32.load8_s $push0=, 0($0)
|
|
; WASM64-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-MVP-LABEL: sext_i8_i32:
|
|
; WASM64-DAG-MVP: .functype sext_i8_i32 (i64) -> (i32)
|
|
; WASM64-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM64-DAG-MVP-NEXT: i32.load8_s $push0=, 0($0)
|
|
; WASM64-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-LABEL: sext_i8_i32:
|
|
; WASM64-FAST: .functype sext_i8_i32 (i64) -> (i32)
|
|
; WASM64-FAST-NEXT: # %bb.0:
|
|
; WASM64-FAST-NEXT: i32.load8_s $push0=, 0($0)
|
|
; WASM64-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-MVP-LABEL: sext_i8_i32:
|
|
; WASM64-FAST-MVP: .functype sext_i8_i32 (i64) -> (i32)
|
|
; WASM64-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM64-FAST-MVP-NEXT: i32.load8_s $push0=, 0($0)
|
|
; WASM64-FAST-MVP-NEXT: return $pop0
|
|
%v = load i8, ptr %p
|
|
%e = sext i8 %v to i32
|
|
ret i32 %e
|
|
}
|
|
|
|
define i32 @zext_i8_i32(ptr %p) {
|
|
; WASM32-DAG-LABEL: zext_i8_i32:
|
|
; WASM32-DAG: .functype zext_i8_i32 (i32) -> (i32)
|
|
; WASM32-DAG-NEXT: # %bb.0:
|
|
; WASM32-DAG-NEXT: i32.load8_u $push0=, 0($0)
|
|
; WASM32-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM32-DAG-MVP-LABEL: zext_i8_i32:
|
|
; WASM32-DAG-MVP: .functype zext_i8_i32 (i32) -> (i32)
|
|
; WASM32-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM32-DAG-MVP-NEXT: i32.load8_u $push0=, 0($0)
|
|
; WASM32-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-LABEL: zext_i8_i32:
|
|
; WASM32-FAST: .functype zext_i8_i32 (i32) -> (i32)
|
|
; WASM32-FAST-NEXT: # %bb.0:
|
|
; WASM32-FAST-NEXT: i32.load8_u $push0=, 0($0)
|
|
; WASM32-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-MVP-LABEL: zext_i8_i32:
|
|
; WASM32-FAST-MVP: .functype zext_i8_i32 (i32) -> (i32)
|
|
; WASM32-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM32-FAST-MVP-NEXT: i32.load8_u $push0=, 0($0)
|
|
; WASM32-FAST-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-LABEL: zext_i8_i32:
|
|
; WASM64-DAG: .functype zext_i8_i32 (i64) -> (i32)
|
|
; WASM64-DAG-NEXT: # %bb.0:
|
|
; WASM64-DAG-NEXT: i32.load8_u $push0=, 0($0)
|
|
; WASM64-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-MVP-LABEL: zext_i8_i32:
|
|
; WASM64-DAG-MVP: .functype zext_i8_i32 (i64) -> (i32)
|
|
; WASM64-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM64-DAG-MVP-NEXT: i32.load8_u $push0=, 0($0)
|
|
; WASM64-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-LABEL: zext_i8_i32:
|
|
; WASM64-FAST: .functype zext_i8_i32 (i64) -> (i32)
|
|
; WASM64-FAST-NEXT: # %bb.0:
|
|
; WASM64-FAST-NEXT: i32.load8_u $push0=, 0($0)
|
|
; WASM64-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-MVP-LABEL: zext_i8_i32:
|
|
; WASM64-FAST-MVP: .functype zext_i8_i32 (i64) -> (i32)
|
|
; WASM64-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM64-FAST-MVP-NEXT: i32.load8_u $push0=, 0($0)
|
|
; WASM64-FAST-MVP-NEXT: return $pop0
|
|
%v = load i8, ptr %p
|
|
%e = zext i8 %v to i32
|
|
ret i32 %e
|
|
}
|
|
|
|
define i32 @sext_i16_i32(ptr %p) {
|
|
; WASM32-DAG-LABEL: sext_i16_i32:
|
|
; WASM32-DAG: .functype sext_i16_i32 (i32) -> (i32)
|
|
; WASM32-DAG-NEXT: # %bb.0:
|
|
; WASM32-DAG-NEXT: i32.load16_s $push0=, 0($0)
|
|
; WASM32-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM32-DAG-MVP-LABEL: sext_i16_i32:
|
|
; WASM32-DAG-MVP: .functype sext_i16_i32 (i32) -> (i32)
|
|
; WASM32-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM32-DAG-MVP-NEXT: i32.load16_s $push0=, 0($0)
|
|
; WASM32-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-LABEL: sext_i16_i32:
|
|
; WASM32-FAST: .functype sext_i16_i32 (i32) -> (i32)
|
|
; WASM32-FAST-NEXT: # %bb.0:
|
|
; WASM32-FAST-NEXT: i32.load16_s $push0=, 0($0)
|
|
; WASM32-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-MVP-LABEL: sext_i16_i32:
|
|
; WASM32-FAST-MVP: .functype sext_i16_i32 (i32) -> (i32)
|
|
; WASM32-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM32-FAST-MVP-NEXT: i32.load16_s $push0=, 0($0)
|
|
; WASM32-FAST-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-LABEL: sext_i16_i32:
|
|
; WASM64-DAG: .functype sext_i16_i32 (i64) -> (i32)
|
|
; WASM64-DAG-NEXT: # %bb.0:
|
|
; WASM64-DAG-NEXT: i32.load16_s $push0=, 0($0)
|
|
; WASM64-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-MVP-LABEL: sext_i16_i32:
|
|
; WASM64-DAG-MVP: .functype sext_i16_i32 (i64) -> (i32)
|
|
; WASM64-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM64-DAG-MVP-NEXT: i32.load16_s $push0=, 0($0)
|
|
; WASM64-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-LABEL: sext_i16_i32:
|
|
; WASM64-FAST: .functype sext_i16_i32 (i64) -> (i32)
|
|
; WASM64-FAST-NEXT: # %bb.0:
|
|
; WASM64-FAST-NEXT: i32.load16_s $push0=, 0($0)
|
|
; WASM64-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-MVP-LABEL: sext_i16_i32:
|
|
; WASM64-FAST-MVP: .functype sext_i16_i32 (i64) -> (i32)
|
|
; WASM64-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM64-FAST-MVP-NEXT: i32.load16_s $push0=, 0($0)
|
|
; WASM64-FAST-MVP-NEXT: return $pop0
|
|
%v = load i16, ptr %p
|
|
%e = sext i16 %v to i32
|
|
ret i32 %e
|
|
}
|
|
|
|
define i32 @zext_i16_i32(ptr %p) {
|
|
; WASM32-DAG-LABEL: zext_i16_i32:
|
|
; WASM32-DAG: .functype zext_i16_i32 (i32) -> (i32)
|
|
; WASM32-DAG-NEXT: # %bb.0:
|
|
; WASM32-DAG-NEXT: i32.load16_u $push0=, 0($0)
|
|
; WASM32-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM32-DAG-MVP-LABEL: zext_i16_i32:
|
|
; WASM32-DAG-MVP: .functype zext_i16_i32 (i32) -> (i32)
|
|
; WASM32-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM32-DAG-MVP-NEXT: i32.load16_u $push0=, 0($0)
|
|
; WASM32-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-LABEL: zext_i16_i32:
|
|
; WASM32-FAST: .functype zext_i16_i32 (i32) -> (i32)
|
|
; WASM32-FAST-NEXT: # %bb.0:
|
|
; WASM32-FAST-NEXT: i32.load16_u $push0=, 0($0)
|
|
; WASM32-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-MVP-LABEL: zext_i16_i32:
|
|
; WASM32-FAST-MVP: .functype zext_i16_i32 (i32) -> (i32)
|
|
; WASM32-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM32-FAST-MVP-NEXT: i32.load16_u $push0=, 0($0)
|
|
; WASM32-FAST-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-LABEL: zext_i16_i32:
|
|
; WASM64-DAG: .functype zext_i16_i32 (i64) -> (i32)
|
|
; WASM64-DAG-NEXT: # %bb.0:
|
|
; WASM64-DAG-NEXT: i32.load16_u $push0=, 0($0)
|
|
; WASM64-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-MVP-LABEL: zext_i16_i32:
|
|
; WASM64-DAG-MVP: .functype zext_i16_i32 (i64) -> (i32)
|
|
; WASM64-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM64-DAG-MVP-NEXT: i32.load16_u $push0=, 0($0)
|
|
; WASM64-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-LABEL: zext_i16_i32:
|
|
; WASM64-FAST: .functype zext_i16_i32 (i64) -> (i32)
|
|
; WASM64-FAST-NEXT: # %bb.0:
|
|
; WASM64-FAST-NEXT: i32.load16_u $push0=, 0($0)
|
|
; WASM64-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-MVP-LABEL: zext_i16_i32:
|
|
; WASM64-FAST-MVP: .functype zext_i16_i32 (i64) -> (i32)
|
|
; WASM64-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM64-FAST-MVP-NEXT: i32.load16_u $push0=, 0($0)
|
|
; WASM64-FAST-MVP-NEXT: return $pop0
|
|
%v = load i16, ptr %p
|
|
%e = zext i16 %v to i32
|
|
ret i32 %e
|
|
}
|
|
|
|
define i64 @sext_i8_i64(ptr %p) {
|
|
; WASM32-DAG-LABEL: sext_i8_i64:
|
|
; WASM32-DAG: .functype sext_i8_i64 (i32) -> (i64)
|
|
; WASM32-DAG-NEXT: # %bb.0:
|
|
; WASM32-DAG-NEXT: i64.load8_s $push0=, 0($0)
|
|
; WASM32-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM32-DAG-MVP-LABEL: sext_i8_i64:
|
|
; WASM32-DAG-MVP: .functype sext_i8_i64 (i32) -> (i64)
|
|
; WASM32-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM32-DAG-MVP-NEXT: i64.load8_s $push0=, 0($0)
|
|
; WASM32-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-LABEL: sext_i8_i64:
|
|
; WASM32-FAST: .functype sext_i8_i64 (i32) -> (i64)
|
|
; WASM32-FAST-NEXT: # %bb.0:
|
|
; WASM32-FAST-NEXT: i64.load8_s $push0=, 0($0)
|
|
; WASM32-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-MVP-LABEL: sext_i8_i64:
|
|
; WASM32-FAST-MVP: .functype sext_i8_i64 (i32) -> (i64)
|
|
; WASM32-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM32-FAST-MVP-NEXT: i64.load8_s $push0=, 0($0)
|
|
; WASM32-FAST-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-LABEL: sext_i8_i64:
|
|
; WASM64-DAG: .functype sext_i8_i64 (i64) -> (i64)
|
|
; WASM64-DAG-NEXT: # %bb.0:
|
|
; WASM64-DAG-NEXT: i64.load8_s $push0=, 0($0)
|
|
; WASM64-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-MVP-LABEL: sext_i8_i64:
|
|
; WASM64-DAG-MVP: .functype sext_i8_i64 (i64) -> (i64)
|
|
; WASM64-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM64-DAG-MVP-NEXT: i64.load8_s $push0=, 0($0)
|
|
; WASM64-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-LABEL: sext_i8_i64:
|
|
; WASM64-FAST: .functype sext_i8_i64 (i64) -> (i64)
|
|
; WASM64-FAST-NEXT: # %bb.0:
|
|
; WASM64-FAST-NEXT: i64.load8_s $push0=, 0($0)
|
|
; WASM64-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-MVP-LABEL: sext_i8_i64:
|
|
; WASM64-FAST-MVP: .functype sext_i8_i64 (i64) -> (i64)
|
|
; WASM64-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM64-FAST-MVP-NEXT: i64.load8_s $push0=, 0($0)
|
|
; WASM64-FAST-MVP-NEXT: return $pop0
|
|
%v = load i8, ptr %p
|
|
%e = sext i8 %v to i64
|
|
ret i64 %e
|
|
}
|
|
|
|
define i64 @zext_i8_i64(ptr %p) {
|
|
; WASM32-DAG-LABEL: zext_i8_i64:
|
|
; WASM32-DAG: .functype zext_i8_i64 (i32) -> (i64)
|
|
; WASM32-DAG-NEXT: # %bb.0:
|
|
; WASM32-DAG-NEXT: i64.load8_u $push0=, 0($0)
|
|
; WASM32-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM32-DAG-MVP-LABEL: zext_i8_i64:
|
|
; WASM32-DAG-MVP: .functype zext_i8_i64 (i32) -> (i64)
|
|
; WASM32-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM32-DAG-MVP-NEXT: i64.load8_u $push0=, 0($0)
|
|
; WASM32-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-LABEL: zext_i8_i64:
|
|
; WASM32-FAST: .functype zext_i8_i64 (i32) -> (i64)
|
|
; WASM32-FAST-NEXT: # %bb.0:
|
|
; WASM32-FAST-NEXT: i64.load8_u $push0=, 0($0)
|
|
; WASM32-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-MVP-LABEL: zext_i8_i64:
|
|
; WASM32-FAST-MVP: .functype zext_i8_i64 (i32) -> (i64)
|
|
; WASM32-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM32-FAST-MVP-NEXT: i64.load8_u $push0=, 0($0)
|
|
; WASM32-FAST-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-LABEL: zext_i8_i64:
|
|
; WASM64-DAG: .functype zext_i8_i64 (i64) -> (i64)
|
|
; WASM64-DAG-NEXT: # %bb.0:
|
|
; WASM64-DAG-NEXT: i64.load8_u $push0=, 0($0)
|
|
; WASM64-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-MVP-LABEL: zext_i8_i64:
|
|
; WASM64-DAG-MVP: .functype zext_i8_i64 (i64) -> (i64)
|
|
; WASM64-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM64-DAG-MVP-NEXT: i64.load8_u $push0=, 0($0)
|
|
; WASM64-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-LABEL: zext_i8_i64:
|
|
; WASM64-FAST: .functype zext_i8_i64 (i64) -> (i64)
|
|
; WASM64-FAST-NEXT: # %bb.0:
|
|
; WASM64-FAST-NEXT: i64.load8_u $push0=, 0($0)
|
|
; WASM64-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-MVP-LABEL: zext_i8_i64:
|
|
; WASM64-FAST-MVP: .functype zext_i8_i64 (i64) -> (i64)
|
|
; WASM64-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM64-FAST-MVP-NEXT: i64.load8_u $push0=, 0($0)
|
|
; WASM64-FAST-MVP-NEXT: return $pop0
|
|
%v = load i8, ptr %p
|
|
%e = zext i8 %v to i64
|
|
ret i64 %e
|
|
}
|
|
|
|
define i64 @sext_i16_i64(ptr %p) {
|
|
; WASM32-DAG-LABEL: sext_i16_i64:
|
|
; WASM32-DAG: .functype sext_i16_i64 (i32) -> (i64)
|
|
; WASM32-DAG-NEXT: # %bb.0:
|
|
; WASM32-DAG-NEXT: i64.load16_s $push0=, 0($0)
|
|
; WASM32-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM32-DAG-MVP-LABEL: sext_i16_i64:
|
|
; WASM32-DAG-MVP: .functype sext_i16_i64 (i32) -> (i64)
|
|
; WASM32-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM32-DAG-MVP-NEXT: i64.load16_s $push0=, 0($0)
|
|
; WASM32-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-LABEL: sext_i16_i64:
|
|
; WASM32-FAST: .functype sext_i16_i64 (i32) -> (i64)
|
|
; WASM32-FAST-NEXT: # %bb.0:
|
|
; WASM32-FAST-NEXT: i64.load16_s $push0=, 0($0)
|
|
; WASM32-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-MVP-LABEL: sext_i16_i64:
|
|
; WASM32-FAST-MVP: .functype sext_i16_i64 (i32) -> (i64)
|
|
; WASM32-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM32-FAST-MVP-NEXT: i64.load16_s $push0=, 0($0)
|
|
; WASM32-FAST-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-LABEL: sext_i16_i64:
|
|
; WASM64-DAG: .functype sext_i16_i64 (i64) -> (i64)
|
|
; WASM64-DAG-NEXT: # %bb.0:
|
|
; WASM64-DAG-NEXT: i64.load16_s $push0=, 0($0)
|
|
; WASM64-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-MVP-LABEL: sext_i16_i64:
|
|
; WASM64-DAG-MVP: .functype sext_i16_i64 (i64) -> (i64)
|
|
; WASM64-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM64-DAG-MVP-NEXT: i64.load16_s $push0=, 0($0)
|
|
; WASM64-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-LABEL: sext_i16_i64:
|
|
; WASM64-FAST: .functype sext_i16_i64 (i64) -> (i64)
|
|
; WASM64-FAST-NEXT: # %bb.0:
|
|
; WASM64-FAST-NEXT: i64.load16_s $push0=, 0($0)
|
|
; WASM64-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-MVP-LABEL: sext_i16_i64:
|
|
; WASM64-FAST-MVP: .functype sext_i16_i64 (i64) -> (i64)
|
|
; WASM64-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM64-FAST-MVP-NEXT: i64.load16_s $push0=, 0($0)
|
|
; WASM64-FAST-MVP-NEXT: return $pop0
|
|
%v = load i16, ptr %p
|
|
%e = sext i16 %v to i64
|
|
ret i64 %e
|
|
}
|
|
|
|
define i64 @zext_i16_i64(ptr %p) {
|
|
; WASM32-DAG-LABEL: zext_i16_i64:
|
|
; WASM32-DAG: .functype zext_i16_i64 (i32) -> (i64)
|
|
; WASM32-DAG-NEXT: # %bb.0:
|
|
; WASM32-DAG-NEXT: i64.load16_u $push0=, 0($0)
|
|
; WASM32-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM32-DAG-MVP-LABEL: zext_i16_i64:
|
|
; WASM32-DAG-MVP: .functype zext_i16_i64 (i32) -> (i64)
|
|
; WASM32-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM32-DAG-MVP-NEXT: i64.load16_u $push0=, 0($0)
|
|
; WASM32-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-LABEL: zext_i16_i64:
|
|
; WASM32-FAST: .functype zext_i16_i64 (i32) -> (i64)
|
|
; WASM32-FAST-NEXT: # %bb.0:
|
|
; WASM32-FAST-NEXT: i64.load16_u $push0=, 0($0)
|
|
; WASM32-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-MVP-LABEL: zext_i16_i64:
|
|
; WASM32-FAST-MVP: .functype zext_i16_i64 (i32) -> (i64)
|
|
; WASM32-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM32-FAST-MVP-NEXT: i64.load16_u $push0=, 0($0)
|
|
; WASM32-FAST-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-LABEL: zext_i16_i64:
|
|
; WASM64-DAG: .functype zext_i16_i64 (i64) -> (i64)
|
|
; WASM64-DAG-NEXT: # %bb.0:
|
|
; WASM64-DAG-NEXT: i64.load16_u $push0=, 0($0)
|
|
; WASM64-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-MVP-LABEL: zext_i16_i64:
|
|
; WASM64-DAG-MVP: .functype zext_i16_i64 (i64) -> (i64)
|
|
; WASM64-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM64-DAG-MVP-NEXT: i64.load16_u $push0=, 0($0)
|
|
; WASM64-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-LABEL: zext_i16_i64:
|
|
; WASM64-FAST: .functype zext_i16_i64 (i64) -> (i64)
|
|
; WASM64-FAST-NEXT: # %bb.0:
|
|
; WASM64-FAST-NEXT: i64.load16_u $push0=, 0($0)
|
|
; WASM64-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-MVP-LABEL: zext_i16_i64:
|
|
; WASM64-FAST-MVP: .functype zext_i16_i64 (i64) -> (i64)
|
|
; WASM64-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM64-FAST-MVP-NEXT: i64.load16_u $push0=, 0($0)
|
|
; WASM64-FAST-MVP-NEXT: return $pop0
|
|
%v = load i16, ptr %p
|
|
%e = zext i16 %v to i64
|
|
ret i64 %e
|
|
}
|
|
|
|
define i64 @sext_i32_i64(ptr %p) {
|
|
; WASM32-DAG-LABEL: sext_i32_i64:
|
|
; WASM32-DAG: .functype sext_i32_i64 (i32) -> (i64)
|
|
; WASM32-DAG-NEXT: # %bb.0:
|
|
; WASM32-DAG-NEXT: i64.load32_s $push0=, 0($0)
|
|
; WASM32-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM32-DAG-MVP-LABEL: sext_i32_i64:
|
|
; WASM32-DAG-MVP: .functype sext_i32_i64 (i32) -> (i64)
|
|
; WASM32-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM32-DAG-MVP-NEXT: i64.load32_s $push0=, 0($0)
|
|
; WASM32-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-LABEL: sext_i32_i64:
|
|
; WASM32-FAST: .functype sext_i32_i64 (i32) -> (i64)
|
|
; WASM32-FAST-NEXT: # %bb.0:
|
|
; WASM32-FAST-NEXT: i64.load32_s $push0=, 0($0)
|
|
; WASM32-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-MVP-LABEL: sext_i32_i64:
|
|
; WASM32-FAST-MVP: .functype sext_i32_i64 (i32) -> (i64)
|
|
; WASM32-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM32-FAST-MVP-NEXT: i64.load32_s $push0=, 0($0)
|
|
; WASM32-FAST-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-LABEL: sext_i32_i64:
|
|
; WASM64-DAG: .functype sext_i32_i64 (i64) -> (i64)
|
|
; WASM64-DAG-NEXT: # %bb.0:
|
|
; WASM64-DAG-NEXT: i64.load32_s $push0=, 0($0)
|
|
; WASM64-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-MVP-LABEL: sext_i32_i64:
|
|
; WASM64-DAG-MVP: .functype sext_i32_i64 (i64) -> (i64)
|
|
; WASM64-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM64-DAG-MVP-NEXT: i64.load32_s $push0=, 0($0)
|
|
; WASM64-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-LABEL: sext_i32_i64:
|
|
; WASM64-FAST: .functype sext_i32_i64 (i64) -> (i64)
|
|
; WASM64-FAST-NEXT: # %bb.0:
|
|
; WASM64-FAST-NEXT: i64.load32_s $push0=, 0($0)
|
|
; WASM64-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-MVP-LABEL: sext_i32_i64:
|
|
; WASM64-FAST-MVP: .functype sext_i32_i64 (i64) -> (i64)
|
|
; WASM64-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM64-FAST-MVP-NEXT: i64.load32_s $push0=, 0($0)
|
|
; WASM64-FAST-MVP-NEXT: return $pop0
|
|
%v = load i32, ptr %p
|
|
%e = sext i32 %v to i64
|
|
ret i64 %e
|
|
}
|
|
|
|
define i64 @zext_i32_i64(ptr %p) {
|
|
; WASM32-DAG-LABEL: zext_i32_i64:
|
|
; WASM32-DAG: .functype zext_i32_i64 (i32) -> (i64)
|
|
; WASM32-DAG-NEXT: # %bb.0:
|
|
; WASM32-DAG-NEXT: i64.load32_u $push0=, 0($0)
|
|
; WASM32-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM32-DAG-MVP-LABEL: zext_i32_i64:
|
|
; WASM32-DAG-MVP: .functype zext_i32_i64 (i32) -> (i64)
|
|
; WASM32-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM32-DAG-MVP-NEXT: i64.load32_u $push0=, 0($0)
|
|
; WASM32-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-LABEL: zext_i32_i64:
|
|
; WASM32-FAST: .functype zext_i32_i64 (i32) -> (i64)
|
|
; WASM32-FAST-NEXT: # %bb.0:
|
|
; WASM32-FAST-NEXT: i64.load32_u $push0=, 0($0)
|
|
; WASM32-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM32-FAST-MVP-LABEL: zext_i32_i64:
|
|
; WASM32-FAST-MVP: .functype zext_i32_i64 (i32) -> (i64)
|
|
; WASM32-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM32-FAST-MVP-NEXT: i64.load32_u $push0=, 0($0)
|
|
; WASM32-FAST-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-LABEL: zext_i32_i64:
|
|
; WASM64-DAG: .functype zext_i32_i64 (i64) -> (i64)
|
|
; WASM64-DAG-NEXT: # %bb.0:
|
|
; WASM64-DAG-NEXT: i64.load32_u $push0=, 0($0)
|
|
; WASM64-DAG-NEXT: return $pop0
|
|
;
|
|
; WASM64-DAG-MVP-LABEL: zext_i32_i64:
|
|
; WASM64-DAG-MVP: .functype zext_i32_i64 (i64) -> (i64)
|
|
; WASM64-DAG-MVP-NEXT: # %bb.0:
|
|
; WASM64-DAG-MVP-NEXT: i64.load32_u $push0=, 0($0)
|
|
; WASM64-DAG-MVP-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-LABEL: zext_i32_i64:
|
|
; WASM64-FAST: .functype zext_i32_i64 (i64) -> (i64)
|
|
; WASM64-FAST-NEXT: # %bb.0:
|
|
; WASM64-FAST-NEXT: i64.load32_u $push0=, 0($0)
|
|
; WASM64-FAST-NEXT: return $pop0
|
|
;
|
|
; WASM64-FAST-MVP-LABEL: zext_i32_i64:
|
|
; WASM64-FAST-MVP: .functype zext_i32_i64 (i64) -> (i64)
|
|
; WASM64-FAST-MVP-NEXT: # %bb.0:
|
|
; WASM64-FAST-MVP-NEXT: i64.load32_u $push0=, 0($0)
|
|
; WASM64-FAST-MVP-NEXT: return $pop0
|
|
%v = load i32, ptr %p
|
|
%e = zext i32 %v to i64
|
|
ret i64 %e
|
|
}
|
|
|