mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-01 16:33:37 +01:00
5b68fc5126
The .b8 operations in PTX are far more limiting than I first thought. The mov operation isn't even supported, so there's no way of converting a .pred value into a .b8 without going via .b16, which is not sensible. An improved implementation needs to use the fact that loads and stores automatically extend and truncate to implement support for EXTLOAD and TRUNCSTORE in order to correctly support boolean values. llvm-svn: 133873
63 lines
1.1 KiB
LLVM
63 lines
1.1 KiB
LLVM
; RUN: llc < %s -march=ptx32 | FileCheck %s
|
|
|
|
define ptx_device i16 @t1_u16() {
|
|
; CHECK: mov.u16 rh{{[0-9]+}}, 0;
|
|
; CHECK: ret;
|
|
ret i16 0
|
|
}
|
|
|
|
define ptx_device i32 @t1_u32() {
|
|
; CHECK: mov.u32 r{{[0-9]+}}, 0;
|
|
; CHECK: ret;
|
|
ret i32 0
|
|
}
|
|
|
|
define ptx_device i64 @t1_u64() {
|
|
; CHECK: mov.u64 rd{{[0-9]+}}, 0;
|
|
; CHECK: ret;
|
|
ret i64 0
|
|
}
|
|
|
|
define ptx_device float @t1_f32() {
|
|
; CHECK: mov.f32 r{{[0-9]+}}, 0F00000000;
|
|
; CHECK: ret;
|
|
ret float 0.0
|
|
}
|
|
|
|
define ptx_device double @t1_f64() {
|
|
; CHECK: mov.f64 rd{{[0-9]+}}, 0D0000000000000000;
|
|
; CHECK: ret;
|
|
ret double 0.0
|
|
}
|
|
|
|
define ptx_device i16 @t2_u16(i16 %x) {
|
|
; CHECK: mov.u16 rh{{[0-9]+}}, rh{{[0-9]+}};
|
|
; CHECK: ret;
|
|
ret i16 %x
|
|
}
|
|
|
|
define ptx_device i32 @t2_u32(i32 %x) {
|
|
; CHECK: mov.u32 r{{[0-9]+}}, r{{[0-9]+}};
|
|
; CHECK: ret;
|
|
ret i32 %x
|
|
}
|
|
|
|
define ptx_device i64 @t2_u64(i64 %x) {
|
|
; CHECK: mov.u64 rd{{[0-9]+}}, rd{{[0-9]+}};
|
|
; CHECK: ret;
|
|
ret i64 %x
|
|
}
|
|
|
|
define ptx_device float @t3_f32(float %x) {
|
|
; CHECK: mov.u32 r{{[0-9]+}}, r{{[0-9]+}};
|
|
; CHECK-NEXT: ret;
|
|
ret float %x
|
|
}
|
|
|
|
define ptx_device double @t3_f64(double %x) {
|
|
; CHECK: mov.u64 rd{{[0-9]+}}, rd{{[0-9]+}};
|
|
; CHECK-NEXT: ret;
|
|
ret double %x
|
|
}
|
|
|