Files
UnrealEngine/Engine/Source/ThirdParty/Intel/ISPC/ispc-1.24.0/tests/lit-tests/bool-casts-varying.ispc
2025-05-18 13:04:45 +08:00

92 lines
3.7 KiB
Plaintext

// RUN: %{ispc} --target=host --nowrap --nostdlib -O2 --emit-llvm-text %s -o - | FileCheck %s
// CHECK-LABEL: @to_float16___vyhvyh(
// CHECK-NEXT: allocas:
// CHECK-NEXT: [[CMP:%.*]] = fcmp olt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
// CHECK-NEXT: [[CAST:%.*]] = uitofp <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
float16 to_float16(float16 a, float16 b) { return a < b; }
// CHECK-LABEL: @to_float___vyfvyf(
// CHECK-NEXT: allocas:
// CHECK-NEXT: [[CMP:%.*]] = fcmp olt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
// CHECK-NEXT: [[CAST:%.*]] = uitofp <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
float to_float(float a, float b) { return a < b; }
// CHECK-LABEL: @to_double___vydvyd(
// CHECK-NEXT: allocas:
// CHECK-NEXT: [[CMP:%.*]] = fcmp olt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
// CHECK-NEXT: [[CAST:%.*]] = uitofp <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
double to_double(double a, double b) { return a < b; }
// CHECK-LABEL: @to_int8___vytvyt(
// CHECK-NEXT: allocas:
// CHECK-NEXT: [[CMP:%.*]] = icmp slt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
// CHECK-NEXT: [[CAST:%.*]] = zext <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
int8 to_int8(int8 a, int8 b) { return a < b; }
// CHECK-LABEL: @to_uint8___vyTvyT(
// CHECK-NEXT: allocas:
// CHECK-NEXT: [[CMP:%.*]] = icmp ugt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
// CHECK-NEXT: [[CAST:%.*]] = zext <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
uint8 to_uint8(uint8 a, uint8 b) { return a > b; }
// CHECK-LABEL: @to_int16___vysvys(
// CHECK-NEXT: allocas:
// CHECK-NEXT: [[CMP:%.*]] = icmp slt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
// CHECK-NEXT: [[CAST:%.*]] = zext <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
int16 to_int16(int16 a, int16 b) { return a < b; }
// CHECK-LABEL: @to_uint16___vySvyS(
// CHECK-NEXT: allocas:
// CHECK-NEXT: [[CMP:%.*]] = icmp ugt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
// CHECK-NEXT: [[CAST:%.*]] = zext <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
uint16 to_uint16(uint16 a, uint16 b) { return a > b; }
// CHECK-LABEL: @to_int32___vyivyi(
// CHECK-NEXT: allocas:
// CHECK-NEXT: [[CMP:%.*]] = icmp slt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
// CHECK-NEXT: [[CAST:%.*]] = zext <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
int32 to_int32(int32 a, int32 b) { return a < b; }
// CHECK-LABEL: @to_uint32___vyuvyu(
// CHECK-NEXT: allocas:
// CHECK-NEXT: [[CMP:%.*]] = icmp ugt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
// CHECK-NEXT: [[CAST:%.*]] = zext <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
uint32 to_uint32(uint32 a, uint32 b) { return a > b; }
// CHECK-LABEL: @to_int64___vyIvyI(
// CHECK-NEXT: allocas:
// CHECK-NEXT: [[CMP:%.*]] = icmp slt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
// CHECK-NEXT: [[CAST:%.*]] = zext <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
int64 to_int64(int64 a, int64 b) { return a < b; }
// CHECK-LABEL: @to_uint64___vyUvyU(
// CHECK-NEXT: allocas:
// CHECK-NEXT: [[CMP:%.*]] = icmp ugt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
// CHECK-NEXT: [[CAST:%.*]] = zext <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
uint64 to_uint64(uint64 a, uint64 b) { return a > b; }
bool to_bool(bool a, bool b) { return a == b; }