blob: d20d6a1e79931c0867bd5db3e064b98a949faf34 [file] [edit]
; Check that convert_ builtins pick the signed/unsigned opcode from the source
; operand signedness.
; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}
; CHECK-DAG: OpName %[[#StoS:]] "s_to_s"
; CHECK-DAG: OpName %[[#StoU:]] "s_to_u"
; CHECK-DAG: OpName %[[#UtoS:]] "u_to_s"
; CHECK-DAG: OpName %[[#UtoU:]] "u_to_u"
; CHECK-DAG: OpName %[[#StoF:]] "s_to_f"
; CHECK-DAG: OpName %[[#UtoF:]] "u_to_f"
; signed source -> signed dest: sign-extend.
; CHECK: %[[#StoS]] = OpFunction
; CHECK: OpSConvert
define spir_func void @s_to_s(i32 noundef %x) {
call spir_func i64 @_Z12convert_longi(i32 noundef %x)
ret void
}
; signed source -> unsigned dest: sign-extend.
; CHECK: %[[#StoU]] = OpFunction
; CHECK: OpSConvert
define spir_func void @s_to_u(i32 noundef %x) {
call spir_func i64 @_Z13convert_ulongi(i32 noundef %x)
ret void
}
; unsigned source -> signed dest: zero-extend.
; CHECK: %[[#UtoS]] = OpFunction
; CHECK: OpUConvert
define spir_func void @u_to_s(i32 noundef %x) {
call spir_func i64 @_Z12convert_longj(i32 noundef %x)
ret void
}
; unsigned source -> unsigned dest: zero-extend.
; CHECK: %[[#UtoU]] = OpFunction
; CHECK: OpUConvert
define spir_func void @u_to_u(i32 noundef %x) {
call spir_func i64 @_Z13convert_ulongj(i32 noundef %x)
ret void
}
; signed source -> float.
; CHECK: %[[#StoF]] = OpFunction
; CHECK: OpConvertSToF
define spir_func void @s_to_f(i32 noundef %x) {
call spir_func float @_Z13convert_floati(i32 noundef %x)
ret void
}
; unsigned source -> float.
; CHECK: %[[#UtoF]] = OpFunction
; CHECK: OpConvertUToF
define spir_func void @u_to_f(i32 noundef %x) {
call spir_func float @_Z13convert_floatj(i32 noundef %x)
ret void
}
declare spir_func i64 @_Z12convert_longi(i32 noundef)
declare spir_func i64 @_Z13convert_ulongi(i32 noundef)
declare spir_func i64 @_Z12convert_longj(i32 noundef)
declare spir_func i64 @_Z13convert_ulongj(i32 noundef)
declare spir_func float @_Z13convert_floati(i32 noundef)
declare spir_func float @_Z13convert_floatj(i32 noundef)