blob: d3cd4a3c8fb2f11e6b720a2c30b6f12340d2cd0b [file] [log] [blame]
// Tests folding and canonicalization of casting/conversion ops.
// RUN: iree-opt -split-input-file -pass-pipeline="vm.module(canonicalize)" %s | FileCheck %s
// CHECK-LABEL: @trunc_folds
vm.module @trunc_folds {
// CHECK-LABEL: @trunc_i8_const
vm.func @trunc_i8_const() -> i32 {
// CHECK: vm.const.i32 255
%c = vm.const.i32 0xFFFFFFFF
%0 = vm.trunc.i32.i8 %c : i32 -> i32
vm.return %0 : i32
}
// CHECK-LABEL: @trunc_i16_const
vm.func @trunc_i16_const() -> i32 {
// CHECK: vm.const.i32 65535
%c = vm.const.i32 0xFFFFFFFF
%0 = vm.trunc.i32.i16 %c : i32 -> i32
vm.return %0 : i32
}
}
// -----
// CHECK-LABEL: @trunc_folds_i64
vm.module @trunc_folds_i64 {
// CHECK-LABEL: @trunc_i8_const
vm.func @trunc_i8_const() -> i32 {
// CHECK: vm.const.i32 255
%c = vm.const.i64 0xFFFFFFFFFFFFFFFF
%0 = vm.trunc.i64.i8 %c : i64 -> i32
vm.return %0 : i32
}
// CHECK-LABEL: @trunc_i16_const
vm.func @trunc_i16_const() -> i32 {
// CHECK: vm.const.i32 65535
%c = vm.const.i64 0xFFFFFFFFFFFFFFFF
%0 = vm.trunc.i64.i16 %c : i64 -> i32
vm.return %0 : i32
}
// CHECK-LABEL: @trunc_i32_const
vm.func @trunc_i32_const() -> i32 {
// CHECK: vm.const.i32 -1
%c = vm.const.i64 0xFFFFFFFFFFFFFFFF
%0 = vm.trunc.i64.i32 %c : i64 -> i32
vm.return %0 : i32
}
}
// -----
// CHECK-LABEL: @ext_folds
vm.module @ext_folds {
// CHECK-LABEL: @ext_i8_i32_s_const
vm.func @ext_i8_i32_s_const() -> i32 {
// CHECK: vm.const.i32 -1
%c = vm.const.i32 0x000000FF
%0 = vm.ext.i8.i32.s %c : i32 -> i32
vm.return %0 : i32
}
// CHECK-LABEL: @ext_i8_i32_u_const
vm.func @ext_i8_i32_u_const() -> i32 {
// CHECK: vm.const.i32 255
%c = vm.const.i32 0x000000FF
%0 = vm.ext.i8.i32.u %c : i32 -> i32
vm.return %0 : i32
}
// CHECK-LABEL: @ext_i16_i32_s_const
vm.func @ext_i16_i32_s_const() -> i32 {
// CHECK: vm.const.i32 -1
%c = vm.const.i32 0x0000FFFF
%0 = vm.ext.i16.i32.s %c : i32 -> i32
vm.return %0 : i32
}
// CHECK-LABEL: @ext_i16_i32_u_const
vm.func @ext_i16_i32_u_const() -> i32 {
// CHECK: vm.const.i32 65535
%c = vm.const.i32 0x0000FFFF
%0 = vm.ext.i16.i32.u %c : i32 -> i32
vm.return %0 : i32
}
}
// -----
// CHECK-LABEL: @ext_folds_i64
vm.module @ext_folds_i64 {
// CHECK-LABEL: @ext_i8_i64_s_const
vm.func @ext_i8_i64_s_const() -> i64 {
// CHECK: vm.const.i64 -1
%c = vm.const.i32 0x000000FF
%0 = vm.ext.i8.i64.s %c : i32 -> i64
vm.return %0 : i64
}
// CHECK-LABEL: @ext_i8_i64_u_const
vm.func @ext_i8_i64_u_const() -> i64 {
// CHECK: vm.const.i64 255
%c = vm.const.i32 0x000000FF
%0 = vm.ext.i8.i64.u %c : i32 -> i64
vm.return %0 : i64
}
// CHECK-LABEL: @ext_i16_i64_s_const
vm.func @ext_i16_i64_s_const() -> i64 {
// CHECK: vm.const.i64 -1
%c = vm.const.i32 0x0000FFFF
%0 = vm.ext.i16.i64.s %c : i32 -> i64
vm.return %0 : i64
}
// CHECK-LABEL: @ext_i16_i64_u_const
vm.func @ext_i16_i64_u_const() -> i64 {
// CHECK: vm.const.i64 65535
%c = vm.const.i32 0x0000FFFF
%0 = vm.ext.i16.i64.u %c : i32 -> i64
vm.return %0 : i64
}
// CHECK-LABEL: @ext_i32_i64_s_const
vm.func @ext_i32_i64_s_const() -> i64 {
// CHECK: vm.const.i64 -1
%c = vm.const.i32 0xFFFFFFFF
%0 = vm.ext.i32.i64.s %c : i32 -> i64
vm.return %0 : i64
}
// CHECK-LABEL: @ext_i32_i64_u_const
vm.func @ext_i32_i64_u_const() -> i64 {
// CHECK: vm.const.i64 4294967295
%c = vm.const.i32 0xFFFFFFFF
%0 = vm.ext.i32.i64.u %c : i32 -> i64
vm.return %0 : i64
}
}